我用下面的代码实现QQ自动隐藏效果。为什么D7编译后效果正常,D2007编译后就不行了呢? ( 积分: 100 )

  • 主题发起人 主题发起人 Bral
  • 开始时间 开始时间
B

Bral

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ExtCtrls, StdCtrls;
type
TfrmMain = class(TForm)
tmrMouseOut: TTimer;
procedure MouseLeaveProc(Sender: TObject);
private
{ Private declarations }
protected
procedure WMMOVING(var Msg: TMessage);
message WM_MOVING;
procedure MouseEnterProc(var Msg: TMessage);
message CM_MOUSEENTER;
public
{ Public declarations }
end;

var
frmMain: TfrmMain;
implementation
{$R *.dfm}

{
****************************
* 以下为窗口效果相关过程 *
****************************
}
//限制窗口的Top不能小于0,即窗口不能被拖动到顶部以外
procedure TfrmMain.WMMOVING(var Msg: TMessage);
begin
inherited;
//当窗口被移动的时候
if PRECT(Msg.lParam).Top < 0 then
PRECT(Msg.lParam).Top := 0;
end;

//实现窗口自动弹出
procedure TfrmMain.MouseEnterProc(var Msg: TMessage);
begin
inherited;
tmrMouseOut.Enabled := True;
//如果窗口不是隐藏的,不用弹出。
if Self.Top >= 0 then
Exit;
Self.Top := 0;
Msg.Result := 0;
end;

//实现窗口自动隐藏
procedure TfrmMain.MouseLeaveProc(Sender: TObject);
var
pt: TPoint;
begin
GetCursorPos(pt);
if (not PtInRect(Self.BoundsRect, pt)) and (GetAsyncKeyState(VK_LButton) <> 0) then
Exit;
if PtInRect(Self.BoundsRect, pt) then
Exit;
tmrMouseOut.Enabled := False;
//如果窗口不在最顶部,不用隐藏。
if Self.Top > 0 then
Exit;
//将窗口上缩,只显示三个像素
Self.Top := -Self.Height + 3;
end;
{
****************************
* 以上为窗口控制相关过程 *
****************************
}

end.

这个是2ccc上找到的,D7编译后一切正常,但是D2007编译就不能自动弹出了。鼠标移动到隐藏后剩下的那一点点窗体上面不会自动弹出,必须点击一下才行。这个是怎么回事?另外2ccc上其他几个自动隐藏的源代码都在D2007下出问题,编译能通过,但是实际效果就不是那么回事了。谁能告诉我怎么回事。谢谢
 
新手学习中。。你遇到我是你的遗憾了。。。答不出来。。。。[:D]
 
对楼上的无语中
 
为你顶一吧
 
为什么没人帮我,顶一个!!!!!!!!
 
没有安装delphi2007。估计是获取 WM_MOVING时,应该是frmMain处于活动的时候才会引发
 
可能MOUSEENTER和MOUSELEAVE的实现方式不一样?
 
我是菜鸟,不懂这个,谁能告诉我怎样解决?
 
你用的有Bug,我刚刚从2ccc.com上找到的另外一个源码完全正常,D2007下仍然有效:
http://www.2ccc.com/article.asp?articleid=2338
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部