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