PDA

View Full Version : اضافه کردن آیکون برنامه به notification area



hadiaj168
یک شنبه 05 آبان 1387, 02:41 صبح
با سلام
چطور میشه آیکون برنامه رو به notification area ویندوز اضافه کرد؟

vcldeveloper
یک شنبه 05 آبان 1387, 08:18 صبح
در دلفی 2007 به بالا: کامپوننت TrayIcon خودِ دلفی.
در نسخه های قدیمی تر: انواع و اقسام کامپوننت ها موجود هست، معمولا CoolTray که مجانی هم هست، محبوبتر هست.
اگر خودتون میخواید بسازید: تابع Shell_NotifyIcon ویندوز.

s.mostafa.rahmani
یک شنبه 05 آبان 1387, 10:23 صبح
اول اين ثابت رو در قسمت Interface يونيت اضافه كنيد:


const
WM_ICONTRAY = WM_USER + 1;

در قسمت private يا public فرم

TrayIconData: TNotifyIconData;
procedure InitialTrayIcon;
procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;

رو اضافه كنيد.
اين هم روالهاي مورد نياز:

procedure TfrmMain.InitialTrayIcon;
begin
PopUpMenu1.OwnerDraw:=True;

with TrayIconData do
begin
cbSize := SizeOf(TrayIconData);
Wnd := Handle;
uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_ICONTRAY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;

Shell_NotifyIcon(NIM_ADD, @TrayIconData);
end;

procedure TfrmMain.TrayMessage(var Msg: TMessage);
var
p : TPoint;
begin
{ case Msg.lParam of
WM_LBUTTONDOWN:
begin
ShowMessage('This icon responds to RIGHT BUTTON click!');
end;
WM_RBUTTONDOWN:
begin
SetForegroundWindow(Handle);
GetCursorPos(p);
PopUpMenu1.Popup(p.x, p.y);
PostMessage(Handle, WM_NULL, 0, 0);
end;
end;}
if (Msg.LParam = WM_LBUTTONDOWN) or (Msg.LParam = WM_RBUTTONDOWN) then
begin
SetForegroundWindow(Handle);
GetCursorPos(p);
PopUpMenu1.Popup(p.x, p.y);
PostMessage(Handle, WM_NULL, 0, 0);
end;
end;


با فراخواني InitialTrayIcon در هر قسمتي از فرم مثلاً در OnShow فرم يا در OnClick يك Button مي‌تونيد آيكن برنامه رو در System Tray اضافه كنيد.

و با دستور

Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
مي‌تونيد آيكن رو از System Tray حذف كنيد.

مي‌تونيد Popup Menu هم داشته باشيد، اگه دقت كنيد در پروسيجرها ازش (PopupMenu1) استفاده شده.
.