Пособие-самоучитель on-line "Visual Basic с нуля"
Глава 21. ActiveX: панель состояния Status Bar.
Скачать исходник примера StatusBar
Дата создания 04.07.2005 {Автор 4us}


В этой главе мы разберем по косточкам еще одно средство управления ActiveX, которое украсит твой проект и сделает его привлекательным для потенциального пользователя. Это панель состояния, которая представляет собой полосу внизу окна формы, в прямоугольниках которой отображается разнообразная информация о ходе выполнения программы, например имя открытого файла, его параметры, сообщения для юзера и все, что хочешь туда запихнуть. Практически всякая уважающая себя Windows-программа имеет панель Status Bar. Мы тоже сделаем такую:



Этот контрол хранится в файле mscomctl.ocx и чтобы воспользоваться его возможностями, необходимо добавить его в твой проект. О добавлении ActiveX в проект подробно и увлекательно рассказано в главе 12.

Итак, создаем новый exe-проект и добавляем наш контрол: Проект - Компонеты - Microsoft Windows Common Controls 6.0 в панель инструментов и кладем его на форму. Кроме того нам понадобится контрол, с которым мы уже работали (Глава 15) - CommonDialog для красивого открытия файла, добавим и его: Проект - Компоненты - Microsoft Common Dialog Control 6.0 и также кладем на форму. Ну и положим на форму текстбокс со свойствами Multiline=True и ScrollBars - 2 Вертикаль и кнопку Command1.

Ну вот теперь займемся вплотную панелью StatusBar. Щелкнем правой кнопки мыши по StatusBar1 (она уже находится у нас на форме) и в выпавшем меню выберем последнюю строчку - Properties (Свойства). У нас появится окно свойств (рис. 31)

Рисунок 31.
Точнее это первая вкладка - General. Эта главная вкладка, она нам не очень интересна, т.к. устанавливает общие свойства панели StatusBar, но тем не менее на ней мы видим четыре поля

