Блог Александра Божко
Архивы
Рубрики
Реклама

Разминка для ума

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

Поэтому я задействовал TApplicationEvents и два события этого компонента – onModalBegin и onModalEnd. Абсолютно ничего сложного,

 

procedure TForm1.ApplicationEvents1ModalBegin(Sender: TObject);
begin
 flg:= True;
end;

procedure TForm1.ApplicationEvents1ModalEnd(Sender: TObject);
begin
 flg:= False;
end;

procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
if not flg then
ShowMessage('');
end;

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

Исходный код.

Год начался бодренько. Что называется, с корабля на бал. С одной стороны работы навалилось так, что было не до блога, с другой – работа же и подкидывает материалы для этого самого блога. Забегая немного вперед скажу, что планирую серию статей, посвященных DataSnap и Android клиентам для DataSnap. Кроме того, вполне вероятно, что получит развитие тема ER/Studio. Ну, а пока весь этот материал “в работе”, я проанонсирую новую рубрику.

Разминка для ума. Суть в следующем. В процессе разработки реальных приложений, я сталкиваюсь с различными, интересными, на мой взгляд, задачами. Эти задачи отнюдь не будут относиться к разряду “нерешаемых”, просто в большинстве случаев, они будут содержать какие-то интересные моменты, либо, это будут просто “типовые” задачи, которые надо уметь решать точно так же, как надо уметь ловить третью даму на руке противника.

Я предполагаю следующий формат рубрики. Вместе с условием задачи, я выкладываю готовое собственное решение задачи в виде исполняемого файла. Те, кому интересно размяться, либо пробуют самостоятельно реализовать подобное решение и присылают исходный код, либо излагают свои соображения в комментариях.

Первая задача довольно простая. Необходимо создать приложение с иконкой в систем трее. При нажатии на иконку должно выдаваться некоторое модальное сообщение. Особенность в том, что если программа уже сгенерировала сообщение и оно в данный момент активно, то повторно оно вызываться не должно.

Я реализовал это примерно так.

Задача имеет некоторые “подводные камни”, на которые я в свое время успешно напоролся. Собственно, предлагаю вам размяться и найти оптимально решение.

Реклама
Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика