Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.05;
Скачать: CL | DM;

Вниз

Сворачивание вторичных форм приложения в трей   Найти похожие ветки 

 
SyS   (2009-02-12 08:10) [0]

Добрый день, как-то попадался уже вопрос по этой теме, но ничего не нашёл. Каким образом сделать так, чтоб при сворачивании какой-либо формы приложения, основная форма (и все открытые) сворачивались бы в один значок в трее? Т.е. как это принято в Windows, вся программа сворачивалась в один значок, а не каждая форма в отдельный.


 
Сергей М. ©   (2009-02-12 08:28) [1]

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


 
SyS   (2009-02-12 09:01) [2]

>Сергей М. ©   (12.02.09 08:28) [1]
Совершенно верно. Никто и не против. Ответ на вопрос можно?


 
SyS   (2009-02-12 09:06) [3]

Я использую эту процедуру. Но она скрывает только одну форму. А как при этом скрыть все открытые формы, причём в один значок?

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;


 
Сергей М. ©   (2009-02-12 09:10) [4]

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


 
Сергей М. ©   (2009-02-12 09:12) [5]


> использую эту процедуру ..она скрывает .. форму


Ничего она не скрывает, не выдумывай.
Форму видишь ? Видишь. Ну и как же она скрыта, если ты ее видишь ?


 
SyS   (2009-02-12 09:28) [6]

>Сергей М. ©   (12.02.09 09:10) [4]
но чтобы дойти до главной формы, пользователю надо закрыть открытую второстепенную. А в том-то и дело, что надо,  чтобы пользователь (как это все делают) нажал на кнопку минимизации открытой второстепенной формы и при этом скрылась бы вся программа(т.е. и главная форма)


 
Сергей М. ©   (2009-02-12 09:41) [7]

Ты путаешь "минимизацию" и "скрытие"

"Скрытие" означает переход виз.объекта в состояние invisible (или hidden, если угодно)

"Минимизация" означает переход окна формы в состояние iconic


 
Anatoly Podgoretsky ©   (2009-02-12 09:44) [8]

Вообще то не подозревая, он ведет речь, про "запуздыривание иконки в трей", туда где часики.


 
SyS   (2009-02-12 09:52) [9]

ну если всё-таки вы поняли, о чём я (о сворачивании всей программы при минимизации второстепенного окна), то дайте наконец-таки ответ...


 
Сергей М. ©   (2009-02-12 10:03) [10]


> при минимизации второстепенного окна


Так все же при минимизации или при скрытии ?


 
@!!ex ©   (2009-02-12 11:04) [11]

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


 
Юрий Зотов ©   (2009-02-12 12:55) [12]

> SyS   (12.02.09 09:52) [9]

> ну если всё-таки вы поняли, о чём я (о сворачивании всей
> программы при минимизации второстепенного окна)

Мы-то поняли. Не поняли, извините, Вы.

Еще раз:

Никакого сворачивания окон в трей НЕ СУЩЕСТВУЕТ. Это только внешняя видимость, не более того. На самом же деле "сворачиваемые" окна никуда не сворачиваются, а просто становятся невидимыми. Одновременно в трей помещается значок (поэтому и возникает иллюзия "сворачивания в трей"). При движении и при щелчках мышки над этим значком одному из окон приложения (тому, чей хэндл указан в структуре NOTIFYICONDATA) автоматически посылается соответствующее сообщение, которое это окно может обрабатывать любым способом (например, оно может показать всплывающее меню, сделать видимым одно или несколько окон программы и т.п.).

Поэтому процедура "свернуть в трей" для ОДНОГО окна выглядит всегда одинаково:

1. Заполнить структуру NOTIFYICONDATA.
2. Вызвать функцию Shell_NotifyIcon.
3. Скрыть окно. Для форм Delphi это делается вызовом метода Hide (и никакие CreateParams не нужны), а окно Application скрывается вызовом функции ShowWindow.

Отсюда вытекает ответ на Ваш вопрос - как "свернуть в трей" ВСЕ окна программы: точно так же, как и ОДНО окно, только в п.3 невидимыми надо сделать ВСЕ формы программы, включая и окно Application.

> то дайте наконец-таки ответ...

Он был Вам дан уже неоднократно, я просто попытался его разъяснить. Прочитайте ответы внимательно и постарайтесь их понять. Дополнительную информацию можно найти в справке WinAPI по упомянутым выше функциям, а в Сети полно примеров на эту тему.



Страницы: 1 вся ветка

Текущий архив: 2009.04.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
1-1209133936
Kolan
2008-04-25 18:32
2009.04.05
В MDI приложение WindowState := wsMaximized; происходит долго&#133


2-1234501240
dark_volk
2009-02-13 08:00
2009.04.05
Копирование таблиц


15-1233890280
Городской Шаман
2009-02-06 06:18
2009.04.05
А кто-то ругал ЕГЭ.


15-1233893442
123-ий
2009-02-06 07:10
2009.04.05
TADOQuery.Recordset.Status


15-1234046172
Student
2009-02-08 01:36
2009.04.05
С чего начать? Или HellowWorld по серьёзному