急,望各位高手不吝赐教,不胜感激! ( 积分: 50 )

  • 主题发起人 主题发起人 安静的冥想
  • 开始时间 开始时间

安静的冥想

Unregistered / Unconfirmed
GUEST, unregistred user!
本人学习delphi时间不长,可能下面提出的问题在各位眼中不值一提,见笑了。
今天在编一个桌面应用程序时遇到如下问题,望各位大侠不吝赐教。
程序功能如下:程序运行时创建一个半透明窗体,上面只有一个Timage控件,使得该控件可以响应Form1.OnMouseMove事件,不断向当前鼠标位置移动。
我用如下代码生成一个半透明Form1:
procedure TForm1.FormCreate(Sender: TObject);
var
Margin : integer;
B_X ,B_Y : integer;
FullRgn ,ClientRgn ,GifRgn: THandle;
begin
with Form1 do
begin
//Left:= 0;
//Top:= 0;
//ClientWidth:= 1024;
//ClientHeight:= 768;
//BorderStyle := bsNone;
end;
Margin:= (Form1.Width - Form1.ClientWidth) div 2;
FullRgn:= CreateRectRgn(0 ,0 ,Form1.Width ,Form1.Height);
B_X:= Margin;
B_Y:= Form1.Height - Form1.ClientHeight - Margin;
ClientRgn:= CreateRectRgn(B_X ,B_Y ,B_X + Form1.ClientWidth ,B_Y + Form1.ClientHeight);
CombineRgn(FullRgn ,FullRgn ,ClientRgn , RGN_DIFF);
B_X:= B_X + Image1.Left;
B_Y:= B_Y + Image1.Top;
GifRgn:= CreateRectRgn(B_X ,B_Y ,B_X + Image1.Width ,B_Y + Image1.Height);
CombineRgn(FullRgn, FullRgn ,GifRgn ,RGN_OR);
SetWindowRgn(Handle ,FullRgn ,True);
end;
编译后运行测试却发现生成的Form根本不支持OnMouseMove事件,测试代码如下:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
GetCursorPos(P);
Caption:=IntToStr(P.X)+':'+IntToStr(P.Y);
end;
发现Caption不随MouseMove而改变,好像Form1上除了Image1外部分全部形同虚设。不知各位大虾是否有办法解决该问题,或者可用其他方法实现我所叙述的程序功能(*要求一定要使用半透明窗体,因为我想要程序在桌面运行时可以点击桌面上的其他程序或按钮*),多谢多谢!

PS:本人现在河南洛阳,欲寻找本地志同道合的Delphi爱好者,望有意者留下联系方式,最好是电话或者手机号,再次感谢!
 
本人学习delphi时间不长,可能下面提出的问题在各位眼中不值一提,见笑了。
今天在编一个桌面应用程序时遇到如下问题,望各位大侠不吝赐教。
程序功能如下:程序运行时创建一个半透明窗体,上面只有一个Timage控件,使得该控件可以响应Form1.OnMouseMove事件,不断向当前鼠标位置移动。
我用如下代码生成一个半透明Form1:
procedure TForm1.FormCreate(Sender: TObject);
var
Margin : integer;
B_X ,B_Y : integer;
FullRgn ,ClientRgn ,GifRgn: THandle;
begin
with Form1 do
begin
//Left:= 0;
//Top:= 0;
//ClientWidth:= 1024;
//ClientHeight:= 768;
//BorderStyle := bsNone;
end;
Margin:= (Form1.Width - Form1.ClientWidth) div 2;
FullRgn:= CreateRectRgn(0 ,0 ,Form1.Width ,Form1.Height);
B_X:= Margin;
B_Y:= Form1.Height - Form1.ClientHeight - Margin;
ClientRgn:= CreateRectRgn(B_X ,B_Y ,B_X + Form1.ClientWidth ,B_Y + Form1.ClientHeight);
CombineRgn(FullRgn ,FullRgn ,ClientRgn , RGN_DIFF);
B_X:= B_X + Image1.Left;
B_Y:= B_Y + Image1.Top;
GifRgn:= CreateRectRgn(B_X ,B_Y ,B_X + Image1.Width ,B_Y + Image1.Height);
CombineRgn(FullRgn, FullRgn ,GifRgn ,RGN_OR);
SetWindowRgn(Handle ,FullRgn ,True);
end;
编译后运行测试却发现生成的Form根本不支持OnMouseMove事件,测试代码如下:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
GetCursorPos(P);
Caption:=IntToStr(P.X)+':'+IntToStr(P.Y);
end;
发现Caption不随MouseMove而改变,好像Form1上除了Image1外部分全部形同虚设。不知各位大虾是否有办法解决该问题,或者可用其他方法实现我所叙述的程序功能(*要求一定要使用半透明窗体,因为我想要程序在桌面运行时可以点击桌面上的其他程序或按钮*),多谢多谢!

PS:本人现在河南洛阳,欲寻找本地志同道合的Delphi爱好者,望有意者留下联系方式,最好是电话或者手机号,再次感谢!
 
是因为你的Image把窗体中能看到的部分给覆盖了

你使用Image的OnMouseMove就可以了
 
蛋兄厉害哦。
 
照蛋哥的说法使用Image的OnMouseMove,是不是我只有把鼠标移动到TImage上图片才能动啊?但是我是想要鼠标移动到哪里图片就跟到哪里,并非只有鼠标在image上才移动。还有办法吗?我回去试试看可以的话马上回来加分。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
641
import
I
I
回复
0
查看
641
import
I
I
回复
0
查看
794
import
I
I
回复
0
查看
790
import
I
后退
顶部