用以下這種方式很麻煩,能做成個組件,通過監控訊息的方式來實作?
從視窗類繼承或直接修改Tform原碼,一個要動態生成一個重新安裝又得改。好像也不方便。
const
WM_BARICON=WM_USER+200;
procedure TForm1.WMSysCommand (var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if Message.WParam = SC_ICON then //sc_icon等于最小化訊息
begin
//如果用戶最小化視窗則將視窗隱藏并在任務欄上添加圖示
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
strcopy(@lpData.szTip,pchar(form1.Caption));
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end
else
begin
//如果是其它的SystemCommand訊息則呼叫系統預設處理函式處理之。
DefWindowProc(Form1.Handle,Message.Msg,Message.WParam,Message.LParam);
end;
end;
procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then
begin
//如果用戶點擊任務欄圖示則將圖示洗掉并回復視窗。
lpData := new(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;
uj5u.com熱心網友回復:
本來就有這樣的控制元件。只是我一時想不起叫什么了,你自己查一下吧。分太少,懶得動
uj5u.com熱心網友回復:
把Delphi程式視窗收縮到系統托盤的最簡單的實作方法---把uTrayIcon.pas加入到你的專案里面,就實作了你所需要的功能,這樣夠簡單了吧?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/282040.html
標籤:VCL組件開發及應用
上一篇:Gis合并記憶體不足怎么辦