做个基类使用,主要功能是子类的用户输入控件可以自动变色---Delphi

  1. unit U_BaseForm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, Buttons, Typinfo;
  6. type
  7.   TFm_BaseForm = class(TForm)
  8.     Edit1: TEdit;
  9.     Edit2: TEdit;
  10.     procedure FormCreate(Sender: TObject);
  11.   private
  12.     { Private declarations }
  13.     procedure CmpEnter(Sender: TObject); //用户获得焦点
  14.     procedure CmpExit(Sender: TObject); //用户失去焦点
  15.   public
  16.     { Public declarations }
  17.   protected
  18.     procedure pSetComponents;
  19.   end;
  20. var
  21.   Fm_BaseForm: TFm_BaseForm;
  22.   //以后应该是可以设置的。风格管理,可以保存在注册表中
  23. const
  24.   ENTERC0LOR = $00CDBDB4;
  25.   EXITCOLOR = $00DAF3DD;
  26. implementation
  27. {$R *.dfm}
  28. { TFm_BaseForm }
  29. procedure TFm_BaseForm.CmpEnter(Sender: TObject);
  30. var
  31.   sProp: PPropInfo;
  32. begin
  33.   sProp := GetPropInfo(Sender.ClassInfo, 'Color');
  34.   if sProp <> nil then
  35.     SetOrdProp(Sender, sProp, ENTERC0LOR);
  36. end;
  37. procedure TFm_BaseForm.CmpExit(Sender: TObject);
  38. var
  39.   sProp: PPropInfo;
  40. begin
  41.   sProp := GetPropInfo(Sender.ClassInfo, 'Color');
  42.   if sProp <> nil then
  43.     SetOrdProp(Sender, sProp, EXITCOLOR);
  44. end;
  45. procedure TFm_BaseForm.pSetComponents;
  46. var
  47.   i: Integer;
  48.   sColor, sEnter, sExit, sChanged: PPropInfo;
  49.   vEnter, vExit: TMethod;
  50.   mEvent: TNotifyEvent;
  51. begin
  52.   for i := 0 to componentcount - 1 do
  53.   begin
  54.     sColor := GetPropInfo(Components[i].ClassInfo, 'Color');
  55.     sEnter := GetPropInfo(Components[i].ClassInfo, 'OnEnter');
  56.     sExit := GetPropInfo(Components[i].ClassInfo, 'OnExit');
  57.     sChanged := GetPropInfo(Components[i].ClassInfo, 'OnChange');
  58.     if (sChanged <> niland (sEnter <> niland
  59.       (sExit <> niland (sColor <> nilthen
  60.     begin
  61.       SetOrdProp(Components[i], sColor, EXITCOLOR);
  62.       mEvent := CmpEnter;
  63.       vEnter.Code := @mEvent;
  64.       vEnter.Data := Self;
  65.       SetMethodProp(Components[i], sEnter, vEnter);
  66.       mEvent := CmpExit;
  67.       vExit.Code := @mEvent;
  68.       vExit.Data := Self;
  69.       SetMethodProp(Components[i], sExit, vExit);
  70.     end;
  71.   end;
  72. end;
  73. procedure TFm_BaseForm.FormCreate(Sender: TObject);
  74. begin
  75.    pSetComponents;
  76. end;
  77. end.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值