Обзор некоторых особенностей элементов управления библиотеки 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 и добавьте следующий код:
Свойство 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(подробнее можно ознакомиться через ObjectBrowser).
Принципы работы с 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). Счастливой охоты!