RT
我创建一个 Frame ,在上面放一个 image1,一个 label ,当鼠标进入这个Frame 时,就在 image外面画一个边框,用
Moveto,lineto...
现在问题是这样的,
1.Frame 没有鼠标进入的事件,这要怎么处理,可不可以自定义像其他控件的 MouseEnter 一样的事件?
2.Frame上的label.Caption ,我定义了一个 property ,用来改变它的 Caption ,怎么在Form 上它显示不了?
3.画边框时要用到Canvas ,Frame不具备,要怎么实现在Frame上画,不是在image上画?

解决方案 »

  1.   

    mdejtod 刚刚发表了帖子 问个关于Canvas 的问题.... 加为好友 
      

  2.   

    一个变通的方法,可以FRAME上放一个其他的VCL,比如PANEL,设置CLIENT然后在PANEL上放IMAGE和LABEL
      

  3.   


    呵呵,好办法.TFrame--TCustomFrame--TScrollingWinControl--TWinControl
    那么TFrame其实也是个window,是有handle的.
    不过CM_MOUSEENTER和CM_MOUSELEAVE消息,是delphi定义的控件消息,
    TCustomFrame的派生类,不知道能不能响应.
      

  4.   

    哦,可以,TControl里面就有CM_MOUSEENTER的响应函数.
      

  5.   

    我试了一下,在Frame里可以响应下边的消息  procedure CMMouseEnter( var Msg: TMessage ); message cm_MouseEnter;
    procedure CMMouseLeave( var Msg: TMessage ); message cm_MouseLeave;
      

  6.   

    第一个问题当然是可以的了,自定义消息处理函数,用于消息处理的过程必须具备三个条件:
    1这个过程必须是一个对象的方法
    2这个过程必须有一个Var参数,变量类型是TMessage或其他特殊的消息记录
    3声明这个过程时必须使用message指示符,后面是要处理的消息常量值
    像6楼的例子就是符合上面的三条,
    可以用于响应消息
    第二个问题没听明白
    第三个问题自己没做过,等待学习
      

  7.   

    谢谢 各位,
    1.之前是在IMAGE上画,并且处理了   WM_PAINT 消息,这样后Frame 上的 label就显示不了,在这个消息处理中加了 lab1.Repaint  后可以显示,但会闪,后面就改用 paintbox 在它的onpaint中画,这个问题解决了, label 显示正常 
    2.好像处理不了 CM_MouseLeave  的事件?