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

Вниз

Скрыть кнопку на панели задач   Найти похожие ветки 

 
Alex_C   (2009-11-09 09:54) [0]

Делал как во многочисленных 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;


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


 
kyn66 ©   (2009-11-09 09:58) [1]

А как ты будешь восстанавливать приложение, если и на панели задач кнопки не будет и иконки в трэе?


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

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


 
Alex_C   (2009-11-09 10:11) [3]

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


 
sniknik ©   (2009-11-09 10:12) [4]

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


 
sniknik ©   (2009-11-09 10:13) [5]

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


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


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


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

Application.Initialize;

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


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


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


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


 
Anatoly Podgoretsky ©   (2009-11-09 10:23) [8]

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

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


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


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


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


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

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

SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);

перед Application.Initialize;


 
Alex_C   (2009-11-09 10:48) [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 - все это было сделано методом проб и ошибок.


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

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

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


 
sniknik ©   (2009-11-09 11:21) [13]

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


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


> {RASkov}


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

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


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

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


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

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


 
sniknik ©   (2009-11-09 21:24) [17]

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


 
antonn ©   (2009-11-09 23:09) [18]


> 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


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


> antonn


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


> sniknik


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


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

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

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

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


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

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



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

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

Наверх




Память: 0.52 MB
Время: 0.011 c
15-1256615376
d@nger
2009-10-27 06:49
2009.12.27
Cisco и модем


2-1257749650
Alex_C
2009-11-09 09:54
2009.12.27
Скрыть кнопку на панели задач


15-1256645623
Rule
2009-10-27 15:13
2009.12.27
Как узнать таблицу разделов на дисках и вообще как это работает


2-1257858648
Тимофей123
2009-11-10 16:10
2009.12.27
smoothresize


15-1256765411
Юрий
2009-10-29 00:30
2009.12.27
С днем рождения ! 29 октября 2009 четверг