Programming: Visual Basic
Обзор некоторых особенностей элементов управления библиотеки FM20.DLL
Источники: ,
Давайте откроем эту библиотеку и внимательно изучим... В данной
статье я хочу познакомить Вас с библиотекой FM20.DLL. Не то чтобы Вы
ее не знали, скорее всего, открывали, видели, что она повторяет
стандартные элементы управления, и забывали про нее.
Откуда
же берется эта библиотека? Ответ прост: это элементы управления из
VBA (Visual Basic for Application). Сама по себе библиотека,
конечно, великовата - 1,05 Mb. И прежде чем просто включать ее в
исходники своего приложения десять раз подумаешь: окупает ли данный
объем, то, что она предоставляет из себя. А предоставляет она
несколько больше чем стандартные элементы управления
VB.
Давайте откроем ее и исследуем еще раз. Создайте новый
проект StandardEXE. Далее меню: Project/Components ... В диалоговом
окне выберем Microsoft Forms 2.0 Object Library. То, что появилось у
нас на левой панели инструментов, практически один к одному
повторяет стандартный набор.
Это
Frame Label CommandButton TextBox ListBox ComboBox CheckBox OptionButton ScrollBar Image
Ага, вот пошли и
отличия:
ToggleButton TabStrip SpinButton MultyPage
Давайте
"покопаемся" в них. Для просмотра некоторых эффектов, расположите на
форме картинку (свойство Picture), лучше
фотографию.
Элемент 1 -
CommandButton.
Размещаем на форме и устанавливаем
свойство BackStyle = 0 (fmBackStyleTransparent). У Вас были до этого
прозрачные кнопки? Кстати, прозрачность здесь поддерживается очень
хорошо. Зайдите в свойство Picture и выберите любую иконку -
нормальное отображение "вырезанной" иконки на фоне прозрачной
кнопки. А свойство PicturePosition - говорит само за себя
(расположение иконки на кнопке с различных сторон от надписи). И еще
2 необычных для кнопки свойства: AutoSize и WordWrap. Действуют они
абсолютно так же как и для стандартного Label, но в общем-то эффект
неожиданный.
Так же необходимо обратить внимание на события
данного элемента управления. Некоторые стандартные - отсутствуют, но
зато появилась пара новых: CommandButton1_BeforeDragOver и
CommandButton1_BeforeDropOrPaste, название которых объясняет их
работу. Кстати, эти два события имеются в наличии практически у всех
контролов данной библиотеки.
Элемент 2 -
Label.
Чего-то неожиданного ждать от простой надписи не
приходится, и все же: Наличие свойств Picture и PicturePosition, как
и у CommandButton позволяет вставлять картинку. А свойство
SpecialEffect превращает лейбл в панели с различными видами
окантовки (так может это все-таки Panel, а не
Label?).
Элемент 3 - TextBox.
Сразу же обращают
на себя внимание два свойства: AutoSize и WordWrap. Есть ли
необходимость в раздвижке текстового поля по мере ввода в него
текста - не знаю, но свойства такие у него существуют и работают
:)
Свойство TextAlign работает точно так же, как и у
RichTextBox, т.е. текст выравнивается именно так, как указано в
свойстве.
Естественно, присутствует наличие прозрачности и
различных видов рамок (свойства BackStyle и
SpecialEffect).
Интересный эффект несет свойство
AutoWordSelect. Если оно установлено в True, то при установке
курсора в середине слова и расширении выделения, происходит захват
выделением всего слова.
И еще одно свойство AutoTab. Так же
служит больше для удобств пользователя, чем программиста. При
значении True, происходит автоматическое переключение фокуса на
следующий элемент управления при достижении количества символов,
определяемых в свойстве MaxLenght. Образцом реализации этого
свойства служит инсталляционная программа Windows или Office, в том
месте, где имеются несколько полей, куда надо вводить серийный
номер. После ввода пятой цифры/буквы происходит самостоятельное
перемещение курсора в следующее текстовое поле.
Добавлены два
метода Copy и Cut, соответственно копирующие или вырезающие
выделенный текст в буфер обмена (Clipboard). В помощь им существует
свойство CanPaste (только для чтения). CanPaste будет True, если
содержимое можно буфера обмена можно вставить в данный элемент
управления. И будет False - если нельзя (например, картинку в
текстовое поле).
Элементы 4 и 5 - CheckBox и
OptionButton.
Как и у вышеуказанных элементов
поддерживают свойства прозрачности, окантовки, автоизменения
размеров.
Свойство GroupName позволяет, минуя контейнеры
(типа Frame или PictureBox) объединять данные элементы управления в
различные группы, что особенно актуально для OptionButton.
NB! В отличие от стандартных ЭУ данные CheckBox и
OptionButton НЕ ПОДДЕРЖИВАЮТ свойство Style. Для этого используется
элемент ToggleButton.
Элемент 6 -
ScrollBar.
Чем отличается от стандартного? Тем, что он
один, а не два (VScroll и Hscroll). Но зато имеет свойство
Orientation, где мы можем указать, как его
расположить.
Кстати, мы можем заняться его раскраской. За
цвет всего контрола отвечает свойство BackColor, а за цвет
треугольничков на кнопках - ForeColor.
NB! Очередная
недоделка Microsoft! Изменение раскраски на элементе происходит
только после изменения какого-либо другого свойства, или запуска
всего проекта.
Еще два (бесполезных?) свойства. Первое -
Delay. Отражает время в миллисекундах между щелчком на контроле и
началом обработки события. Второе - ProportionalThumb. Интересуется,
как отображать размер бегунка: пропорционально области прокрутки или
фиксированного размера.
Элемент 7 -
Image.
Особых различий по сравнению со стандартным Image,
я не нашел. В этом плане мне более перспективным представляется
Label из этой же библиотеки, который может еще выводить и
надписи.
NB! Смотри NB! к 6 элементу.
Элемент 8 -
ListBox.
Что сразу бросается в глаза, так это отсутствие
свойства List в окне свойств. Так что заполнение списка возможно
только программным путем :(
Отсутствует так же свойство Sort,
т.е. сортировку необходимо проводить самому :(
Зато меня
откровенно порадовало свойство TextAlign - это то, что давно не
хватало стандартному списку. Расширено свойство MatchEntry, которое
реагирует при попадании фокуса на список: отыскивает первое слово по
первой введенной букве, слову целиком или не реагирует
вовсе.
Наконец-то реализовано размещение значений в несколько
столбцов. Хотя, на мой взгляд, несколько заумно. Расположите на
форме ListBox и добавьте следующий код:
Private Sub Form_Load()
With ListBox1
.ColumnCount = 2
.AddItem "Строка 1, Столбец 1"
.List(0, 1) = "Строка 1, Столбец 2"
.List(0, 2) = "Строка 1, Столбец 3"
.AddItem "Строка 2, Столбец 1"
.List(1, 1) = "Строка 2, Столбец 2"
.List(1, 2) = "Строка 2, Столбец 3"
End With
End Sub
Свойство TextColumn, указывает
номер столбца, содержимое которого выводится при вызове свойства
Text.
Элемент 9 - ComboBox.
Если смотреть с
позиций предыдущих элементов управления, то ComboBox представляет
собой гибрид ListBox и TextBox, объединяя в себе все их достоинства,
ну и недостатки то же :)
Наличие таких свойств как TextAlign,
ColumnCount, MatchEntry, List и TextColumn абсолютно соответствует
ListBox (см. Элемент 8). А вот наличие свойств (идентичных в работе
TextBox - см. Элемент 3) AutoSize, AutoTab, AutoWordSelect,
MaxLenght и даже BackStyle (прозрачность!) + методы Cut, Copy, Paste
придает определенную изюминку этому контролу. Из индивидуальных
свойств, конечно, надо отметить ListRows. Немало было сломано копий
в различных форумах и конференциях, как изменить высоту выпадающей
части списка. А здесь все просто: отдельное свойство, указываешь
количество строк и все. Удобно!
Элемент 10 - "знакомые
незнакомцы" - Frame.
Для чего служит Frame в VB? Для двух
целей: визуально выделить часть формы и работать контейнером (чаще
всего для OptionButton). Frame из библиотеки VBA так же может
выполнять эти две функции. Однако на этом ее возможности не
заканчиваются. Frame может работать и как Image, практически
полностью поддерживая все его свойства и методы. В том числе и
PictureTilling - "размножение" мелких картинок на все пространство
элемента управления. Плюс свойство KeepScrollBarsVisible -
автоматическое встраивание полос прокрутки для изображения.
Используя еще 4 свойства: ScrollHeight, ScrollWidth, ScrollTop,
ScrollLeft, Вы можете регулировать расположение этих полос
прокрутки.
NB! Объявление ScrollHeight, ScrollWidth в коде
ОБЯЗАТЕЛЬНО должно располагаться перед ScrollTop,
ScrollLeft.
Чего не может данный Frame? Удивительно, но он не
может стать прозрачным. Ну не предусмотрели разработчики такого
свойства :(
Ну вот, со стандартными элементами вроде бы
разобрались. Осталось еще 4. Нестандартными их назвать можно с
натяжкой. В том или ином виде они встречаются в других
библиотеках.
Элемент 11 - SpinButton.
Чего-то
нового, по сравнению с тем, что было в VB4, я не нашел. Элемент
прост и этим изящен, хотя и уступает по возможностям
UpDown.
Элемент 12 - ToggleButton ("западающая"
кнопка).
Суррогатный заменитель всего-навсего одного
свойства у стандартных CheckBox и OptionButton, свойства Style = 1
(Graphical). В остальном, взял все у стандартной кнопки из этой
библиотеки.
Элементы 13 и 14 - TabStrip и
MultiPage.
Идентичные по структуре и выполняемым функциям
два элемента управления. Все различие заключается в том, что у
MultiPage имеются уже встроенные контейнеры для каждой странички,
что значительно облегчает визуальное построение
приложения.
NB! Для расположения различных элементов на
страницах MultiPage, щелкните на элементе правой кнопкой мыши и в
контекстном меню выберите Edit. Элемент управления получит другой
вид окантовки. Если теперь щелкнуть правой кнопкой мыши на ярлыках,
то появится возможность добавлять, удалять и переименовывать
ярлыки.
Основные методы работы с MultiPage производятся через
коллекцию Pages и класс Page (подробнее можно ознакомиться через
Object Browser).
Принципы работы с TabStrip можно показать на
следующем примере. Разместите на форме TabStrip и 2 PictureBox:
Picture1 и Picture2. Раскрасьте в различные цвета PictureBox, чтобы
легче различать.
Private Sub
Form_Load()
Picture1.Move TabStrip1.Left, TabStrip1.Top + TabStrip1.Height,
_TabStrip1.Width Picture2.Move -20000, TabStrip1.Top +
TabStrip1.Height, _TabStrip1.Width
End Sub
Private Sub
TabStrip1_Click(Index As Long)
Select Case
TabStrip1.Value
Case 0
Picture1.Move TabStrip1.Left, TabStrip1.Top +
TabStrip1.Height, _TabStrip1.Width Picture2.Move -20000,
TabStrip1.Top + TabStrip1.Height, _TabStrip1.Width
Case 1
Picture1.Move -20000, TabStrip1.Top + TabStrip1.Height,
_TabStrip1.Width Picture2.Move TabStrip1.Left, TabStrip1.Top +
TabStrip1.Height, _TabStrip1.Width
End Select
End Sub
На этом, пожалуй, краткий обзор
библиотеки FM20.DLL можно завершить. В задачи этой статьи не входило
подробное изучение каждого контрола, для этого существует хелп по
VBA (FM20.CHM). Но думаю, что основную задачу я выполнил - навел Вас
на размышления: а так ли уж хороши ЭУ в самом VB? Или действительно
хороши? В заключение немного об общих недоработках:
1.
наверно, надо отметить отсутствие у всех вышеуказанных контролов
свойства hDC - хэндла (идентификатора), что значительно сокращает
использование API-функций, большинство которых, требуют
его.
2. отсутствие ряда контролов, таких как PictureBox,
Timer или группы контролов для работы с
файлами.
Лирическое отступление.
Для тех, кто
всерьез заинтересуется данной библиотекой, рекомендую обратить
внимание на ряд классов, никак не отраженных в вышеперечисленных
контролах (DataObject, NewFont, группа классов HTML). Счастливой
охоты!
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|