诚信求教一个难题,望各位高手解答 普通窗体点击任务栏上的小图标会缩小到任务栏。再点击会还原出来。。问题来了在窗体样式是bsNone的情况下 点任务栏上的按钮,并不能将窗口缩回到任务栏。分不是很多,希望各路高手帮指点下哈! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private { Private declarations } procedure OnAppMessage(var Msg: TMsg; var Handled: Boolean); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.OnAppMessage(var Msg: TMsg; var Handled: Boolean);begin if (Msg.message = WM_ACTIVATE ) and (Msg.wParam = SC_ICON) then begin ShowMessage( 拦截最小化消息!'); Handled := True; end;end;procedure TForm1.FormCreate(Sender: TObject);begin Application.OnMessage:= OnAppMessage;end;当窗口风格bsSingle窗口的时候点击状态栏会激活最小化消息。但bsnone的时候,是不会触发这些消息,因此主要是找到应该拦截那一个消息,我没找到,反调试也没得到结果,只看到上层有个USER32.WaitMessage。 抛砖引玉吧。 不是吧我的XP+D7的任意设置BorderStyle,点击任务栏都很会最小化及还原你做了其它处理了么? 我没有做任何的处理。就是一个空窗体设置为bsnone也是这样的效果。。我是win7系统+delphi2010 应该楼主自己没去试,在等直接的结果,我反汇编看了下依然也只能消息,而且比较多不好判断,后面一想,直接测试不是来的更快,因此下面注释的是测试前的,逐个排除后得到下面结果, 只需按以前代码改这个消息函数即可。procedure TForm1.OnAppMessage(var Msg: TMsg; var Handled: Boolean);begin if //(Msg.message >0 ) // and((Msg.message <>49214 )) //要查是什么消息,因为一直断所以排除 //and((Msg.message <>15 )) //要查是什么消息,因为一直断所以排除 // and((Msg.message <>275 )) //要查是什么消息,因为一直断所以排除 // and((Msg.message <>45057 )) //好像是失去焦点 ((Msg.message =45056 )) //好想是得到焦点,换成十六进制$b000,可以查消息api then begin // ShowMessage(IntToStr(Msg.message)); Handled := True; Application.Minimize; //程序最小化, //到此已经完成点击最小话,但要判断是任务栏获取焦点还是数遍点击窗口 //所以还需要在窗体上最判断. 需要自己测试下。 end;end; 你这个方法试过了。xp下没测试。。win7下测试的。出现以下问题。1、有时候点一下无法缩小。需要点好几下才能缩小2、当我点任务栏里别的程序缩小的时候。这个程序也会跟着缩小。。哎。能力有限。只能暂时放下这个功能最后再去研究了。还是谢谢zhangqiwen的提点。 就是要判断焦点的问题,因为我只是判断了消息, 有焦点就会有消息, 要检测消息来源,觉得越搞越复杂了,换个方式,不用bsNone,然后再处理问题。 安装1stclass 遇到的问题 画一个大数据曲线图? 一个问题,cookie的 这个功能困了我好多天,望能得到高手的帮助 我的窗体不能添加方法了,为什么??? yuhouyangguang(雨后阳光)进来接分吧 在delphi中怎么调用父类的属性和方法 请教高手一个有关ADO的问题,高分相送!!!! 这个问题改怎么写 ado问题。。急~~~ 关于函数或者过程的默认值 单元之间数据调用
{ Private declarations }
procedure OnAppMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.OnAppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.message = WM_ACTIVATE ) and (Msg.wParam = SC_ICON) then
begin
ShowMessage( 拦截最小化消息!');
Handled := True;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:= OnAppMessage;
end;当窗口风格bsSingle窗口的时候点击状态栏会激活最小化消息。
但bsnone的时候,是不会触发这些消息,因此主要是找到应该拦截那一个消息,我没找到,反调试也没得到结果,只看到上层有个USER32.WaitMessage。 抛砖引玉吧。
我的XP+D7的任意设置BorderStyle,点击任务栏都很会最小化及还原
你做了其它处理了么?
procedure TForm1.OnAppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if //(Msg.message >0 )
// and((Msg.message <>49214 )) //要查是什么消息,因为一直断所以排除
//and((Msg.message <>15 )) //要查是什么消息,因为一直断所以排除
// and((Msg.message <>275 )) //要查是什么消息,因为一直断所以排除
// and((Msg.message <>45057 )) //好像是失去焦点
((Msg.message =45056 )) //好想是得到焦点,换成十六进制$b000,可以查消息api
then
begin
// ShowMessage(IntToStr(Msg.message));
Handled := True;
Application.Minimize; //程序最小化,
//到此已经完成点击最小话,但要判断是任务栏获取焦点还是数遍点击窗口
//所以还需要在窗体上最判断. 需要自己测试下。
end;
end;
你这个方法试过了。xp下没测试。。win7下测试的。出现以下问题。
1、有时候点一下无法缩小。需要点好几下才能缩小
2、当我点任务栏里别的程序缩小的时候。这个程序也会跟着缩小。。哎。能力有限。只能暂时放下这个功能最后再去研究了。还是谢谢zhangqiwen的提点。