delphi2006的trayIcon控件,如何实现窗口最小化的时候到系统托盘?(100分)

  • 主题发起人 主题发起人 t7197
  • 开始时间 开始时间
T

t7197

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]问delphi2006中的trayIcon控件,如何实现窗口最小化的时候到系统托盘?
就象QQ的那样,一点最小化就到右下脚的图标里,点击右下脚图标,又能打开窗体。
应该如何设置属性,或者事件呢?拜托各位大哥……指教一二[/red]
 
unit Unit1;

interface

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

const
WM_TRAYNOTIFY=10;

type
TForm1 = class(TForm)
Button1: TButton;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
Timer1: TTimer;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure wmTrayNotify(var Msg:TMessage);message WM_TRAYNOTIFY;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
ChangeFlag: Boolean;
A:Boolean;
Icon: TIcon;
Nid:TNotifyIconData;
{ Private declarations }
public

{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ChangeFlag := false;
A:= True;
{ Nid.cbSize:=sizeof(TNotifyIconData);
Nid.Wnd:=Handle;
Nid.uID:=1000;
Nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
Nid.uCallbackMessage:=WM_TRAYNOTIFY;
Nid.hIcon:=Application.Icon.Handle;
Nid.szTip:='我隐藏在系统托盘里了';
Shell_NotifyIcon(NIM_ADD,@Nid); }
Icon:= TIcon.Create;
Icon.LoadFromFile('C:/Program Files/Microsoft Office/OFFICE11/MSN.ICO');

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@Nid);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Nid.cbSize:=sizeof(TNotifyIconData);
Nid.Wnd:=Handle;
Nid.uID:=1000;
Nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
Nid.uCallbackMessage:=WM_TRAYNOTIFY;
Nid.hIcon:=Application.Icon.Handle;
Nid.szTip:='我隐藏在系统托盘里了';
Shell_NotifyIcon(NIM_ADD,@Nid);
ShowWindow(Application.Handle,SW_SHOWMINIMIZED);
ShowWindow(Application.Handle,SW_HIDE);
Timer1.Enabled:= True;
end;

procedure TForm1.wmTrayNotify(var Msg: TMessage);
var
p:TPoint;
begin
if(Msg.lparam=WM_LBUTTONDBLCLK) then
begin
ShowWindow(Application.Handle,SW_SHOW);
Shell_NotifyIcon(NIM_DELETE,@Nid);
Timer1.Enabled:= False;
Application.Restore;
end
else if(Msg.LParam=WM_RButtonUp) then
begin
GetCursorPos(P);//获得鼠标坐标
PopupMenu1.Popup(P.X, P.Y);//在鼠标光标处显示弹出菜单
end;
end;

procedure TForm1.N1Click(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_SHOW);
Shell_NotifyIcon(NIM_DELETE,@Nid);
Application.Restore;
Timer1.Enabled:= False;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.FormShow(Sender: TObject);
begin

Timer1.Enabled:= False;
end;

procedure TForm1.Button2Click(Sender: TObject);

begin
ChangeFlag:= True;
{ Icon:= TIcon.Create;
Icon.LoadFromFile('C:/Program Files/Microsoft Office/OFFICE11/MSN.ICO');
Nid.cbSize:=sizeof(TNotifyIconData);
Nid.Wnd:=Handle;
Nid.uID:=1000;
Nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
Nid.uCallbackMessage:=WM_TRAYNOTIFY;
Nid.hIcon:=Icon.Handle;
Shell_NotifyIcon(NIM_MODIFY,@Nid);}
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not ChangeFlag then
Exit;
if A then
begin
Nid.hIcon:= Icon.Handle;
Shell_NotifyIcon(NIM_MODIFY,@Nid);
A:= False;
end
else begin
Nid.hIcon:= Application.Icon.Handle;
Shell_NotifyIcon(NIM_MODIFY,@Nid);
A:= True;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ChangeFlag:= False;
end;

end.
这是在delphi 7.0里写的 不知道楼主兄弟是否可以?
 
没有用过DELPHI2006,在D6/D7里用COOLTRAYICON非常简单,拖一个COOLTRAYICON控件到FORM上,设置一下属性就可以实现了,非常方便。
 
[purple]各位大哥,我要问的是 delphi2006中的trayIcon控件 呀 [/purple]
 
设置tryIcon的属性就可以,看看有没有类似minimizetotry;
 
虽然…… 但是……
 
后退
顶部