Турбо Паскаль 6.0


Есть ли кто-нибудь?


Конкретный пример. В IDE Turbo Pascal, если пользователь запрашивает открыть окно просмотра, код, который открывает окно просмотра, должен проверить не открыто ли уже окно просмотра. Если нет, он открывает его; если есть, переносит наверх. Передача общего сообщения проста:

AreYouThere := Message(DeskTop, evBroadcast, cmFindWindow, nil);

В методе HandleEvent окна просмотра есть проверка на отклик (очистка события) на команду cmFindWindow:

case Event.Command of . cmFindWindow: ClearEvent(Event); . end;

Вспомним, что ClearEvent не только устанавливает поле What записи события в evNothing, но так же устанавливает поле InfoPtr в @Self. Message читает эти поля и, если событие было обработано, возвращает указатель на объект, обработавший событие-сообщение. В данном случае это окно просмотра. Так за строкой, которая посылала сообщение, мы включим:

if AreYouThere = nil then CreateWatchWindow else AreYouThere^.Select;

Поскольку окно просмотра - это единственный объект, который знает как отвечать на общее сообщение cmFindWindow, Ваш код может быть уверен, что когда он выполнится, будет одно и только одно окно просмотра на вершине всех видимых элементов на панели экрана.




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



Книжный магазин