Начнём с общего. Как скрыть и показать Панель задач:
procedure TForm1.Button1Click(Sender:
TObject);
begin
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_HIDE); //
Скрыть
end;
procedure TForm1.Button2Click(Sender:
TObject);
begin
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_SHOW); //
Показать
end;
Теперь сделаем иконку рядом с часами:
public
procedure IconCallBackMessage( var Mess :
TMessage ); message WM_USER+ 100;
end;
implementation
uses ShellAPI;
procedure TForm1.IconCallBackMessage( var Mess : TMessage
);
var
sEventLog : String;
begin
case Mess.lParam of
//
Сделайте здесь все что вы хотите. Например, вызов контекстного меню при нажатии
правой кнопки мыши.
WM_LBUTTONDBLCLK : sEventLog := 'Двойной щелчок левой
кнопкой';
WM_LBUTTONDOWN : sEventLog := 'Нажатие
левой кнопки мыши';
WM_LBUTTONUP :
sEventLog := 'Отжатие левой кнопки мыши';
WM_MBUTTONDBLCLK :
sEventLog := 'Двойной щелчок мышью';
WM_MBUTTONDOWN :
sEventLog := 'Нажатие кнопки
мыши';
WM_MBUTTONUP : sEventLog :=
'Отжатие кнопки мыши';
WM_MOUSEMOVE :
sEventLog := 'перемещение мыши';
WM_MOUSEWHEEL
: sEventLog := 'Вращение колесика мыши';
WM_RBUTTONDBLCLK :
sEventLog := 'Двойной щелчок правой
кнопкой';
WM_RBUTTONDOWN : sEventLog := 'Нажатие
правой кнопки мыши';
WM_RBUTTONUP :
sEventLog := 'Отжатие правой кнопки мыши';
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var nid :
TNotifyIconData;
begin
Load_Form.Visible:=false;
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd :=
Form1.Handle;
uID :=
1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER
+ 100;
hIcon := Application.Icon.Handle; // Иконка приложения 16 на 16
пикселей
szTip := 'Имя программы';
end;
Shell_NotifyIcon( NIM_ADD,
@nid );
end;
И при закрытии удаляем иконку.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
nid : TNotifyIconData;
begin
//это важно для того чтобы не удалить чужую
иконку J
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd
:= Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or
NIF_TIP;
uCallbackMessage := WM_USER + 100;
hIcon :=
Application.Icon.Handle; // Иконка приложения 16 на 16 пикселей
szTip :=
'Имя программы';
end;
Shell_NotifyIcon( NIM_DELETE, @nid );
end;
С иконкой мы расправились переходим у Пуску. Для начала работы надо открыть
Пуск с помощью этой функции:
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Self.Handle, WM_SYSCOMMAND, SC_TASKLIST, 0);
end;
Так же можно поменять активность Пуск’а:
procedure TForm1.Button1Click(Sender:
TObject);
begin
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd',
nil), 0, 'Button', nil), false);
// заблокировать
end;
procedure TForm1.Button2Click(Sender:
TObject);
begin
EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd',
nil), 0, 'Button', nil), true);
// разблокировать
end;