如何使窗体最小化到托盘中

larryuan 2001-06-01 01:54:00
在D5中,现已将窗体显示在托盘中,并且隐藏了applicaton,
使其不出现在任务栏上,但是最小化的时窗体缩至屏幕左下角。
我希望它的最小化动画效果是缩至系统托盘区,就象oicq等
软件的最小化效果一样,请问如何实现?
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
larryuan 2001-06-05
  • 打赏
  • 举报
回复
谢谢Apollo47,你说的这个效果类型金山词霸。但我想要application和form1都不出现在
任务栏上,只有form1的trayicon在系统托盘区,最小化也是到这里,任务栏上始终没有
按钮。就是类似oicq的效果。
Apollo47 2001-06-04
  • 打赏
  • 举报
回复
uses ShellApi;

const
WM_TRAYNOTIFY=$4444;
MY_TRAY_ICON=$5555;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMinimize :=DoMin;
end;

procedure TForm1.DoMin(Sender:TObject);
var NT:TNotifyIconData;
begin
with NT do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle;
UID:=MY_TRAY_ICON;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallBackMessage:=WM_TRAYNOTIFY;
hIcon:=LoadIcon(hInstance,'CDROM');// 此处需要修改;
szTip:='我的程序'#0;
end;
Shell_NotifyIcon(NIM_ADD,@NT);
ShowWindow(Application.Handle,SW_HIDE);
Application.Minimize;
end;

procedure TForm1.WMTrayNotify(var Msg:TMessage);
var NT:TNotifyIconData;
P:TPoint;
begin
GetCursorPos(P);
if (Msg.LParam=WM_RBUTTONUP) then PopupMenu1.Popup(p.x,p.y);
if (Msg.lParam<>WM_LBUTTONUP) then exit;
with NT do
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle;
UID:=MY_TRAY_ICON;
uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
uCallBackMessage:=WM_TRAYNOTIFY;
hIcon:=LoadIcon(hInstance,'CDROM');// 此处需要修改;
szTip:=#0;
end;
Shell_NotifyIcon(NIM_DELETE,@NT);
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end;

larryuan 2001-06-04
  • 打赏
  • 举报
回复
这只是隐藏了窗体,并不是最小化,因此也就没有最小化的动画效果了
hlfsoft 2001-06-01
  • 打赏
  • 举报
回复
另一个帖子里的,不知对你有没有用
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.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