诚信求教一个难题,望各位高手解答 普通窗体点击任务栏上的小图标会缩小到任务栏。再点击会还原出来。。问题来了在窗体样式是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,然后再处理问题。 怎么显示Flash啊? 如何將一個目錄下的所有文件名稱抓取放到一個數組中并按名稱自動排序? 高分求dcom远程调用方式问题(请各位大虾帮忙) 关于在数据库中插入图象和二进制大文本 大家好,我们工作赛马的网站正式开通,请参观! DBImage的问题,为什么我用它不能显示Northwind的表Employees的photo字段? 急急的问:在win2000下编写的ADO程序,如何在win98平台上发布 [给分]关于ACCESS数据库的问题! 如何使我的应用程序执行时在"ctr+alt+del"中看不到? 汇编写程序,求助 关于函数或者过程的默认值 单元之间数据调用
{ 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的提点。