Одним из важнейших факторов коммерческого успеха ПО является примечательный, оригинальный, понятный и удобный интерфейс. Поскольку программисты, пишущие в средах Borland (Delphi, C++ Builder), порядком избалованы обилием компонентов от сторонних разработчиков, речь будет идти о создании такого интерфейса в среде MS VB 6. В этом цикле статей будут рассмотрены наиболее часто встречающиеся нестандартные элементы интерфейса, советы по построению приложения и пути их воплощения.
Msvbvm60.dll
Название msvbvm60.dll расшифровывается как MS VB Virtual Machine for VB 6.0. Этот файл необходим для всех программ, написанных на VB6. Некоторых начинающих программистов отпугивает от программирования на VB именно этот факт, в сочетании с размером этого файла — 1 384 448 байт. Однако его совсем не нужно поставлять вместе со своей программой на VB, он входит в состав всех ОС Windows, начиная с 95 и NT, а для любого количества запущенных программ на VB требуется только одна копия этого файла. Тем не менее, используемые OCX-файлы необходимо поставлять вместе со своей программой, они-то и не радуют VB-программиста, поскольку весьма громоздки (>200 Kб). О том, как можно обойтись без дополнительных OCX’ов, написано ниже.
О Common Dialog
Все VB-программисты, хоть раз утруждавшие свои программы работой с пользовательскими файлами, знают о необходимости снабжать свой продукт диалогом открытия файлов. Такой диалог, будучи состряпанным из стандартных элементов управления VB DriveListBox, DirListBox, FileListBox, выглядит, мягко говоря, архаично (см. рис. 1) и не удовлетворяет требованиям нынешнего времени. Альтернативой ему служит control Microsoft Common Dialog Control 6.0, который можно отыскать, right-кликнув крысой на панели компонентов и выбрав из вылезшего PopUp-меню Компоненты… или разыскав пункт меню Проект > Компоненты (Ctrl+T). Control помещается на форме, после чего там возникает иконка. Затем в тексте программы надо написать примерно следующее:
Private Sub btnOpen_Click() Dim intFreeFileHandle As Integer 'Объявляем handle свободного потока ввода-вывода With CommonDialog1 .DefaultExt = "*.txt" 'Расширение по умолчанию — .exe .DialogTitle = "Открыть текстовый файл" 'Заглавие диалога — "Открыть текстовый файл" .FileName = "" 'Имя файла по умолчанию .Filter = "Текстовые файлы|*.txt|Все файлы|*.*" 'Фильтры, разделенные вертикальной чертой .InitDir = "c:\" 'Папка, с которой начинается обзор .ShowOpen 'Метод, отображающий окно диалога открытия файла End With If CommonDialog1.FileName <> "" Then 'Если юзер выбрал файл и нажал ОК intFreeFileHandle = FreeFile 'Получаем handle свободного потока ввода-вывода Open CommonDialog1.FileName For Input As intFreeFileHandle 'Открываем файл для считывания 'Ваши операции с открытым файлом Close intFreeFileHandle 'Закрываем файл End If End Sub
Более того, Microsoft Common Control 6.0 позволяет, помимо вызова диалога открытия файла (см. Рис. 2), вызывать диалог сохранения файла, выбора цвета, шрифта, отображать help и устанавливать настройки принтера. Для всего этого необходимо вызывать соответственно, методы ShowSave, ShowColor, ShowFont, ShowHelp и ShowPrinter. Отпугивает лишь то, что файл этого элемента управления Comdlg32.ocx весит 140 096 байт . Для преодоления этого недостатка следует применять API-функцию GetOpenFileName (необходимо объявление типа OPENFILENAME). Вот пример (см. Рис. 3):
Private Sub cmdOpen_Click() Dim s As OPENFILENAME With s .lStructSize = Len(s) 'Любимый аргумент API-функций — длина передающейся в функцию структуры .flags = &H4 'Флаг, прячущий флажок "Только для чтения" .hInstance = 0 'Ресурс диалога — чаще всего отсутствует .hwndOwner = Me.hWnd 'Handle формы-владельца. 0 — без владельца .lpstrDefExt = "Исполнимые файлы" + Chr(0) + "*.exe" + Chr(0) + Chr(0) 'Расширения .lpstrFilter = "Исполнимые файлы" + Chr(0) + "*.exe" + Chr(0) + Chr(0) .lpstrFile = "" 'Имя файла по умолчанию .lpstrFileTitle = "" .lpstrInitialDir = "c:\" 'Каталог, с которого начинается обзор .lpstrTitle = "Открыть файл" 'Заголовок диалогового окна 'Далее — простор для экспериментов .lpTemplateName = "" .nFileExtension = 0 .nFileOffset = 0 .nFilterIndex = 0 .nMaxCustFilter = 40 .nMaxFile = 255 .nMaxFileTitle = 255 .lCustData = 0 .lpfnHook = 0 .lpstrCustomFilter = "" End With GetOpenFileName s 'Вызов диалога открытия файла If s.lpstrFile <> "" Then intFreeFileHandle = FreeFile Open s.lpstrFile For Input As intFreeFileHandle 'Ваши операции с открытым файлом Close intFreeFileHandle End If End Sub
ToolBar
Неплохой control для создания панели инструментов входит в состав Microsoft Windows Common Controls 6.0. Он так и называется —Toolbar. Но размер файла mscomctl.ocx — 1 062 704 байт, поэтому предпочтительно создавать toolbar с помощью CommandButton.
Существуют, насколько мне известно, API-функции для создания toolbar, но хорошего я о них сказать ничего не могу, поскольку такой способ создания крайне трудоемок и едва ли себя оправдывает в Visual Basic.
О том, как создать «подставку» для кнопок, будет рассказано в разделе «О рельефных control’ах Delphi». Если вы не в курсе, где VB прячет картинки для toolbar’а, загляните в папку C:\Program Files\Microsoft Visual Studio\Сommon\Graphics\Bitmaps\OffCtlBr\Small\Color. Во всяком случае, в VB 6.0 Enterprise Edition и Professional Edition они лежат именно там. Но вы могли их и не установить: по умолчанию флажок «Графика» в инсталляторе отключен. Впрочем, графика нужна далеко не вся: почти никогда не используются файлы из папок Video и Cursors. Вообще же, желательно ограбить винт какой-нибудь программой типа Restorator (увы, Restorator не работает под XP) на предмет иконок, картинок и курсоров. Такой запас весит не так уж и много, а нужен регулярно.
Примечание: как это ни удивительно, но у многих начинающих VB-программистов возникают вопросы по поводу размещения картинки на кнопке. Для этого необходимо установить свойство Style=Graphical, Picture=нужная картинка и, если вам нужно, чтобы какой-то цвет был прозрачным, UseMaskColor=True; MaskColor=нужный цвет.
(Продолжение следует)



