| Использование оформления Windows в приложениях Access |
|
Использование оформления Windows в приложениях Access В свойствах экрана на вкладке "Оформление" пользователь может выбрать различные цветовые схемы для придания Windows приятной цветовой гаммы, отличающейся от набившей оскоминой стандартной. Продвинутые пользователи могут и создавать собственные цветовые гаммы в дополнение к многочисленным имеющимся или изменять некоторые элементы по своему вкусу... Вот и я, экспериментируя с навязыванием собственных цветовых оформлений пользователям моих программ, пришел к выводу, что лучше всего будет дать возможность пользователю самому выбирать гамму или изменять оформление программы по своему вкусу, на который, как говорится, не угодишь. Тем более, что в Windows это делается очень просто (свойства экрана - вкладка [Оформление]), и также легко можно вернуться к стандартным схемам, если что-нибудь пошло не так в "раскраске".
Именно поддержке Вашим приложением Access предпочитаемого оформления Windows и предназначена эта статья. Еще специально для Вас поделюсь простым секретом, как использовать в формах и кнопках приложения картинки с прозрачным фоном (независимо от смены оформления Windows фон всегда будет оставаться прозрачным), раз уж мы тут говорим об оформлении.
Все сказанное выше справедливо для "классических" версий Windows, т.е. систем, где используется классическое оформление - в это число не входит Windows XP с включенными темами (которые лично я считаю немного легкомысленными). Если хотите и под XP получать описываемый эффект оформления - переключитесь в классический режим. (сам никак на XP не могу перейти - все коплю деньги на лицензионную систему ;)
В Windows имеются предопределенные цвета, которые цветами на самом деле не являются ;), а являются константами, описывающими определенные элементы схем оформления (константы системных цветов - System Color Constants). Чтобы было понятно, о чем речь, рассмотрим сразу таблицу констант:
Идентификатор Описание цвета (в скобках внутренние константы Access) (я использую как цвет фона форм и цвет фона надписей, чтобы оставались "прозрачными")
(можно использовать для задания цвета фона текстовых полей)
(я использую этот цвет текста в надписях)
(можно использовать для управления цветом текста текстовых полей в контрасте с -2147483643)
(можно использовать также как цвет фона форм)
(цвет текста кнопок, меню, вкладок, кнопок управления окном, строки состояния)
(можно использовать для цвета фона текстовых полей вместо -2147483643)
Всю эту таблицу использовать не просто, а очень просто: открываем свойства элемента управления, например, элемента [Поле], и в свойства [Цвет фона] вписываем -2147483643, а в свойство [Цвет текста] -2147483640. И все! теперь юзер может выбирать любые схемы оформления - наше поле будет всегда следовать цветовой гамме выбранного оформления и будет всегда хорошо читаемо. Точно также можно подобрать цвет границы поля, например, хорошо смотрится -2147483646. В общем, тут надо экспериментировать не с самими цветами, а с константами, грамотно подбирая цветовую гамму, которая при любом оформлении будет смотреться гармонично. Точно также можно задавать цвета абсолютно для любых элементов формы, включая и саму форму (точнее, области формы).
Ну а что же это за константы такие в скобочках? Это тоже необходимые константы, но уже для управления из программного кода. Иногда нужно изменять цвета элементов "на ходу", вот тут и встроенные константы Access и приходят на помощь: Me.txtПоле.ForeColor = vbWindowText ' системный цвет текста окон Windows me.txtПоле.BackColor = vbWindowBackground ' системный цвет фона окон Windows
------------------- Теперь о картинках с прозрачным фоном. Действительно, такие кнопки и рисунки на форме смотрятся красиво и профессионально. Для достижения такого эффекта необходимо использовать иконки - т.е. файлы в расширением .ICO, в которых используется прозрачный фон. Иконки для последующего использования в Access я подготавливаю в замечательной (и бесплатной программе) AWicons http://www.awicons.com. При импорте Access внедряет иконку, заменяя прозрачный фон на текущий фон кнопки или формы (если иконку внедряем в элемент Рисунок). Вы не думайте, что иконки, это такие маленькие квадратики, на которых ничего не понятно ;). Размер иконок ограничен лишь возможностями редактора. Обычно я использую иконки размером 32х32 пикселя для кнопок и до 128х128 пикселей для оформления форм. Но проблема в том, что Access при импорте любых форматов картинок превращает их в формат DIB для внутреннего хранения.
DIB (Device-Independent Bitmap) - структура DIB. Структура данных для Windows bitmap (растрового представления в видеопамяти выводимых на экран объектов), содержащая заголовки полей, дополнительную таблицу цветов (palette) и данные. В зависимости от числа цветов, используемых в данной битовой карте, ее точки могут быть представлены соответственно 1, 4, 8 или 24 битами с таблицей цветов или без неё (именно поэтому Access противится внедрению 32-битных иконок)
Есть пара путей, как обойти проблему прозрачного фона при смене оформления. Первый - самый очевидный - использовать не внедренные рисунки, а связанные (в свойствах кнопки Тип рисунка = связанный). При открытии формы Access подгрузит иконку и соответственно, заменит прозрачный цвет иконки на текущий цвет фона. При изменении оформления пользователем изменений цвета фона картинки в реальном времени не произойдет, но, заново открыв форму, можно заставить Access заново подгрузить иконку и прозрачный цвет иконки заменится на текущий цвет фона формы или кнопки. С изменением в реальном времени можно и смириться, но то, что для указания иконки используется абсолютный путь - это никуда не годится. Надеюсь, Вы разрабатываете приложения не только под себя, по планируете их еще и распространить на компьютеры благодарных пользователей? Вот тут-то и будут проблемы с абсолютными путями к этим иконкам, если пользователь установит приложение не в то место, на какое Вы рассчитывали при разработке.
Поэтому я пошел по второму пути: загрузку иконок во время выполнения программы кода при наступлении события Resize у формы. Событие Resize наступает не только во время изменения размеров формы, но и во время открытия формы и интересно! после смены оформления Windows - то, что нам и надо. Благодаря этому событию мы можем перегружать иконки в реальном времени, сразу, как только пользователь сменит оформление Windows. Код для этого очень простой:
Private Sub Form_Resize() Поясню код: в папке приложения есть подпапка AddOns (для хранения всякой всячины), а в этой подпапке есть папка Icons. Вот в ней-то и хранятся все иконки, используемые для оформления приложения. Путь к этим иконкам вычисляется относительно текущего пути работающего приложения, следовательно, куда бы пользователь ни установил приложение (со всей иерархией каталогов, конечно) все будет работать безошибочно. По этому принципу в приведенном примере на кнопки "одеваются" заранее подготовленные картинки, сохраненные в формате .ICO.
Дополнения: формат DIB (как и BMP) очень неэкономичный формат и размер базы может быть неоправданно велик, особенно если у Вас используется много картинок. Поэтому перед распространением приложения для уменьшения размера "почистите" формы - оставьте "голые" кнопки (с подписями) и пустые рамки рисунков - картинки подгрузятся динамически.
Еще при смене оформления изменяются размеры элементов форм, если пользователь выбирает, например, схемы "Розовая", крупные или огромные. Помните об этом при проектировании форм - если форма нарисована "впритык" на всю доступную рабочую область, то при изменении оформления на более крупную увеличатся размеры заголовков (полос прокрутки и т.п.) и форма "вылезет" за пределы экрана. Мало то, что вылезет, заботливо появившиеся полосы прокрутки испортят весь вид Вашего приложения.
Мои мысли, мои скакуны
Автор: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript Источник: http://www.vbnet.ru/ |