Панель задач. Пуск
Начнём с общего. Как скрыть и показать Панель задач:
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;
здорово. спасибо.
На win 7 Пуск не скрывается!!! 🙁
Это да, когда писалась статья, Windows Vista еще только разрабатывалась, а вы про Windows 7 😉 Увы у меня она не установлена, поэтому пока не смогу ничего сказать 🙁