![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TaskBar [D5, Win95/98, WinME, NT4, Win2k, WinXP]
Yurko © (2002-07-10 04:03:00)Как 100%спрятать свою прогу из TaskBar?
(без мигания при minimize и restore)
Юрий Зотов (2002-07-14 14:31:00) [1]О, боже...
Почти неделю человек мучается. Над чем?
Да не нужны Вам никакие стили, все гораздо проще. Нужно всего лишь обработать WM_SYSCOMMAND и при минимизации в трей загнать иконку, а Application.MainForm сделать невидимой - именно так, как я и написал. А при восстановлении из трея, соответственно, наоборот - только еще надо вызвать ShowWindow, чтобы скрыть кнопку приложения на панели задач, раз уж так этого хочется.
Вот и все. И все так делают, это стандартный интерфейс трей-приложений. Короче, вот полный код. Программа стартует сразу в трее, показывается из него двойным щелчком по иконке, а при минимизации снова прячется в трей. На панели задач не видна.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Forms, ShellAPI, Menus;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FIconData: TNotifyIconData;
protected
procedure WndProc(var Message: TMessage); override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
const
UM_TRAY = WM_USER + 1;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
with FIconData do
begin
cbSize := SizeOf(FIconData);
Wnd := Handle;
uID := 100;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallbackMessage := UM_TRAY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title)
end;
Application.ShowMainForm := False;
Shell_NotifyIcon(NIM_ADD, @FIconData)
end;
procedure TForm1.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_SYSCOMMAND:
if TWMSysCommand(Message).CmdType and $FFF0 = SC_MINIMIZE then
begin
Shell_NotifyIcon(NIM_ADD, @FIconData);
Application.MainForm.Visible := False
end
else inherited;
UM_TRAY:
if Message.LParam = WM_LBUTTONDBLCLK then
begin
Application.MainForm.Visible := True;
ShowWindow(Application.Handle, SW_HIDE);
Shell_NotifyIcon(NIM_DELETE, @FIconData)
end;
else inherited
end
end;
end.
Anatoly Podgoretsky (2002-07-14 13:15:00) [2]Тебе говорят зачем минимизируешь, на самом деле нет же никакой минимизации, ты же просто прячешь форму!
TTCustomDelphiMaster (2002-07-14 12:48:00) [3]
> Yurko © (14.07.02 12:13)
> Какую кнопку???
кнопку минимизации
в object inspector в свойстве формы bordericons biMinimize = false
Yurko (2002-07-14 12:13:00) [4]Какую кнопку???
TTCustomDelphiMaster (2002-07-14 11:46:00) [5]Убери вообще эту кнопку. Зачем она нужна в твоем приложении?
Yurko (2002-07-14 04:22:00) [6]
> Anatoly Podgoretsky
Если делать так, как Вы предложили, то окно сворачивается (при минимизации) в иконку над кнопкой "Пуск" (как в MDI-приложении).
Как можно этого избежать?
Юрий Зотов (2002-07-14 03:12:00) [7]> где можно почитать о всех стилях окна
В справке API - см. CreateWindow и CreateWindowEx
Yurko (2002-07-14 02:22:00) [8]Спасибо огромное, Анатолий!!!
Может Вы знаете где можно почитать о всех стилях окна (XXXWindowLong)? Дайте, пожалуйста, пару ссылок (или пару примеров <yurko@home.te.ua>).
Anatoly Podgoretsky (2002-07-13 12:47:00) [9]
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE)
or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
Yurko (2002-07-13 12:08:00) [10]При минимизации я вывожу иконку в tray, из нее я и буду restor"ить приложение!
TTCustomDelphiMaster (2002-07-13 10:02:00) [11]
> Yurko (13.07.02 01:22)
> ... да так, чтоб она не появлялась даже на время минимизации!
А как ты потом будеш restor"ить приложение?
Yurko (2002-07-13 01:22:00) [12]Спасибо, Юрий, но так прячется и форма и кнопка, а мне нужно скрыть только кнопку, да так, чтоб она не появлялась даже на время минимизации!
Юрий Зотов (2002-07-11 00:50:00) [13]В обработчике OnCreate главной формы (или в самом dpr перед Application.Run) пишем одну строку:
Application.ShowMainForm := False;
Yurko (2002-07-11 00:42:00) [14]
Form.Hideспрячет форму, а не кнопку в TaskBar!
IlyaA (2002-07-10 09:38:00) [15]Можно просто
Form.Hide
TTCustomDelphiMaster (2002-07-10 08:36:00) [16]Попробуй так
procedure TForm1.ApplicationEvents1Activate(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;