1.限制大小在CanResize事件里!避免FORM最大化拦截消息!
2.刚写的例子:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ComCtrls, ShellApi, ImgList, ExtCtrls, Menus;const
WM_SYSTRAY = WM_USER + 1;
IDI_TRAYICON = 0;type
TForm1 = class(TForm)
ImageList1: TImageList;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FWindowHandle: HWnd;
FParentWindow: HWnd;
FPopupMenu: TPopupMenu;
FPopupAlign: TPopupAlignment;
FIcon: TIcon;
FIconData: TNotifyIconData;
i:integer;
public
procedure WndProc(var Msg: TMessage);
end;var
Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
FPopupAlign := paRight;
FParentWindow := Handle;
FWindowHandle := AllocateHWnd(WndProc);
i:=0;
FIcon := TIcon.Create;
Imagelist1.GetIcon(i,FIcon);
With FIconData do
begin
uCallbackMessage:=WM_SYSTRAY;
cbSize := SizeOf(FIconData);
uID := IDI_TRAYICON;
wnd := self.Handle;
hIcon := FIcon.Handle;
StrCopy(FIconData.szTip,'Hello');
uFlags := NIF_ICON + NIF_TIP + NIF_MESSAGE;
end;
Shell_NotifyIcon(NIM_ADD, @FIconData);
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;
if i=Imagelist1.Count then i:=0;
Imagelist1.GetIcon(i,FIcon);
FIconData.hIcon:=FIcon.Handle;
Shell_NotifyIcon(NIM_MODIFY, @FIconData);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @FIconData);
end;procedure TForm1.WndProc(var Msg: TMessage);
begin
if Msg.LParam=WM_LBUTTONDBLCLK then
begin
showmessage('左键双击!');
end;
end;
end.
2.刚写的例子:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, ComCtrls, ShellApi, ImgList, ExtCtrls, Menus;const
WM_SYSTRAY = WM_USER + 1;
IDI_TRAYICON = 0;type
TForm1 = class(TForm)
ImageList1: TImageList;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FWindowHandle: HWnd;
FParentWindow: HWnd;
FPopupMenu: TPopupMenu;
FPopupAlign: TPopupAlignment;
FIcon: TIcon;
FIconData: TNotifyIconData;
i:integer;
public
procedure WndProc(var Msg: TMessage);
end;var
Form1: TForm1;implementation
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
FPopupAlign := paRight;
FParentWindow := Handle;
FWindowHandle := AllocateHWnd(WndProc);
i:=0;
FIcon := TIcon.Create;
Imagelist1.GetIcon(i,FIcon);
With FIconData do
begin
uCallbackMessage:=WM_SYSTRAY;
cbSize := SizeOf(FIconData);
uID := IDI_TRAYICON;
wnd := self.Handle;
hIcon := FIcon.Handle;
StrCopy(FIconData.szTip,'Hello');
uFlags := NIF_ICON + NIF_TIP + NIF_MESSAGE;
end;
Shell_NotifyIcon(NIM_ADD, @FIconData);
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;
if i=Imagelist1.Count then i:=0;
Imagelist1.GetIcon(i,FIcon);
FIconData.hIcon:=FIcon.Handle;
Shell_NotifyIcon(NIM_MODIFY, @FIconData);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @FIconData);
end;procedure TForm1.WndProc(var Msg: TMessage);
begin
if Msg.LParam=WM_LBUTTONDBLCLK then
begin
showmessage('左键双击!');
end;
end;
end.
解决方案 »
- delphi连接SQL SERVER问题,帮助我!
- 我们公司想开展软件开发业务,请朋友们帮我分析一些市场问题。(分不够可以再加)
- 数组问题,热切期待答案。
- 帮我!!
- 各位在上海的老大,请问程序员在上海工薪如何?
- 怎么去掉 edit 的 KeyPress事件 产生的当当的声音 (100分,FIFO原则)
- 请问哪里有能浏览.编辑office文档的控件?
- 去广州如何,大家提点建议吧!!
- 300分急寻:Magic CD Burner,CDWriterXP,NuCDR三个控件刻出来的光盘文件名都是乱码,有谁知道怎样解决,或更好的控件可以做光盘刻录程序?
- 如何控制程序菜单的背景和字体,一般的话都是有Windows外观控制的?
- Delphi项目管理人员请进入——delphi团队开发问题(续)
- 如何改变inputbox函数中的字体????
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
private
procedure WM_GETMINMAXINFO( var mmInfo : TWMGETMINMAXINFO ); message wm_GetMinMaxInfo;
//最大化消息!
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.WM_GETMINMAXINFO(var mmInfo: TWMGETMINMAXINFO);
begin
with mmInfo.minmaxinfo^ do
begin
ptmaxposition.x := Screen.Width div 4;
ptmaxposition.y := Screen.Height div 4;
ptmaxsize.x := Screen.Width div 2;
ptmaxsize.y := Screen.Height div 2;
end;
end;end.