Access 2002

Изменение размеров окна


Удалив заголовок формы, нужно выполнить еще одно действие, без которого результат получится несколько неожиданным. Дело в том, что окно мы перерисовали, а экран — нет. Поэтому заголовок остался на экране там, где и был, хотя он и не является больше частью окна. Для удаления его с экрана проще всего сместить форму вверх, чтобы она его закрыла.

Программный код, выполняющий перемещение формы, использует три функции Windows API:

О GetWindowRect. Заполняет структуру RECT текущими координатами формы.

О GetSystemMetncs. Если передать ей константу SM_CYCAPTION, функция вернет установленную в Windows высоту строки заголовка окна.

О MoveWindow. Перемещает окно и меняет его размеры. (В Windows API есть и другие функции, изменяющие размер окна, но в данном случае удобнее всего вызвать эту, передав ей новые координаты.)

Этот код выполняет несколько вычислений: определяет высоту удаленной строки заголовка окна и уменьшает высоту формы на полученную величину. Подробности вы узнаете из следующего листинга. Задействованная в данной процедуре функция GetCoords вычисляет координаты формы, используя вызовы описанных функций Windows API.

Код, который выводит или удаляет системные кнопки, расположенные в строке заголовка окна, мало чем отличается от кода, который выводит или удаляет строку заголовка. Однако одно важное отличие в нем есть: когда вы удаляете системные кнопки, Access может не знать, что ей нужно перерисовать границы формы. Что же делать? Проще всего послать форме соответствующее сообщение. Функция Windows API SendMessage позволяет отправить сообщение любому окну, и, если передать ей дескриптор нашего окна и константу WM_NCPAINT, окно формы будет перерисовано.

Полный текст процедуры Property Let ShowSystemMenu приведен  7.26. Большая его часть уже вам знакома. Обратите  на вызов SendMessage в конце процедуры, служащий для перерисовки окна. (Попробуйте его закомментировать, и увидите, что получится!)

Комментарии закрыты