Форум: "Начинающим";
Текущий архив: 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