Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.008 c
2-1233835341
asddsa
2009-02-05 15:02
2009.04.05
Доступ к расшаренным ресурсам


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


3-1217827688
Xmen
2008-08-04 09:28
2009.04.05
Соединение с FireBird


15-1233588085
Кто б сомневался
2009-02-02 18:21
2009.04.05
Нарисовать коробку к ПО


15-1233787788
Германн
2009-02-05 01:49
2009.04.05
Телефон, телефонный кабель и RJ разъём




   Наверх