Style - определяет стиль объекта (0 - sbrNormal - обычный многооконный и 1 - sbrSimple - одно большое окно по всей ширине формы.
MousePointer - как для формы и других объектов определяет тип указателя мыши (99 - пользовательский)
SimpleText - текст, выводимый в StatusBar при его стиле 1 - sbrSimple
OLEDropMode - определяет отключения возможности перетаскивания (0 -ccOLEDropNone) или ручное (1-ccOLEDropManual)

Кроме того здесь имеются два флажка:

Enabled - делает доступным или недоступным (т.е. не реагирующим на события)
Show Tips - отключает или включает показ контекстной подсказки (желтые окошки).

Ну здесь ничего менять не будем и перейдем к следующей вкладке (рис. 32)

Рисунок 32.
Что мы тут интересного находим:

Во-первых, на этой вкладке мы можем добавлять или удалять поля (максимальное число полей - 16) кнопками "Insert Panel" и "Remove Panel".
Index - номер поля, он же индекс, с которым мы в настоящий момент работаем. По этому индексу мы и будем записывать информацию в нужное поле.
Text - сюда записывают текст, который выводится в соответствующем поле StatusBar. Но мы будем заносить текст программно (например StatusBar1.Panels(1).Text = CommonDialog1.FileTitle), поэтому оставим это поле свободным.
Key - идентификатор члена коллекции. Использовать не будем.
Tag - дополнительное средство идентификации объекта - любое уникальное строковое выражение.
Alignment - ориентирует выводимый текст в поле: прижимает вправо или влево или центрирует.
Style - определяет вид и поведение панели StatusBar. Может принимать следующие значения:

 
Константа
Значение
Описание
 
sbrText
0
Принято по умолчанию. Текст или графическая картинка (bitmap)
 
sbrCaps
1
Отображает символы CAPS при включенных заглавных буквах на клавиатуре (клавиша Caps Lock).
 
sbrNum
2
Отображает символы NUM при включенной малой цифровой (калькуляторной) клавиатуре (клавиша Num Lock).
 
sbrIns
3
Отображает символы INS, когда включен режим вставки (клавиша Insert).
 
sbrScrl
4
Отображает символы SCRL, когда включен режим прокрутки. (клавиша Scroll Lock)
 
sbrTime
5
Отображает текущее время в системном формате.
 
sbrDate
6
Отображает текущую дату системном формате.
 
sbrKana
7
Отображает символы KANA, когда включен режим прокрутки (клавиша Kana Lock). Только для Японии.

Bevel - показывает общий стиль поля панели: вдавленное (sbrInset) - по умолчанию, выпуклое (sbrRaised) или ровное(sbrNoBevel).
AutoSize - позволяет настроить размер поля панели. Может принимать значения: ширина поля понели неизменна и соответствут свойству Width (sbrNoAutoSize), ширина поля панели регулируется так, что все поля занимают всю ширину окна, но не менее заданного свойством MinWidth (sbrSpring), ширина панели зависит от ширины выводимого текста, но не менее заданного свойством MinWidth (sbrContents).
В поле Minimum Width можно задать свойство MinWidth, т.е. минимальную ширину поля панели в твипах.
Так же с помощью кнопки Browse можно запихнуть в поле подходящую картинку. Только мы этого тоже делать не будем.
Ну и на этой же вкладке есть флажки доступности Enable и видимости Visible каждого поля панели.
На следующей вкладке Font мы можем просто выставить шрифт, жирность и прочие атрибуты. Специальных объяснений это не требует.
Ну и на последней вкладке Picture можно присобачить иконку к свойству MouseIcon, если конечно на первой вкладке General свойство MousePointer было установлено в 99 - ccCustom.

Давайте напишем программку работы с текстовым файлом, данные о котором и будем выводить в Status Bar. Создадим семь полей панели со следующими свойствами:

  1 - для картинки и имени файла
Alignment =1 - sbrCenter
Style=0 - sbrText
Bevel=1 - sbrInsert
AutoSize=2 - sbrContents
MinWidth=1440
  2 - для размера файла
Alignment =1 - sbrCenter
Style=0 - sbrText
Bevel=1 - sbrInsert
AutoSize=2 - sbrContents
MinWidth=400
  3 - для позиции выделения
Alignment =1 - sbrCenter
Style=0 - sbrText
Bevel=1 - sbrInsert
AutoSize=2 - sbrContents
MinWidth=800
  4 - для размера выделения
Alignment =1 - sbrCenter
Style=0 - sbrText
Bevel=1 - sbrInsert
AutoSize=1 - sbrSpring
MinWidth=1440
  5 - для статуса CAPS
Alignment =1 - sbrCenter
Style=1 - sbrCaps
Bevel=1 - sbrInsert
AutoSize=2 - sbrContents
MinWidth=430
  6 - для статуса INS
Alignment =1 - sbrCenter
Style=3 - sbrIns
Bevel=1 - sbrInsert
AutoSize=2 - sbrContents
MinWidth=430
  7 - для системного времени
Alignment =1 - sbrCenter
Style=5 - sbrTime
Bevel=1 - sbrInsert
AutoSize=2 - sbrContents
MinWidth=430

А кроме того, на вкладке General установим свойство MousePointer=99 - ccCustom и соответственно на вкладке Picture установим свой собственный курсор "d.ico" (он есть в исходнике примера вверху страницы).

Теперь, собственно, код. В кнопке Command1 мы будем открывать и считывать текстовой файл. Тут ничего нового нет. Код я передрал из главы 15. Единственное отличие в том, что при задании свойств часто приходится повторять имя объекта, довольно длинного (CommandDialog1 или StatusBar1). Чтобы этого избежать, в коде использована инструкция With, использование которой предельно просто и ясно из кода. Итак, пишем:

Option Explicit

Private Sub
Command1_Click()
Dim F As Long
Dim
Stroka As String
On Error GoTo
Cansel
'**************************используем инструкцию With
With CommonDialog1
.CancelError = True
.Filter = "Текстовые файлы (*.txt) Файлы данных (*.dat)|*.txt;*.dat"
.Flags = cdlOFNFileMustExist
.DialogTitle = "Загрузить текстовой файл"
.ShowOpen
End With
'*************************кончилась инструкция With
F = FreeFile
Text1.Text = ""
Open CommonDialog1.FileName For Input As #F
Do While Not EOF(F)
Line Input #F, Stroka
Text1.Text = Text1.Text & Stroka
Loop
'в инструкции With присваиваем первому полю имя файла и картинку
With StatusBar1
.Panels(1).Text = CommonDialog1.FileTitle
.Panels(1).Picture = LoadPicture(App.Path & "\icon.jpg")
'а второму полю - длину файла
.Panels(2).Text = LOF(F) & " байт"
End With
Close #F
Exit Sub

Cansel:
If Err.Number = cdlCancel Then
Exit Sub
Else

MsgBox Err.Description
End If
End Sub

Кроме того в процедуре Text1_MouseMove мы получаем информацию о выделении и тоже запихиваем ее в панель StatusBar:

Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'начальная позиция выделения
StatusBar1.Panels(3) = "Позиция: " & Text1.SelStart
'количество выделенных знаков
StatusBar1.Panels(4) = "Выделено: " & Text1.SelLength & " знаков"
End Sub


Вот, собственно и все.

Copyright © 2005 4us




Сайт создан в системе uCoz