Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: CL | DM;

Вниз

System Tray   Найти похожие ветки 

 
MaxxSoft ©   (2004-11-16 11:03) [0]

Как свернуть / восстановить приложение в System Tray?


 
zz 5 ©   (2004-11-16 11:10) [1]

Приложение не сворачивается в System Tray, туда добавляется иконка


 
MaxxSoft ©   (2004-11-16 11:24) [2]

Это я понимаю. Хорошо поставим вопрос так: как добавить иконку в Tray и ловить нажатие на нее?


 
Piter ©   (2004-11-16 11:25) [3]

Вопрос: Как поместить иконку приложения в System Tray?

Ответ: для работы с SysTray (область, где часики) в WinApi есть функция - Shell_NotifyIcon. С помощью нее можно добавлять свои иконки в SysTray, модифицировать их и удалять.

function Shell_NotifyIcon(dwMessage: DWORD; lpData: PNotifyIconData): BOOL; stdcall;

Ее заголовок, а также определение типов TNotifyIconData, PNotifyIconData находится в юните shellapi.pas, который надо подключить для использования данной функции:
code>uses
 ..., ShellAPI;

Пример вызова:
предполагается, что в программе где-то объявлена глобальная переменная NID: TNotifyIconData

procedure TForm1.Button1Click(Sender: TObject);
var
begin
 NID.uID :=0;
 NID.Wnd := Handle;
 NID.uCallbackMessage :=WM_USER;
 NID.hIcon := LoadIcon(HINSTANCE,"ICON1");
 NID.szTip := "Моя иконка";
 NID.uFlags :=NIF_ICON or NIF_MESSAGE or NIF_TIP;
 NID.cbSize :=sizeof(NID);
 Shell_NotifyIcon(NIM_ADD,@NID);
end;


Файл проекта с данным примером можно загрузить ЗДЕСЬ

Вы можете подробнее почитать по данномй теме ЗДЕСЬ (systray_ext.txt)

Отвечал: Piter


 
MaxxSoft ©   (2004-11-16 11:52) [4]

А можно ссылочки "ЗДЕСЬ" еще раз...


 
grom   (2004-11-16 20:18) [5]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Menus, ExtCtrls,ShellApi;

type
 TNotifyIconBalloon = record
  cbSize: DWORD;
  hWnd: HWND;
  uID: UINT;
  uFlags: UINT;
  uCallbackMessage: UINT;
  hIcon: HICON;
  szTip: array[0..127] of AnsiChar;
  dwState: DWORD;
  dwStateMask: DWORD;
  szInfo: array[0..255] of AnsiChar;
  uTimeout: UINT;
  szInfoTitle: array[0..63] of AnsiChar;
  dwInfoFlags: DWORD;
end;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   PopupMenu1: TPopupMenu;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure PopupMenu1Popup(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   procedure DefaultHandler(var M); override;
   procedure Ico(var M:TMessage); message WM_USER+222;
 end;

var
 Form1: TForm1;
 N:TNotifyIconBalloon;
 WM_TASKBARCREATED: Cardinal;
 b:Boolean;
implementation

{$R *.dfm}

procedure BalloonHint(NIco,Flag:byte;Title,Text:string);
begin
 N.cbSize:=SizeOf(TNotifyIconBalloon);
 N.uID:=NIco;
 N.uFlags:=$00000010;
 StrPLCopy(N.szInfo,Text,SizeOf(N.szInfo)-1);
 StrPLCopy(N.szInfoTitle,Title,SizeOf(N.szInfoTitle)-1);
 N.uTimeout:=5000;
 N.dwInfoFlags:=Flag;
 Shell_NotifyIcon(NIM_MODIFY,@N);
end;

procedure AddModDelIcon(H:HWND;R,NIco:byte;Icon:HICON;S:string);
begin
 N.cbSize:=SizeOf(TNotifyIconBalloon);
 N.hWnd:=H;
 N.uID:=NIco;
 N.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
 N.uCallbackMessage:=WM_USER+222;
 N.hIcon := Icon;
 StrPLCopy(N.szTip,S,SizeOf(N.szTip)-1);
 if R=1 then Shell_NotifyIcon(NIM_ADD,@N);
 if R=2 then Shell_NotifyIcon(NIM_MODIFY,@N);
 if R=3 then Shell_NotifyIcon(NIM_DELETE,@N);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
AddModDelIcon(Handle,1,1,Application.Icon.Handle,"Add Icon 1");
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
beep;
b:= not b;
if b then AddModDelIcon(Handle,2,1,Icon.Handle,"Modify Icon 1")
     else AddModDelIcon(Handle,2,1,Application.Icon.Handle,"Modify Icon 2")
end;

procedure TForm1.Button2Click(Sender: TObject);//Show Balloon
begin //1= INFO; 2= WARNING; 3= ERROR;
BalloonHint(1,1,"Balloon hint",FormatDateTime("Ñåãîäíÿ : dddd"^m"ddddd ã.",Now))
end;

procedure TForm1.Button3Click(Sender: TObject);//Hide Balloon
begin
BalloonHint(1,0,"","")
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AddModDelIcon(Handle,3,1,0,"")//Delete Icon
end;

procedure TForm1.Ico(var M:TMessage);
begin
if M.WParam=1 then
case M.LParam of
WM_RBUTTONUP : PopupMenu1.Popup(Mouse.CursorPos.x,Mouse.CursorPos.y);
WM_LBUTTONUP : Button1.Click;
end;
end;

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
SetForegroundWindow(Handle)
end;

procedure TForm1.DefaultHandler(var M);
begin
if TMessage(M).Msg = WM_TASKBARCREATED then
AddModDelIcon(Handle,1,1,Application.Icon.Handle,"Add Icon 2");
inherited;
end;

initialization
WM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated");

end.


 
DrPass ©   (2004-11-16 22:45) [6]

Во многих форумах "как добавить иконку в трей" является оффтопиком. Потому что уже тошнит


 
Piter ©   (2004-11-17 00:35) [7]

и правильно. Нужно темы такие закрывать и посылать в FAQ (обращаюсь к модераторам)



Страницы: 1 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-1100616997
ks
2004-11-16 17:56
2005.01.02
wm_PAINT


3-1102320458
stud
2004-12-06 11:07
2005.01.02
использование хранимых процедур


1-1102996265
OnEvent
2004-12-14 06:51
2005.01.02
Как отловить сообщение OnMouseWheel которое происходит над моим


14-1103149584
украинец
2004-12-16 01:26
2005.01.02
Россияне! Почему вы так ненавидите Украину ?


3-1102393055
Dmitriy O.
2004-12-07 07:17
2005.01.02
TRxDbGrid OnTitleClick