Показать сообщение отдельно

  #4  
Старый 14.05.2010, 23:48
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

в uses добавляешь shellapi.
затем
const
WM_MYICONNOTIFY = WM_USER + 1;

Далее в private формы пропиши
procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
procedure CreateTrayIcon();
procedure DeleteTrayIcon();

При условии что форма - Form1
Контекстное меню - PopupMenu1
то вот код:
Код:
procedure TForm1.WMICON(var msg: TMessage);
var
  P: TPoint;
begin
  if msg.LParam = WM_RBUTTONDOWN then
  begin
    GetCursorPos(p);
    SetForegroundWindow(Application.MainForm.Handle);
    PopupMenu1.Popup(P.X, P.Y);
  end;
end;

// нужно выполнить чтобы добавить иконку
procedure TForm1.CreateTrayIcon(); 
var
  nidata: TNotifyIconData;
begin
  with nidata do
  begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd := Self.Handle;
    uID := 1;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallBackMessage := WM_MYICONNOTIFY;
    hIcon := Application.Icon.Handle;
    StrPCopy(szTip, Application.Title);
  end;
  Shell_NotifyIcon(NIM_ADD, @nidata);
end;

// нужно выполнить чтобы удалить иконку
procedure TForm1.DeleteTrayIcon();
var
  nidata: TNotifyIconData;
begin
  with nidata do
  begin
    cbSize := SizeOf(TNotifyIconData);
    Wnd := Self.Handle;
    uID := 1;
  end;
  Shell_NotifyIcon(NIM_DELETE, @nidata);
end;

Если же нужно программно эмулировать ввод то найди хендлы иконки. Затем посылай сообщения онклик ему. или эмуляцию ввода мышью.
 
Ответить с цитированием