LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)




































Выпуск 40. Графический интерфейс

Подписка: "Access 2000 - программирование и готовые решения"
Дата:         27.12.2002
Сайт:         http://www.leadersoft.ru
Почта:      
  Введение
   В этом выпуске рассказывается о графическом интерфейсе для баз данных. Несколько примеров помогут Вам грамотно оформить интерфейс. После изучения, Вы сможете изменить фон окна приложения Access, узнать код любой иконки офисного приложения, построить панель управления, используя собственные рисунки, и изменить иконку формы. Пример в открытом формате можно взять по ссылке malnik_GraphicInterface.zip Автор: Малютин Николай

Вопрос 2528:  Серый фон окна  Access
Тема:      HI. Хочу поблагодарить за учебный материал на сайте Leadersoft.ru , он помог мне в написании дипломного проекта. Хотелось бы получить ответ: Как можно изменить серый фон окна Access в программе?
Ссылка: http://www.leadersoft.ru/rusboard/data/2588.htm
Ответ. Малютин Николай
  На форуме вновь возникли вопросы по картинкам в Access. Думаю, что приведенный пример поможет решить многие такие вопросы. Одно из самых частых претензий к Access - это претензии к интерфейсу, точнее к внешнему виду. Желание "разукрасить" приложение часто решается за счет того, что главное окно Access скрывается. При этом теряется возможность использовать свои строку меню и панели инструментов - для этого делают различные имитации ToolBar. В общем решение одной проблемы порождает кучу других.Между тем Access использует весьма мощное средство - VBA, немного уступающий "классическому" VB

Итак, с самого начала.

При запуске базы данных появляется заставка Access. Между тем, достаточно в каталог с базой поместить собственный рисунок с именем ИмяБазыДанных.bmp. и тогда при старте будет сначала появляться Ваш рисунок. Или больше - поместить "нулевой" рисунок. Создать такой рисунок очень просто:

 

Public Sub NullBMP(AppFullName As String)
Dim strName As String
Dim bytPic(65) As Byte
Dim i As Long
    strName = Left(AppFullName, Len(AppFullName) - 3)
    strName = strName & "bmp"
    If Len(Dir(strName)) = 0 Then
        bytPic(0) = &H42: bytPic(1) = &H4D: bytPic(14) = &H28
        i = FreeFile()
        Open strName For Binary As #i
        Put #i, , bytPic()
        Close #i
    End If
End Sub
'пример не требует комментариев
 
Следующая претензия - серое окно.

Между тем это серое окно - обычное окно windows, и также как и другие окна принимает и обрабатывает системные сообщения, в том числе и WM_PAINT, по получении которого окно подновляет свой вид. Если перехватить сообщение WM_PAINT, посланное "серому" окну, что в это время можно нарисовать свою картинку - и она будет "как родная". Самый большой подводный камень при реализации  - то, что VBA работает медленнее, чем программа *.exe, а поток сообщений к окну весьма велик. Если попытаться запустить приведенный пример в "пошаговом" режиме, то дождаться каких либо изменений будет очень проблематично. Более того, если перед запуском Вы работали в редакторе VBA, то работа примера очень сильно замедляется (очень сильно) Поэтому данный метод лучше всего использовать, когда код перерисовки окна расположен в файле *.mde. Кроме того замечено, что в среде Win98 - Access2000 программа не всегда работает устойчиво (связано с проблемами Win98)

Перейдем к кнопкам меню и панелей инструментов.

Хотя кнопки и позволяют использовать рисунки, но только встроенные, посредством указания номера рисунка (FaceId). Учитывая, что в Office существует НЕ ОДНА ТЫСЯЧА рисунков, конечно можно подобрать нужный, но при таком количестве это весьма затруднительно (да и далеко не все отображаются самим Access) . Для этого можно использовать проводник по рисункам: 
Создаем временную панель инструментов и располагаем на ней 100 кнопок + 2 для навигации. Каждой кнопке присваиваем FaceId=1...100, 101...200, и т.д. Теперь выбрать нужный рисунок гораздо легче. Но если все же хочется именно свои рисунки, то здесь можно использовать возможность вставки рисунка на кнопку из буфера обмена. Задача - поместить в буфер обмена собственный рисунок. Рисунки можно хранить в таблице базы в двоичном виде, либо использовать прямо с диска. В примере рисунки через временный файл загружаются в ImageList, откуда и используются по необходимости.

Формы- у всех форм одинаковые иконки.

Ну, после всего, что уже сделали, это особого труда не составит. Возьмем иконку (ImageList или файл) и, используя средства системы, присвоим эту иконку нужному окну.

Пример можно загрузить по ссылке: 

Код 2889:  Предложение сотрудничества
Ссылка: http://www.leadersoft.ru/rusboard/data/2889.htm
 Имеется рабочая база в Access 97 .mde нужно создать аналогичную mdb.
т. 937-5523 ext.119
Unistaff Personnel Services
Александр.