教你用Delphi编写自己的可视化控件(3)
来源:优易学  2011-6-5 17:11:16   【优易学:中国教育考试门户网】   资料下载   IT书店
 程序编到这里,就算是终于给自己的新控件做了一个外型了,不过它还不能滚动。现在我们来编写鼠标事件,让我们能够操纵它。鼠标事件的过程的定义和Paint过程很相似,只是后面要加上参数说明⑿,鼠标事件分为MouseDown、MouseMove和MouseUp三个,在定义后面都要加上override。接下来在后面编写它的代码。注意:这里的鼠标事件是Mouse…,而不是通常的OnMouse…。可是在⒀处的定义是干什么用的呢?这里的事件定义,都是给用户使用的,也就是说,当使用该控件时,会在Object Inspector中的Event页面中显示出来。
  这些鼠标事件的代码也非常简单,判断鼠标的坐标,在画布上画出相应的图片等,并同时触发相应的事件。值得注意的是,在调用自定义事件时,都要先用⒁处的这样一个语句来判断用户是否已经为该事件编写代码。这一点非常重要,否则会调用出错。
  大家注意到了,刚才所调用的事件都是自定义的,定义的方法也很简单,和定义属性差不多,只是类型时TNotifyEvent罢了。
  TNotifyEvent是默认事件,其定义为:
  TNotifyEvent = procedure(Sender: TObject)
  如果你要定义另外形式的事件,就必须这样:先在type后编写
  <事件类型名称> = procedure(<参数>:<类型>)
  例如:
  TCustomEvent = procedure(a: Integer; b:String);
  然后在public后定义:
  <事件名称>:<事件类型名称>
  例如:
  AnEvent: TCustomEvent;
  看完这些,这整个程序你应该理解了吧。如果编译或运行出错,注意检查以下几点:
  1、create和destroy过程中是否有inherited语句;
  2、TBitmap类型的变量create和free了没有;
  3、过程前有没有控件名,例如:TPigHorizontalScroller.MoseMove
  判断鼠标是否进入或离开控件的方法:
  定义如下的过程:
  procedure MouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
  procedure MouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  再在下面编写代码就行了。这个方法用于编写三态按钮很有用,有兴趣的话,(将来)可以到我的主页下载Pig VCL Package(小猪可视化控件包),参考其中的TPigButton控件。(现在还没有,但是将来有了,欢迎大家下载)

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训