Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.016 c
1-72232
W0land
2003-01-14 14:31
2003.01.23
WinXP+Delphi5 - проблема с отладчиком


1-72205
Magic
2003-01-09 11:50
2003.01.23
Тултипы


3-72145
AlexeyL
2003-01-03 15:14
2003.01.23
Запуск базы данных MS Access из программы


7-72571
Grav
2002-11-06 21:48
2003.01.23
как заблокировать CD-ROM?


14-72486
Driverrr
2003-01-04 18:21
2003.01.23
Видео в exe...