Delphi组件开发教程指南(2)简单扩充TEdit
2010-04-27 01:35
477 查看
上一篇,介绍了组件开发的一般概述,以及组件类层次结构的各个类的大致信息!现在就开始通过实例进行来简单的讲述一下一般组件的开发过程!我这里先采用最基本的方式来创建一个组件!也就是使用Delphi自己的组件开发向导来建立一个新的组件。在这里,我以扩充TEdit为例进行讲解。
那么首先,要介绍的就是如何使用Delphi的组件开发向导了!这个向导在Delphi IDE的Component菜单下的NewComponent打开就是向导了,可以参照如下:
代码
我在里面写的代码比前面给的代码多了一个
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;
之后实现如下
然后SetAlignment修改为
注意两者SetAlignment的实现方式!然后思考一下!
先看看效果
代码下载!
另外,这里,我并没有将这个控件注册到Delphi的IDE中去!如何注册进去,在以后的指南中,我会说明!
组件教程指南目录
那么首先,要介绍的就是如何使用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中去!如何注册进去,在以后的指南中,我会说明!
组件教程指南目录
相关文章推荐
- Delphi组件开发教程指南(2)简单扩充TEdit
- Delphi组件开发教程指南(2)简单扩充TEdit -转摘
- Delphi组件开发教程指南(1)组件开发概述
- Delphi组件开发教程指南(1)组件开发概述
- Delphi组件开发教程指南(四)组件生成过程(TWinControl)
- Delphi组件开发教程指南目录
- Delphi 组件开发教程指南(7)继续模拟动画显示控件
- Delphi 组件开发教程指南(3)组件注册
- Delphi组件开发教程指南(6)实现一个模拟动画显示控件
- Delphi组件开发教程指南(1)组件开发概述
- Delphi 组件开发教程指南(4)组件生成过程(针对TWinControl继承而来的组件)
- Delphi 组件开发教程指南(5)实现类QQ的编辑框
- Delphi 组件开发教程指南(4)组件生成过程(针对TWinControl继承而来的组件)
- Delphi 组件开发教程指南(3)组件注册
- Delphi组件开发教程指南(四)组件生成过程(TWinControl)
- Delphi组件开发教程指南目录
- Delphi 组件开发教程指南(5)实现类QQ的编辑框
- Delphi组件开发教程指南目录
- Delphi 组件开发教程指南(8)定制特色Button
- Delphi 组件开发教程指南(9)定制特色Button之QQ按钮