Главная страница
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.012 c
14-72488
Anatoly Podgoretsky
2003-01-06 07:38
2003.01.23
Именинники 6 января


14-72501
Шоломицкий
2003-01-06 14:59
2003.01.23
Кто-нить пробовал программу DESKBUTTONS?


4-72580
alex134
2002-12-08 00:31
2003.01.23
Нажать на клавишу


1-72199
Олег
2003-01-14 11:12
2003.01.23
---|Ветка была без названия|---


1-72245
Makhanev A.S.
2003-01-14 17:35
2003.01.23
Трабл с виндой