主窗体中有一Frame,Frame中有许多子控件,所以Frame有一个自动生成的垂向上的滚动条以显示全部的子控件,现在想实现的是鼠标移动到Frame范围内就使Frame获得焦点,以实现鼠标中键的浏览功能。
现在出现的问题是,由于Frame中有很多子控件,要使Frame获得焦点只有给每个子控件的OnMouseMove书写代码,但是子控件的数量很多,我感觉这样的效率实在太低,并且子控件占的面积很大,OnMouseMove事件很少出现在Frame上,都是出现在其中的子控件上。所以想求教一更好的实现机制。谢谢!
现在出现的问题是,由于Frame中有很多子控件,要使Frame获得焦点只有给每个子控件的OnMouseMove书写代码,但是子控件的数量很多,我感觉这样的效率实在太低,并且子控件占的面积很大,OnMouseMove事件很少出现在Frame上,都是出现在其中的子控件上。所以想求教一更好的实现机制。谢谢!
先覆盖一个消息方法procedure CMMouseEnter(var Msg: Tmessage);message CM_MOUSEENTER;
然后在消息方法里这么写:
procedure TForm1.CMMouseEnter(var Msg: Tmessage);
var Obj: TObject;
begin
Obj := TObject(Msg.LParam);
if Assigned(Obj) and (Obj is TFrame2) then
ShowMessage('i''m frame'); //Frame21.SetFocus;
end;
我试了一下可行的!