Текущий архив: 2003.01.23;
Скачать: CL | DM;
Вниз
Запуск Application.Run несколько раз Найти похожие ветки
← →
YY (2003-01-11 23:14) [0]Здравствуйте, уважаемые Мастера.
Не подскажет ли кто-нибудь как можно реализовать простую конструкцию, в которой программа висела бы в system tray, при щелчке по иконке создавала главную форму, а при уничтожении главной формы, снова садилась бы в system tray?
Я пытаюсь это реализовать так:
program IconTest;
...
var
WayFlag:(wfDialog,wfAppExit,wfTray);
...
begin
Application.Initialize;
repeat
WayFlag:=wfTray;
...
Через API создаётся невидимое окно, и к нему привязывается в иконка в system tray
При щелчке по иконке WayFlag:=wfDialog;
...
repeat
Application.ProcessMessages;
until WayFlag<>wfTray;
...
Уничтожаются иконка и связанное с ней окно
...
if WayFlag=wfDialog then
begin
//Create Main Form
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
until WayFlag=wfAppExit;
end.
По щелчку форма создаётся, но уничтожаться не хочет. ПроцедураApplication.Run
, вызванная второй раз, уже не ждёт закрытия главной формы и заканчивается почти сразу после вызова (по-моему, после прихода первого сообщения главной форме).
ВOnClose
главной формы стоитAction:=caFree
;
Буду очень благодарен, если мне подскажут, что здесь можно сделать.
← →
Garrett (2003-01-11 23:32) [1]хм... по-моему, лучше так:
1. Запускается твоя прога. Создаётся невидимое главное окно и вешается иконка в трей.
2. По нажатию на иконкеделаешь главную форму видимой.
3. ловишь сообщения о закрытии формы.
4. по некому флагу определяешь, если приложение надо выгрузить вообще, то разрешаешь закрытие, иначе просто скрываешь форму.
5. если форма была скрыта - переход к пункту 2.
← →
TTCustomDelphiMaster (2003-01-11 23:44) [2]http://www.delphikingdom.com/helloworld/samples_win.htm
← →
YY (2003-01-12 21:25) [3]Конечно, можно просто скрывать форму, как предлагает Garrett, но главная форма моей программы насыщена разными картинками и контролями и занимает некоторое количество ресурсов. Если её просто скрывать, она будет занимать столько же места в памяти, сколько и не скрытая (по наблюдением в Task Manager в Win2000).
Хотелось бы именно создавать и уничтожать форму по запросу.
> http://www.delphikingdom.com/helloworld/samples_win.htm
На приведённой странице я не смог найти пути к решению своей проблемы. Там есть примеры как сажать иконку в system tray и показывать Splash-окно.
Один раз показать окно не сложно, однако у меня не получается создавать работающее окно каждый раз при нажатии на иконку в трее.
← →
TTCustomDelphiMaster (2003-01-12 21:54) [4]Тогда сделай маленькую и невидимую главноую форму. И сможешь спокойно убивать свою насыщеную разными картинками и контролями вторую форму.
← →
Юрий Зотов (2003-01-12 22:04) [5]> YY
Sorry, но Вы не совсем понимаете, что такое трей-программа и как она работает.
Когда программа сажает иконку в трей, она должна заполнить структуру TNotifyIconData. В частности, в поле Wnd записывается хэндл окна, которое будет получать сообщение "от иконки" (на самом деле - от оболочки системы, конечно), а в поле uCallbackMessage - само сообщение.
При перемещении мыши над иконкой или при щелчках по ней оболочка системы посылает указанному окну указанное сообщение, а в его параметрах передает информацию о том, что именно произошло. Все остальное должно сделать уже само окно.
Поэтому иконка в трее просто не может существовать без окна, поддерживающего ее работу. Окно это обычно делают скрытым, но существовать оно обязано. Таким образом, у Вас ну никак не получится динамически создавать и уничтожать главную форму программы при каких-то манипуляциях юзера с иконкой. У Вас просто не будет окна, которое узнало бы о действиях юзера и смогло что-то сделать.
Поэтому расстаньтесь с этой идеей сразу. Сделайте главную форму пустой, спрячьте ее и пусть она работает с иконкой (все как в примере по ссылке). А вот ту форму, которая сейчас у Вас главная, сделайте неглавной. Тогда Вы сможете создавать и уничтожать ее каждый раз, когда это будет нужно.
Страницы: 1 вся ветка
Текущий архив: 2003.01.23;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.009 c