» Панель задач. Пуск Borland Delphi. windows. . Блог программистов


Блог программистов






20072 Мар

Панель задач. Пуск

Начнём с общего. Как скрыть и показать Панель задач:

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;

Комментарии

  1. trus
    25 апреля, 2009 | 00:16

    здорово. спасибо.

  2. Марсель
    26 января, 2010 | 21:21

    На win 7 Пуск не скрывается!!! 🙁

  3. 27 января, 2010 | 05:24

    Это да, когда писалась статья, Windows Vista еще только разрабатывалась, а вы про Windows 7 😉 Увы у меня она не установлена, поэтому пока не смогу ничего сказать 🙁