Delphi 组件开发实现类 编辑框

效果如下图:


实现代码:

unit Edit1;


interface


uses
  SysUtils, Windows,Classes, Controls, StdCtrls,Graphics,Messages;


type
  TEdit1 = class(TEdit)
  private
    FAlignment: TAlignment;
    FMouseIn : Boolean;
    FFColor1: TColor;
    FFColor2: TColor;
    procedure SetAlignment(const Value: TAlignment);
    procedure SetFColor1(const Value: TColor);
    procedure SetFColor2(const Value: TColor);
    procedure InvalidateNC;
    procedure WMNCPAINT(var msg:TWMNCPaint);message WM_NCPaint;
    procedure CMMouseEnter(var msg:TMessage);message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg:TMessage);message CM_MOUSELEAVE;




    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property Alignment:TAlignment read FAlignment write SetAlignment;
    property FColor1:TColor read FFColor1 write SetFColor1;
    property FColor2:TColor read FFColor2 write SetFColor2;
  end;


procedure Register;


implementation


procedure Register;
begin
  RegisterComponents('Samples', [TEdit1]);
end;


{ TEdit1 }


procedure TEdit1.CMMouseEnter(var msg: TMessage);
begin
   inherited;
   FMouseIn := True;
   InvalidateNC;
end;


procedure TEdit1.CMMouseLeave(var msg: TMessage);
begin
   inherited;
   FMouseIn := False;
   InvalidateNC;
end;


procedure TEdit1.InvalidateNC;
begin
   if Parent = nil then Exit;
   SendMessage(Handle,WM_NCPAINT,0,0);


end;


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;
  end;
  Invalidate;
end;


procedure TEdit1.SetFColor1(const Value: TColor);
begin
  FFColor1 := Value;
end;


procedure TEdit1.SetFColor2(const Value: TColor);
begin
  FFColor2 := Value;
end;


procedure TEdit1.WMNCPAINT(var msg: TWMNCPaint);
var
  dc:HDC;
  borderBrush : HBRUSH;
  r:TRect;
begin
  dc := GetWindowDC(Handle);
  try
    SetRect(R,0,0,Width,Height);
    if FMouseIn then
    begin
       borderBrush := CreateSolidBrush(FFColor1);
       FrameRect(dc,r,borderBrush);
       DeleteObject(borderBrush);
       InflateRect(r,-1,-1);
    end
    else
    begin
       InflateRect(r,-1,-1);
       borderBrush := CreateSolidBrush(ColorToRGB(Color));
       FrameRect(dc,R,borderBrush);
       DeleteObject(borderBrush);
       InflateRect(r,1,1);
    end;
    borderBrush := CreateSolidBrush(FColor2);
    FrameRect(dc,r,borderBrush);
    DeleteObject(borderBrush);
  finally
    ReleaseDC(Handle,dc);
  end;
end;


end.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值