TURBO PASCAL |
Новости
|
Обработка команд пользователя
Обработчик событий диалогового окна поддерживает только стандартные команды cmClose, cmOk, cmCancel. Как заставить его реагировать на команды пользователя? Вы правы: нужно перекрыть стандартный обработчик событий. Введем новый объект TDlgWin как потомок объекта TDialog и перекроем его метод HandleEvent: type PDlgWin =ATDlgWin; TDlgWin = object (TDialog) Procedure HandleEvent(var Event: TEvent); Virtual; end; В новом методе следует сначала вызвать стандартный обработчик, а затем проанализировать событие: если оно не очищено и содержит команду, значит была нажата какая-то командная кнопка, и нам следует заставить обработчик закрыть окно и вернуть эту команду как результат диалога с пользователем: Procedure TDlgWin.HandleEvent(var Event: TEvent); {Обработчик событий для основного диалогового окна} begin Inherited HandleEvent(Event); if Event.What = evCommand then EndModal(Event.Command) {Закрыть окно и вернуть команду} end; Метод EndModal используется для того, чтобы завершить работу с диалоговым окном и вернуть команду в программу, использующую это окно. Измените описание переменной D в функции Control на var ..... D: PDlgWin; и обращение к методу Init: D := New(PDlgWin, Init(...)); и вновь запустите программу: теперь нажатие на любую кнопку диалогового окна приведет к его закрытию.
|
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |