做个基类使用,主要功能是子类的用户输入控件可以自动变色---Delphi
2008-11-13 16:01
453 查看
unit U_BaseForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Typinfo;
type
TFm_BaseForm = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure CmpEnter(Sender: TObject); //用户获得焦点
procedure CmpExit(Sender: TObject); //用户失去焦点
public
{ Public declarations }
protected
procedure pSetComponents;
end;
var
Fm_BaseForm: TFm_BaseForm;
//以后应该是可以设置的。风格管理,可以保存在注册表中
const
ENTERC0LOR = $00CDBDB4;
EXITCOLOR = $00DAF3DD;
implementation
{$R *.dfm}
{ TFm_BaseForm }
procedure TFm_BaseForm.CmpEnter(Sender: TObject);
var
sProp: PPropInfo;
begin
sProp := GetPropInfo(Sender.ClassInfo, 'Color');
if sProp <> nil then
SetOrdProp(Sender, sProp, ENTERC0LOR);
end;
procedure TFm_BaseForm.CmpExit(Sender: TObject);
var
sProp: PPropInfo;
begin
sProp := GetPropInfo(Sender.ClassInfo, 'Color');
if sProp <> nil then
SetOrdProp(Sender, sProp, EXITCOLOR);
end;
procedure TFm_BaseForm.pSetComponents;
var
i: Integer;
sColor, sEnter, sExit, sChanged: PPropInfo;
vEnter, vExit: TMethod;
mEvent: TNotifyEvent;
begin
for i := 0 to componentcount - 1 do
begin
sColor := GetPropInfo(Components[i].ClassInfo, 'Color');
sEnter := GetPropInfo(Components[i].ClassInfo, 'OnEnter');
sExit := GetPropInfo(Components[i].ClassInfo, 'OnExit');
sChanged := GetPropInfo(Components[i].ClassInfo, 'OnChange');
if (sChanged <> nil) and (sEnter <> nil) and
(sExit <> nil) and (sColor <> nil) then
begin
SetOrdProp(Components[i], sColor, EXITCOLOR);
mEvent := CmpEnter;
vEnter.Code := @mEvent;
vEnter.Data := Self;
SetMethodProp(Components[i], sEnter, vEnter);
mEvent := CmpExit;
vExit.Code := @mEvent;
vExit.Data := Self;
SetMethodProp(Components[i], sExit, vExit);
end;
end;
end;
procedure TFm_BaseForm.FormCreate(Sender: TObject);
begin
pSetComponents;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Typinfo;
type
TFm_BaseForm = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure CmpEnter(Sender: TObject); //用户获得焦点
procedure CmpExit(Sender: TObject); //用户失去焦点
public
{ Public declarations }
protected
procedure pSetComponents;
end;
var
Fm_BaseForm: TFm_BaseForm;
//以后应该是可以设置的。风格管理,可以保存在注册表中
const
ENTERC0LOR = $00CDBDB4;
EXITCOLOR = $00DAF3DD;
implementation
{$R *.dfm}
{ TFm_BaseForm }
procedure TFm_BaseForm.CmpEnter(Sender: TObject);
var
sProp: PPropInfo;
begin
sProp := GetPropInfo(Sender.ClassInfo, 'Color');
if sProp <> nil then
SetOrdProp(Sender, sProp, ENTERC0LOR);
end;
procedure TFm_BaseForm.CmpExit(Sender: TObject);
var
sProp: PPropInfo;
begin
sProp := GetPropInfo(Sender.ClassInfo, 'Color');
if sProp <> nil then
SetOrdProp(Sender, sProp, EXITCOLOR);
end;
procedure TFm_BaseForm.pSetComponents;
var
i: Integer;
sColor, sEnter, sExit, sChanged: PPropInfo;
vEnter, vExit: TMethod;
mEvent: TNotifyEvent;
begin
for i := 0 to componentcount - 1 do
begin
sColor := GetPropInfo(Components[i].ClassInfo, 'Color');
sEnter := GetPropInfo(Components[i].ClassInfo, 'OnEnter');
sExit := GetPropInfo(Components[i].ClassInfo, 'OnExit');
sChanged := GetPropInfo(Components[i].ClassInfo, 'OnChange');
if (sChanged <> nil) and (sEnter <> nil) and
(sExit <> nil) and (sColor <> nil) then
begin
SetOrdProp(Components[i], sColor, EXITCOLOR);
mEvent := CmpEnter;
vEnter.Code := @mEvent;
vEnter.Data := Self;
SetMethodProp(Components[i], sEnter, vEnter);
mEvent := CmpExit;
vExit.Code := @mEvent;
vExit.Data := Self;
SetMethodProp(Components[i], sExit, vExit);
end;
end;
end;
procedure TFm_BaseForm.FormCreate(Sender: TObject);
begin
pSetComponents;
end;
end.
相关文章推荐
- 使用AspNetPager分页控件、分页存储过程及用户控件基类实现的完美分页功能
- 使用AspNetPager分页控件、分页存储过程及用户控件基类实现的完美分页功能
- 使用AspNetPager分页控件、分页存储过程及用户控件基类实现的完美分页功能
- Android用户输入自动提示控件AutoCompleteTextView使用方法
- Delphi皮肤控件分析与QQ的皮肤变色功能
- jQuery实现用户输入自动完成功能
- 使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
- MultiAutoCompleteTextView和AutoCompleteTextView两个自动完成功能控件的使用
- 如何让诊断功能不需要输入APPS口令 &监控用户当前在使用那个表单?
- 如何使用PLSQL添加用户和密码,登录时可以免输入密码 PLSQL配置新数据库连接
- 使用DefaultButton 实现回车事件,可以有多个,甚至在用户控件内也行
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序、动态生成查询、自动分页功能
- 如何实现输入字母就可以查出数据库中以该字母匹配的中文实现自动补全功能
- 使用DataGridView数据窗口控件,构建用户快速输入体验
- 一步步学习SPD2010--第十四章节--在Web页面使用控件(3)--验证用户数据输入
- Edit控件回车功能&&作为密码输入控件使用
- Flex的NumericStepper控件中如何通过maxChars限制用户可以输入数字最大位数的例子
- MultiAutoCompleteTextView和AutoCompleteTextView两个自动完成功能控件的使用
- IP控件(功能跟电脑自带的一样,输入三位数后自动跳转,输入"."也会自动跳转)
- Delphi皮肤控件分析与QQ的皮肤变色功能