Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скрыть кнопку на панели задач [D7, XP]


Страницы:   1 2

Alex_C ©   (2009-11-09 09:54:00) 

Делал как во многочисленных FAQ:


procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMinimize := AppMinimize;
 Application.OnRestore  := AppMinimize;
end;

procedure TForm1.AppMinimize(Sender: TObject);
begin
 ShowWindow(Application.Handle, SW_HIDE);
end;


Однако при минимизации и восстановлению все равно кнопка напанели задач на какие то доли секунды появляется , а потом исечезает. А как сделать чтоб она вообще там на появлялась?


Alex_C   (2009-11-10 13:06:00) [1]

Да, как и ожидалось есть нюансы, в результате которых многие примеры оказались неработоспособны. В английком форуме нашел ответ на сой вопрос. :)


sniknik   (2009-11-10 09:44:00) [2]

> Но такого примера нет в 90% FAQ, к сожалению....
кривой пример потому что, нафиг не нужен, большая часть кода тут попросту лишняя, заменяется выставлением у формы стиля bsSizeToolWin в дизайн тайм. заодно и неприятность с начальной отрисовкой формы уйдет.
хотя это конечно не реализует тягу начинающих к "волшебным" функциям.

> Может я чего нитак делаю
есть сомнения? сделай трассировку. почитай msdn по функциям, попытайся наконец понять как код(/система в целом) работает, а не дергать из разных фагов готовые куски ничего в них не понимая (если бы понимал претензия была бы не форме "не работает", а более целенаправленнее).

и кстати до кучи
> Там обязательно будет пункт: скрытие из панели задачь с советом  ShowWindow(Application.Handle, SW_HIDE); ...
это тоже работает! легко проверить, выполнив эту строчку например по кнопке. иконка Application-а скрывается с панели задач. (кстати почему всегда спрашивают как скрыть? почему не показывают? - SW_SHOW)


Alex_C   (2009-11-10 08:19:00) [3]


> antonn


Но такого примера нет в 90% FAQ, к сожалению....


> sniknik


Может я чего нитак делаю - не получает у меня приложение-приемник сообщения...


antonn   (2009-11-09 23:09:00) [4]


> Alex_C   (09.11.09 10:48) [11]

procedure TMainForm.FormCreate(Sender: TObject);
var ExtendedStyle:dword; w:hwnd;
begin
ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);
SetWindowLong(application.Handle, GWL_EXSTYLE,ExtendedStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
with Application do begin
  ShowWindow(Handle, SW_HIDE);
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
end;
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);

формы нет ни на таскбаре, ни по alt+tab


sniknik   (2009-11-09 21:24:00) [5]

> Вот пример который везде фигурирует. Не работает.
да чего у тебя все не работает то? вот именно этот пример работает!


Игорь Шевченко   (2009-11-09 20:30:00) [6]

факеры, блин, недоделанные


Alex_C   (2009-11-09 20:30:00) [7]

Для достоверности:
http://www.delphisources.ru/pages/faq/base/wm_cd_link.html
Вот пример который везде фигурирует. Не работает.


Alex_C   (2009-11-09 20:24:00) [8]


> {RASkov}


Да, да, да! Там я все это и нашел. Но! Надо ж знать эту ф-цию: SetWindowLong. А практически все начинающие ее не знают. А теперь прочти любой общедоступный фак по дельфи. Там обязательно будет пункт: скрытие из панели задачь с советом  ShowWindow(Application.Handle, SW_HIDE); ...

Кстати далее: сейчас пытаюсь организовать межпроцессорное взаимодействие по средством сообщений WM_COPYDATA - опять таже фигня: ни один фак не дает работающего примера! Такое впечатление, да это не впечатление, а так и есть, те кто пишет факи просто тупо переписывают друг у друга одно и тоже, совершенно этого не проверяя.
Кстати очень выручают западные faq - там инфы на порядок больше!


sniknik   (2009-11-09 11:21:00) [9]

> Делал так. Тоже не получается.
странно. специально проверил, новый проект, единственной форме ставим стиль wsMinimized в главном файле пишем Application.ShowMainForm := False; (после инициализации естественно)  - кнопки нет.


{RASkov}   (2009-11-09 10:58:00) [10]

> [11] Alex_C   (09.11.09 10:48)
> Странно что этого нет ни в обном FAQ - все это было сделано
> методом проб и ошибок.

http://yandex.ru/yandsearch?text=SetWindowLong(Application.Handle,%20GWL_EXSTYLE,%20WS_EX_TOOLWINDOW);&lr=225
:о)


Alex_C   (2009-11-09 10:48:00) [11]

В общем проблема была решена полностью.


 // Чтоб не было видно на панели задач
 SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
 Application.Initialize;
 // Чтобы скрыть главную форму при загрузке
 Application.ShowMainForm := False;
 Application.CreateForm(TCWForm, CWForm);
 Application.Run;


И далее при поступлении Messages очень просто
Form1.Show/Form1.Hide.

Странно что этого нет ни в обном FAQ - все это было сделано методом проб и ошибок.


Alex_C   (2009-11-09 10:38:00) [12]

На счет скрытина на панели задачь проблема решена:

SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);

перед Application.Initialize;


Alex_C   (2009-11-09 10:27:00) [13]


> В Виндоус нет резидентов, тоесть любая программа является
> резидентом.


Да это все понятно :)
Просто реализовать пока такую простую вещь как описано выше не получается... И еще вот с восстановлением видимости главной формы проблема...


Anatoly Podgoretsky   (2009-11-09 10:23:00) [14]

> Alex_C  (09.11.2009 10:11:03)  [3]

В Виндоус нет резидентов, тоесть любая программа является резидентом.


Alex_C   (2009-11-09 10:17:00) [15]


> вирус? подходит под описание.


:) Нет. Из списка процессов ее скрывать не надо.


Alex_C   (2009-11-09 10:16:00) [16]


> ShowMainForm:= false; и углавной формы в дизайн тайме выбрать
> wsMinimized.


Делал так. Тоже не получается.
Вообще в идеале вот что надо:
программа запустается и главная форма и кнопка на панели задач не показывается. Для возможности изменения параметров работы главная форма должна показываться, когда к программе обратятся про помощи PostMessage из другой программы.
Если ShowMainForm:= false; ставить как написано в FAQ перед

Application.Initialize;

То потом главная форма вообще не показывается даже при указании
ShowMainForm:= True;


sniknik   (2009-11-09 10:13:00) [17]

> Программа у меня типа "резидентная". Вызывается из другой программы.
вирус? подходит под описание.


sniknik   (2009-11-09 10:12:00) [18]

p.s. это не добавить, это вместо ...


Alex_C   (2009-11-09 10:11:00) [19]

Программа у меня типа "резидентная". Вызывается из другой программы.


sniknik   (2009-11-09 10:11:00) [20]

ShowMainForm:= false; и углавной формы в дизайн тайме выбрать wsMinimized.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо