时间: 2021-07-31 作者:daque
---- 此刻很多的运用步调都有如许一种功效,当用户采用最小化窗口时,窗口不是象凡是那么最小化到工作栏上,而是“最小化”成一个工作栏图标。象foxmail 3.0 netvampire 3.0等都供给了如许的功效。实行如许的功效本质上并不搀杂,在窗口最小化时,窗口会发出wm_syscommand动静,你只有须要截取windows的wm_syscommand动静,在窗口最小化时湮没窗口并挪用windowsapi因变量shell_notifyicon将设置的图标增添到工作栏上,shell_notifyicon的因变量设置是如许的:function shell_notifyicon(dwmessage:dword; lpdata: pnotifyicondata): bool; stdcall; 个中的参数dwmessage指定shell_notifyicon因变量的操纵,不妨是nim_add nim_delete nim_modify三个值中的一个,辨别对应增添图标、简略图标、窜改图目标举措。 ---- 参数lpdata指向的pnotifyicondata构造的设置如次: _notifyicondataw = record cbsize: dword; wnd: hwnd; uid: uint; uflags: uint; ucallbackmessage: uint; hicon: hicon; sztip: array [0..63] of widechar; end; tnotifyicondata = _notifyicondataw; ---- 在这个构造中wnd指明分属的窗口,ucallbackmessage指明回调动静,即使指领会wnd和 ucallbackmessage,则当用户对工作栏图标有举措(如点击图标,在图标上挪动光标等)。体例城市发送ucallbackmessage动静给wnd指定的窗口。hicon是要增添的图目标句柄,sztip 是图目标提醒行(即是当挪动光标到图标上,展示的一个小黄方框内展示的笔墨)。动静。实行上头的功效,最重要的是要处置wm_syscommand动静和自设置的图标动静,那些动静在delphi中并没有相映的事变。这边就须要运用到delphi的自设置动静处置功效来截取并处置那些动静。 ---- 开始看底下的步调。在执路途序之前,开始要变换form1的icon属性,给form1装入一个图标,要不在工作栏上会展示一块空缺。 unit unit1; interface uses windows, messages, sysutils, classes, graphics, controls, forms, dialogs,shellapi; const wm_baricon=wm_user+200; type tform1 = class(tform) private procedure wmsyscommand(var message: tmessage); message wm_syscommand; procedure wmbaricon(var message:tmessage);message wm_baricon; { private declarations } public { public declarations } end; var form1: tform1; implementation {$r *.dfm} procedure tform1.wmsyscommand (var message:tmessage); var lpdata:pnotifyicondata; begin if message.wparam = sc_icon then 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; lpdata.sztip := 'samples'; 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.cbsize := 88;//sizeof(pnotifyicondataa); lpdata.wnd := form1.handle; lpdata.hicon := form1.icon.handle; lpdata.ucallbackmessage := wm_baricon; lpdata.uid :=0; lpdata.sztip := 'samples'; lpdata.uflags := nif_icon or nif_message or nif_tip; shell_notifyicon(nim_delete,lpdata); dispose(lpdata); form1.visible := true; end; end; end. ---- 运转上头的步调,点击步调窗口题目栏上的最小化按钮,你就不妨看到窗口被“最小化”成了一个工作栏图标,点击图标,窗口又会回复从来的状况。 ---- 从上头的步调不妨看到,delphi的自设置动静处置功效的实行也是格外大略的,开始在form类的private设置中介入自设置动静处置因变量的设置,设置的刻画如次: procedure userpro(var message: tmessage):message windowsmessage 个中userpro是用户自设置动静处置因变量的称呼, windowsmessage是windows动静恒量或自设置动静恒量。 ---- 而后在步调中介入动静处置因变量,因变量的普遍方法如次: procedure userclass.userpro(var message:tmessage); var //介入设置 begin //介入步调语句 end; 个中userclass是封装自设置动静处置因变量的类的称呼。 ---- 结果,delphi的自设置动静处置因变量要波及到windows的动静的构造,在这边我就不多说了,大师不妨参考windows api扶助和delphi的关系扶助消息。断定大师即使控制了delphi的自设置动静处置因变量,确定不妨编写出象vb一律简略,象c++一律功效宏大的步调来的。