怎么扑获这样的消息(20分)

  • 主题发起人 主题发起人 hcx
  • 开始时间 开始时间
H

hcx

Unregistered / Unconfirmed
GUEST, unregistred user!
金山词霸按下右上角的关闭/最下化按钮时都最小化为右下角的图标
 
WM_SYSCOMMAND - SC_CLOSE
 
在工程文件的 Application.Initialize; 前面添上
Application.ShowMainForm := False;

然后。。。。。

unit Main;
interface
uses
Windows, Messages, SysUtils, Forms, ShellAPI, ComCtrls, ScktComp,
Gauges, ImgList, Classes, Menus;

const
WM_MIDASICON = WM_USER + 1;

type
TForm1 = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
private
FIconData: TNotifyIconData;
protected
procedure WMMIDASIcon(var Message: TMessage); message WM_MIDASICON;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

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

procedure TForm1.WMMIDASIcon(var Message: TMessage);
begin
case Message.LParam of
WM_RBUTTONUP: Application.Terminate ; //右键退出
WM_LBUTTONUP: begin //左键显示窗体
if NOT Visible then show;
SetForegroundWindow(Handle);
end;
end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose:=False;
Application.Minimize ;
Hide ;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with FIconData do
begin
cbSize := SizeOf(FIconData);
Wnd := Self.Handle;
uID := $DEDB;
uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
hIcon := Application.Icon.Handle;
uCallbackMessage := WM_MIDASICON;
StrCopy(szTip, PChar(Caption));
end;
Shell_NotifyIcon(NIM_Add, @FIconData);
end;

end.

嘻嘻。。。
(*^v^*)
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caminimize;
end;
 
Croco:
...
public
procedure wmsyscommand(var msg:Twmsyscommand);
message Wm_syscommand;
...
procedure Tmain.wmsyscommand(var msg:Twmsyscommand);
begin
if msg.CmdType=sc_close then showmessage('idsys_close');
if msg.CmdType=SC_MINIMIZE then showmessage('idsys_close');
end;
运行时,做的菜单和系统菜单都不响应,右上角的最大化按
钮不起作用,只有关闭/最小化起作用
但我希望的是扑获sc_close,SC_MINIMIZE而不影响其他.
不怎么才能实现

无情: hIcon := Application.Icon.Handle; 这是用系统的图标,我用过从资源
文件中读出图标,但系统的图标就和我读出的图标一样了,但如我不要他门一样
要怎么才能实现
 
怎么没人回答,分少的话可以适当加点分吗?
 
在WIN32的帮助里有详细关于任务栏通知区的编程帮助,你可以在那里看一看.
要在关闭窗体时隐藏程序在任务栏的CAPTION,只需要处理主窗体的
CloseQuery和Close事件,将住窗体HIDE就可以了.
在最小化时也可以同样来处理,可能是用OnFormResize或类似的事件.
 
多人接受答案了。
 
怎么才能实现>>

procedure Tmain.wmsyscommand(var msg:Twmsyscommand);
begin
case Msg.WParam of
SC_MINIMIZE: ...;
SC_MAXIMIZE: ...;
SC_RESTORE: ...;
else inherited;
end;
end;
 
后退
顶部