窗口最小化(纯粹送分) 我想实现 当我点了窗口最小化按钮 实行隐藏该窗口 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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. 是不是要托盘啊实现托盘程序最大最小化动态效果 windows本身在最大最小化程序时有动态效果,但只对普通程序有效,而对托盘程序没有类似的效果,然而我们可以通过DrawAnimatedRects函数简单的实现最好效果。这个函数只需要指定窗口句柄和动态起始的和结束的两个矩形区域就可以了。unit TestForm;interfaceuses Windows, Classes, Forms, Controls, StdCtrls, ExtCtrls;type TZoomAction = (zaMinimize, zaMaximize); TfrmTest = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end;var frmTest: TfrmTest;implementation{$R *.DFM}procedure ZoomEffect(theForm: TForm; theOperation: TZoomAction);var rcStart: TRect; rcEnd: TRect; rcTray: TRect; hwndTray : hWnd; hwndChild: hWnd;begin { Find the system tray area bounding rectangle } hwndTray := FindWindow('Shell_TrayWnd', nil); hwndChild := FindWindowEx(hwndTray, 0, 'TrayNotifyWnd', nil); GetWindowRect(hwndChild, rcTray); { Check for minimize/maximize and swap start/end} if theOperation = zaMinimize then begin rcStart := theForm.BoundsRect; rcEnd := rcTray; end else begin rcEnd := theForm.BoundsRect; rcStart := rcTray; end; { Here the magic happens... } DrawAnimatedRects(theForm.Handle, IDANI_CAPTION, rcStart, rcEnd)end;procedure TfrmTest.FormClose(Sender: TObject; var Action: TCloseAction);begin ZoomEffect(Self, zaMinimize);end;procedure TfrmTest.FormShow(Sender: TObject);begin ZoomEffect(Self, zaMaximize);end;end.放一个TApplicationEvents的组件,在onminmize事件写入: ZoomEffect(Self, zaMinimize);//给你一个例子参考//运行后在托盘出现图标,在图标有右键菜单,可以显示,最小化,退出程序。unit main;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, StdCtrls, Menus;const WM_MYTRAYICONCALLBACK = WM_USER + 1000;type TForm1 = class(TForm) PopupMenu1: TPopupMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } MyTrayIcon: TNotifyIconData; procedure WMMyTrayIconCallback (var Msg: TMessage); message WM_MYTRAYICONCALLBACK; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.N1Click(Sender: TObject);begin Self.Visible := True; Application.ShowMainForm := Visible;end;procedure TForm1.N2Click(Sender: TObject);beginSelf.Visible := False; Application.ShowMainForm := Visible;end;procedure TForm1.N3Click(Sender: TObject);begin Application.Terminate;end;procedure TForm1.FormDestroy(Sender: TObject);begin Shell_NotifyIcon(NIM_DELETE,@MyTrayIcon);end;procedure TForm1.WMMyTrayIconCallback(var Msg: TMessage);var pPos: TPoint;begin case Msg.LParam of WM_LBUTTONDBLCLK: begin Visible := not Visible; Application.ShowMainForm := Visible; SetForegroundWindow(Application.Handle); end; WM_RBUTTONDOWN: begin GetCursorPos(pPos); PopupMenu1.Popup(pPos.x,pPos.y); end; end;end;procedure TForm1.FormCreate(Sender: TObject);begin Inherited; Self.Visible := False; Application.ShowMainForm := Visible; { 创建Tray } with MyTrayIcon do begin cbSize := SizeOf(TNotifyIconData); { 记录TNotifyIconDataA的大小 } Wnd := Self.Handle; { 接收Tray小图标区鼠标事件的窗口的句柄 } uID := 1; { 图标的ID(Tray小图标区鼠标事件的wPara参数的值)} uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; { 此条消息的有效范围(低三位有效) NIF_MESSAGE 0x1: uCallbackMessage参数有效 NIF_ICON 0x2: hIcon is valid参数有效 NIF_TIP 0x4: szTip is valid参数有效 } uCallbackMessage := WM_MYTRAYICONCALLBACK; { 系统回送消息的ID } hIcon := Application.Icon.Handle; { 显示在Tray小图标区上的图标的句柄 } szTip := '托盘'; { 鼠标移动到图标上时系统显示的提示信息 } end; Shell_NotifyIcon(NIM_ADD,@MyTrayIcon);end;end. 纯正的窗体最小化做法:Form1.windowState:=wsMinimized; //看一看窗体属性列表的最下面一个类似地,顺便说一下最大化和还原:Form1.windowState:=wsMaximized; //最大化Form1.windowState:=wsNormal; //还原隐藏窗体的实现:Form1.visible:=false; //改变visible属性Form1.hide; //方法另外,隐藏后要再次显示的实现:Form1.show;Form1.windowState:=wsMaximized; //使窗体最大化;或者用wsNormal,使窗体还原 补充:隐藏窗体是 Form1.visible:=false; 或者 Form1.hide; 即可实现,而不是两句齐用;但显示窗体最好是两句共用。 用mac地址取得ip地址 如此实现与内网的一台机建立IPC$连接? 寻求Indy做FTP服务器好难,有做的朋友交流一下 急寻类似excell风格的报表组件,请推荐几款. 请教高手:如何在iis中用程序(delphi)创建web站点!!! 再问数据表的打印! 滚动显示,希望可以加入精华贴; 用Installshield Express3.5制作安装版时,请问怎样依据SQL脚本创建数据库? 求神龙卡V代或新一代osd叠加程序 ---====WWW.7-8-9.NET程序源Delphi版期待着您的加盟====--- 菜鸟级问题(送点分) 超难算法:取得URL中如bbs.csdn.net的部分
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.
实现托盘程序最大最小化动态效果
windows本身在最大最小化程序时有动态效果,但只对普通程序有效,而对托盘程序没有类似的效果,然而我们可以通过DrawAnimatedRects函数简单的实现最好效果。这个函数只需要指定窗口句柄和动态起始的和结束的两个矩形区域就可以了。unit TestForm;interfaceuses
Windows, Classes, Forms, Controls, StdCtrls, ExtCtrls;type
TZoomAction = (zaMinimize, zaMaximize);
TfrmTest = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmTest: TfrmTest;implementation{$R *.DFM}procedure ZoomEffect(theForm: TForm; theOperation: TZoomAction);
var
rcStart: TRect;
rcEnd: TRect;
rcTray: TRect;
hwndTray : hWnd;
hwndChild: hWnd;
begin
{ Find the system tray area bounding rectangle }
hwndTray := FindWindow('Shell_TrayWnd', nil);
hwndChild := FindWindowEx(hwndTray, 0, 'TrayNotifyWnd', nil);
GetWindowRect(hwndChild, rcTray);
{ Check for minimize/maximize and swap start/end}
if theOperation = zaMinimize then
begin
rcStart := theForm.BoundsRect;
rcEnd := rcTray;
end
else
begin
rcEnd := theForm.BoundsRect;
rcStart := rcTray;
end;
{ Here the magic happens... }
DrawAnimatedRects(theForm.Handle, IDANI_CAPTION, rcStart, rcEnd)
end;procedure TfrmTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ZoomEffect(Self, zaMinimize);
end;procedure TfrmTest.FormShow(Sender: TObject);
begin
ZoomEffect(Self, zaMaximize);
end;
end.放一个TApplicationEvents的组件,在onminmize事件写入:
ZoomEffect(Self, zaMinimize);//给你一个例子参考
//运行后在托盘出现图标,在图标有右键菜单,可以显示,最小化,退出程序。
unit main;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellAPI, StdCtrls, Menus;
const
WM_MYTRAYICONCALLBACK = WM_USER + 1000;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
MyTrayIcon: TNotifyIconData;
procedure WMMyTrayIconCallback (var Msg: TMessage); message WM_MYTRAYICONCALLBACK; public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.N1Click(Sender: TObject);
begin
Self.Visible := True;
Application.ShowMainForm := Visible;end;procedure TForm1.N2Click(Sender: TObject);
begin
Self.Visible := False;
Application.ShowMainForm := Visible;end;procedure TForm1.N3Click(Sender: TObject);
begin
Application.Terminate;end;procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@MyTrayIcon);
end;procedure TForm1.WMMyTrayIconCallback(var Msg: TMessage);
var
pPos: TPoint;
begin
case Msg.LParam of
WM_LBUTTONDBLCLK:
begin
Visible := not Visible;
Application.ShowMainForm := Visible;
SetForegroundWindow(Application.Handle);
end;
WM_RBUTTONDOWN:
begin
GetCursorPos(pPos);
PopupMenu1.Popup(pPos.x,pPos.y);
end;
end;end;procedure TForm1.FormCreate(Sender: TObject);
begin
Inherited;
Self.Visible := False;
Application.ShowMainForm := Visible;
{ 创建Tray }
with MyTrayIcon do
begin
cbSize := SizeOf(TNotifyIconData); { 记录TNotifyIconDataA的大小 }
Wnd := Self.Handle; { 接收Tray小图标区鼠标事件的窗口的句柄 }
uID := 1; { 图标的ID(Tray小图标区鼠标事件的wPara参数的值)}
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; { 此条消息的有效范围(低三位有效)
NIF_MESSAGE 0x1: uCallbackMessage参数有效
NIF_ICON 0x2: hIcon is valid参数有效
NIF_TIP 0x4: szTip is valid参数有效 }
uCallbackMessage := WM_MYTRAYICONCALLBACK; { 系统回送消息的ID }
hIcon := Application.Icon.Handle; { 显示在Tray小图标区上的图标的句柄 }
szTip := '托盘'; { 鼠标移动到图标上时系统显示的提示信息 }
end;
Shell_NotifyIcon(NIM_ADD,@MyTrayIcon);end;end.
隐藏窗体的实现:Form1.visible:=false; //改变visible属性Form1.hide; //方法
另外,隐藏后要再次显示的实现:Form1.show;
Form1.windowState:=wsMaximized; //使窗体最大化;或者用wsNormal,使窗体还原
隐藏窗体是 Form1.visible:=false; 或者 Form1.hide; 即可实现,而不是两句齐用;
但显示窗体最好是两句共用。