Delphi可以截获这个消息如下定义消息函数
procedure WMLButtonDown(var Message: TWMLButtonDown);
message WM_LBUTTONDOWN;
在这个消息处理函数中调DOMouseDownDoMouseDown又调 用了MouseDown
在这个函数里面才到了最重要的部分
该函数是这样的
procedure TControlMouseDown(Button: TMouseButton;Shift: TShiftState; X Y: Integer);
begin
if Assigned(FOnMouseDown) then FOnMouseDown(Self Button Shift X Y);
end;
而我们先来看看用户外部是怎么操作的
他自己定义一个SomeobjMouseDown; 是一个事件处理函数必须和TMouseEvent的形式一样
Procedure SomeobjMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X Y: Integer);
然后他这样赋值
someobj
onMouseDown:=SomeobjMouseDown;
当赋值以后类内部其实是通过onMouseDown属性将SomeobjMouseDown;与FonMouseDwon关联在一起也就是说MouseDown方法中调用了FOnMouseDown(Self Button Shift X Y);其实就等于调用了Procedure SomeobjMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X Y: Integer);
所以用户就可以在这个自定义的事件方法中写自己的代码当事件发生时该类的调度机制就会自动调用这个事件方法啦
也许有人会问为什么从消息处理函数要调用DoMouseDownDoMouseDown又调用MouseDown然后再调用事件方法呢为什么不直接在消息处理函数WMLButtonDown中调用呢其实它这样的做的目的是要进行一些保护判断以及一些消息附加值的转换使这些值看起来更加直观
好了事件就讲了这里不知道你们明白了没有可能是我的表达能力不行但没有关系到真正做的时候大家应该能明白了
四组件制作步骤
有了上面的基本概念其实制作简单组件已经不是什么问题了而要做真正的组件还需要有一个正确过程我们以后学做组件也会顺着这个过程来做主要如下
确定一个祖先类怎么确定可以根据上面组件的简要层次结构来确定如果你想做非可视化组件可以从继承TComponent开始如果想做可视要可视化组件可以从TControl的子类开始
创建组件的单元这个在制作组件时再说不过是在IDE里面做几个操作而已
给组件写属性方法事件成员等这些在上面己有详细说明是写组件的核心部分事实上也是后面实践的主要内容
测试安装组件和写帮助这个内容比较次要后面的例子会讲怎么样安装包括单个单元或用包的形式安装而写帮助己超出范围这里就不说了
关于组件基本概念就到这里讲完了接下来就是实践了有了上面的知识实践起来也不是很难很多东西都在上面了而一些高级的特性会在以后慢慢说的
[] [] []