Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
1-1209238089
dimak
2008-04-26 23:28
2009.04.05
Пробел в начале имени файла...


3-1218631083
gentle
2008-08-13 16:38
2009.04.05
как отобразить в dbgrid результат выполнения ....


2-1234776233
Strate
2009-02-16 12:23
2009.04.05
Обмен данными между процессами.


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


2-1234372907
wq
2009-02-11 20:21
2009.04.05
Импорт процедур и функций





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский