Система программирования 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(...));

и вновь запустите программу: теперь нажатие на любую кнопку диалогового окна приведет к его закрытию.

 

Назад Начало Вперед