您的位置:首页 > 编程语言 > Delphi

Delphi组件开发教程指南(2)简单扩充TEdit

2010-04-27 01:35 477 查看
上一篇,介绍了组件开发的一般概述,以及组件类层次结构的各个类的大致信息!现在就开始通过实例进行来简单的讲述一下一般组件的开发过程!我这里先采用最基本的方式来创建一个组件!也就是使用Delphi自己的组件开发向导来建立一个新的组件。在这里,我以扩充TEdit为例进行讲解。

那么首先,要介绍的就是如何使用Delphi的组件开发向导了!这个向导在Delphi IDE的Component菜单下的NewComponent打开就是向导了,可以参照如下:

代码

procedure TEdit1.SetAlignment(const Value: TAlignment);
var
style: DWORD;
begin
if FAlignment <> Value then
begin
FAlignment := Value;
Style := GetWindowLong(Handle,GWL_STYLE);
style := style and (not ES_LEFT) and (not ES_CENTER) and (not ES_RIGHT);
case FAlignment of
taLeftJustify: SetWindowLong(Handle,GWL_STYLE,style or ES_LEFT);
taRightJustify: SetWindowLong(Handle,GWL_STYLE,style or ES_RIGHT);
taCenter: SetWindowLong(Handle,GWL_STYLE,style or ES_CENTER);
end;
Invalidate;
end;
end;


我在里面写的代码比前面给的代码多了一个
style := style and (not ES_LEFT) and (not ES_CENTER) and (not ES_RIGHT);这样的东西,可以试着思考一下为什么要这样写!

然后在最后还添加了一个Invalidate;可以试着注释掉这个函数,然后试着改变属性,看看会有什么样的效果!为什么会这样?

最后,我再给一个不是用SetWindowLong这个API来实现改变这个属性的效果的方法代码,大家可以先参考参考,至于原理若何,后面再做介绍!

那便是改写Edit控件的CreateParams方法,先在Protected域中声明

protected

procedure CreateParams(var Params: TCreateParams); override;

之后实现如下

procedure TEdit1.CreateParams(var Params: TCreateParams);
const
Alignments: array[TAlignment] of DWORD = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
inherited CreateParams(Params);
with Params do
begin
ExStyle := Exstyle and not WS_EX_Transparent;
Style := Style and not WS_BORDER or Alignments[FAlignment];
end;
end;


然后SetAlignment修改为

procedure TEdit1.SetAlignment(const Value: TAlignment);
begin
if FAlignment <> Value then
begin
FAlignment := Value;
RecreateWnd;
end;
end;


注意两者SetAlignment的实现方式!然后思考一下!

先看看效果


代码下载!

另外,这里,我并没有将这个控件注册到Delphi的IDE中去!如何注册进去,在以后的指南中,我会说明!

组件教程指南目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: