我想在控件上有鼠标移过时(并不是按下鼠标)显示一张图片,而当鼠标移开时图片消失,就象hint 的功能一样,请问在控件的哪种事件中实现,具体怎样设置敬请指点!(2

  • 主题发起人 主题发起人 libaoliang
  • 开始时间 开始时间
L

libaoliang

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在控件上有鼠标移过时(并不是按下鼠标)显示一张图片,而当鼠标移开时图片消失,就象hint 的功能一样,请问在控件的哪种事件中实现,具体怎样设置敬请指点!(20分)<br />我想在控件上有鼠标移过时(并不是按下鼠标)显示一张图片,而当鼠标移开时图
片消失,就象hint 的功能一样,请问在控件的哪种事件中实现,具体怎样设置敬请
指点!
 
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x>=image1.left) and (x<=image1.left+image1.width) and (y>=image1.top) and (y<=image1.top+image1.height) then
image1.visible:=true
else
image1.visible:=false;
end;
 
这样在鼠标离开时图片将依然显示,
可能达不到我的上述目的!
 
你试过了吗?我已试过绝对是你要的效果!仔细分析代码。
 
ApplicationEvent
 
linsb的程序好像不能达到要求;
如果窗体上还有别的控件,如panel之类的,如果鼠标在别的控件上移动,
就不能触发该事件,也就谈不上控制了,难道在每个控件上都要编写上面
一段程序?有没有什么办法能截获mousemove事件(只要它在窗体内就触发事件,
而不管是不是在窗体上的子控件上),好像截获窗体的mousemove消息不行。
谁有办法,我再给100分!!
 
当鼠标移动到image控件范围内image的图像可见,否则不可见,我试过没问题。
>>我想在控件上有鼠标移过时(并不是按下鼠标)显示一张图片,而当鼠标移开时图
片消失
这里的控件指的是什么?应有所指。在这里我指的是image,如果是其他,稍加修改。
 
我的意思是:
如果窗体还有panel,则鼠标在panel上移动时,不会触发form的mousemove事件,
这时就不能控制了(你可以试试),窗体上不可能没有别的控件吧,难道在窗体上的
所以控件都有来这段程序?
 

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
image1.visible:=true;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
image1.visible:=false;
end;

 
to linsb:
我的意思就是这样啊,如果我窗体上有几十个控件,都必须这么写?那也太
不爽了吧?难道没有办法截获一个什么消息来来接管所有在窗体内的mousemove事件?
 
问题不是鼠标移动到任何控件都触发这一事件吧?这有实际意义吗?
 
要么你接管;
WM_MOUSEMOVE消息,不过这样你只要有动鼠标都触发,那不是·#¥·#¥#·¥
要么拿一个循环,拿一个TAG分出你要的COMPONENT
for i:=0 to componetns then
if 你要的 then
(components as TComponet).onmousemove=youmousemove;
 
其实我的意图很简单:
1。怎样判断鼠标是否离开了某个控件?(我知道可以用getcursorpos得到
鼠标位置,但问题是在什么事件中写程序)。
2。怎样判断鼠标是否进入了某个控件?
 
to libaoliang
你的需要到底是什么?
 
估计libaoliang和我的要求差不多。
我另开了个帖子。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1160702
 
应该对WM_MouseHover
WM_MouseLeave两个消息进行处理,DElphi没有把这个消息做成事件处理;
只能写消息处理函数了,我原来就是这样解决的。
 
Beast:
能举个例子吗?
例如我相对panel1控制!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1160702
 
我当时是这样做的:
子类化一个Image(你的是Panel)
private
procedure WMHover(var Message: TMessage); message WM_MouseHover;
procedure WMleave(var Message:TMessage);message WM_MouseLeave;
实现的时候Self.visable=False或者True就行了。
然后把它加入你的窗体,我比较土鳖,是用代码Create的这个Image。应该有别的
办法
关注~~
 
截获form的WM_NCHITTEST消息, 然后转换一下坐标, 再判断是否在Image里就可以了。
只要鼠标在form上移动, form肯定能接收到这个消息, 不管它是不是在Panel上。
 
?这倒是也是一个另类解决方案~
 

Similar threads

D
回复
0
查看
744
DelphiTeacher的专栏
D
D
回复
0
查看
718
DelphiTeacher的专栏
D
D
回复
0
查看
672
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部