![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сворачивание вторичных форм приложения в трей [D7, XP]
SyS © (2009-02-12 08:10:00)Добрый день, как-то попадался уже вопрос по этой теме, но ничего не нашёл. Каким образом сделать так, чтоб при сворачивании какой-либо формы приложения, основная форма (и все открытые) сворачивались бы в один значок в трее? Т.е. как это принято в Windows, вся программа сворачивалась в один значок, а не каждая форма в отдельный.
Юрий Зотов (2009-02-12 12:55:00) [1]> SyS (12.02.09 09:52) [9]
> ну если всё-таки вы поняли, о чём я (о сворачивании всей
> программы при минимизации второстепенного окна)
Мы-то поняли. Не поняли, извините, Вы.
Еще раз:
Никакого сворачивания окон в трей НЕ СУЩЕСТВУЕТ. Это только внешняя видимость, не более того. На самом же деле "сворачиваемые" окна никуда не сворачиваются, а просто становятся невидимыми. Одновременно в трей помещается значок (поэтому и возникает иллюзия "сворачивания в трей"). При движении и при щелчках мышки над этим значком одному из окон приложения (тому, чей хэндл указан в структуре NOTIFYICONDATA) автоматически посылается соответствующее сообщение, которое это окно может обрабатывать любым способом (например, оно может показать всплывающее меню, сделать видимым одно или несколько окон программы и т.п.).
Поэтому процедура "свернуть в трей" для ОДНОГО окна выглядит всегда одинаково:
1. Заполнить структуру NOTIFYICONDATA.
2. Вызвать функцию Shell_NotifyIcon.
3. Скрыть окно. Для форм Delphi это делается вызовом метода Hide (и никакие CreateParams не нужны), а окно Application скрывается вызовом функции ShowWindow.
Отсюда вытекает ответ на Ваш вопрос - как "свернуть в трей" ВСЕ окна программы: точно так же, как и ОДНО окно, только в п.3 невидимыми надо сделать ВСЕ формы программы, включая и окно Application.
> то дайте наконец-таки ответ...
Он был Вам дан уже неоднократно, я просто попытался его разъяснить. Прочитайте ответы внимательнои постарайтесь их понять. Дополнительную информацию можно найти в справке WinAPI по упомянутым выше функциям, а в Сети полно примеров на эту тему.
@!!ex (2009-02-12 11:04:00) [2]У всех дочерних окон ловишь событий минимизации.
Н аэто событий вызываешь Minimize главной формы, Скрытие кнопочки с таск бара и зауздыривание иконки туда где часики. и все.
Сергей М. (2009-02-12 10:03:00) [3]
> при минимизации второстепенного окна
Так все же при минимизации или при скрытии ?
SyS (2009-02-12 09:52:00) [4]ну если всё-таки вы поняли, о чём я (о сворачивании всей программы при минимизации второстепенного окна), то дайте наконец-таки ответ...
Anatoly Podgoretsky (2009-02-12 09:44:00) [5]Вообще то не подозревая, он ведет речь, про "запуздыривание иконки в трей", туда где часики.
Сергей М. (2009-02-12 09:41:00) [6]Ты путаешь "минимизацию" и "скрытие"
"Скрытие" означает переход виз.объекта в состояние invisible (или hidden, если угодно)
"Минимизация" означает переход окна формы в состояние iconic
SyS (2009-02-12 09:28:00) [7]>Сергей М. © (12.02.09 09:10) [4]
но чтобы дойти до главной формы, пользователю надо закрыть открытую второстепенную. А в том-то и дело, что надо, чтобы пользователь (как это все делают) нажал на кнопку минимизации открытой второстепенной формы и при этом скрылась бы вся программа(т.е. и главная форма)
Сергей М. (2009-02-12 09:12:00) [8]
> использую эту процедуру ..она скрывает .. форму
Ничего она не скрывает, не выдумывай.
Форму видишь ? Видишь. Ну и как же она скрыта, если ты ее видишь ?
Сергей М. (2009-02-12 09:10:00) [9]А в чем проблема-то ?
Назначь, к примеру, главную форму ответственной за "запуздыривание иконки в трей".
Любая форма, которую юзер закрывает, отдает тем или иным образом всем прочим видимым формам команду на закрытие, получив команду главная форма перед тем как исчезнуть со стола выполняет "запуздыривание".
SyS (2009-02-12 09:06:00) [10]Я использую эту процедуру. Но она скрывает только одну форму. А как при этом скрыть все открытые формы, причём в один значок?
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := GetDesktopWindow;
end;
SyS (2009-02-12 09:01:00) [11]>Сергей М. © (12.02.09 08:28) [1]
Совершенно верно. Никто и не против. Ответ на вопрос можно?
Сергей М. (2009-02-12 08:28:00) [12]Ни форма ни программа не могут быть "свернуты в трей".
Форма может быть скрыта. При этом программа рисует значок в трее, что создает иллюзию"сворачивания"