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

Вниз

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

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

Наверх





Память: 0.5 MB
Время: 0.006 c
2-1257514920
Дмитрий Белькевич
2009-11-06 16:42
2009.12.27
I/O error 23 при чтении файла


2-1257856549
Kolan
2009-11-10 15:35
2009.12.27
Самодельная отрисовка мигает


1-1231859045
Игорь_Залозных
2009-01-13 18:04
2009.12.27
DrawText и текст, который не вместился в прямоугольник


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


11-1209885307
SPeller
2008-05-04 11:15
2009.12.27
KOLTIFF.ImageAsBitmap экспортирует неправильный битмап





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский