abtnedit.pas

来自「delphi编程控件」· PAS 代码 · 共 253 行

PAS
253
字号
unit abtnedit;
(*
 COPYRIGHT (c) RSD Software 1997 - 98
 All Rights Reserved.
*)


interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Mask, Buttons, DBCtrls;

type

TAutoBtnEdit = class(TMaskEdit)
private
  FBitBtn : TBitBtn;
  FOnBtnClick : TNotifyEvent;

  function GetBtnTabStop : boolean;
  procedure SetBtnTabStop(Value : boolean);

  function GetGlyph : TBitmap;
  procedure SetGlyph(Value : TBitmap);

  function GetNumGlyphs : integer;
  procedure SetNumGlyphs(Value : integer);

  procedure SetEditRect;
  procedure WMSize(var Message: TWMSize); message WM_SIZE;
protected
  procedure CreateWnd; override;
  procedure DoButtonClick(Sender: TObject);
public
  constructor  Create(AOwner : TComponent); override;
  destructor Destroy; override;
  procedure CreateParams(var Params: TCreateParams ); override;
published
  property BtnTabStop : Boolean read GetBtnTabStop write SetBtnTabStop default False;
  property Glyph : TBitmap read GetGlyph write SetGlyph;
  property NumGlyphs : integer read GetNumGlyphs write SetNumGlyphs default 2;
  property OnBtnClick : TNotifyEvent read FOnBtnClick write FOnBtnClick;
end;

TAutoDBBtnEdit = class(TDBEdit)
private
  FBitBtn : TBitBtn;
  FOnBtnClick : TNotifyEvent;

  function GetBtnTabStop : boolean;
  procedure SetBtnTabStop(Value : boolean);

  function GetGlyph : TBitmap;
  procedure SetGlyph(Value : TBitmap);

  function GetNumGlyphs : integer;
  procedure SetNumGlyphs(Value : integer);

  procedure SetEditRect;
  procedure WMSize(var Message: TWMSize); message WM_SIZE;
protected
  procedure CreateWnd; override;
  procedure DoButtonClick(Sender: TObject);
public
  constructor  Create(AOwner : TComponent); override;
  destructor Destroy; override;
  procedure CreateParams(var Params: TCreateParams ); override;
published
  property BtnTabStop : Boolean read GetBtnTabStop write SetBtnTabStop default False;
  property Glyph : TBitmap read GetGlyph write SetGlyph;
  property NumGlyphs : integer read GetNumGlyphs write SetNumGlyphs default 2;
  property OnBtnClick : TNotifyEvent read FOnBtnClick write FOnBtnClick;
end;


implementation

{TAutoBtnEdit}
constructor  TAutoBtnEdit.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FBitBtn := TBitBtn.Create(self);
  FBitBtn.Parent := self;
  FBitBtn.Top := 0;
  FBitBtn.OnClick := DoButtonClick;
  FBitBtn.NumGlyphs := 2;
  FBitBtn.TabStop := False;
end;

destructor TAutoBtnEdit.Destroy;
begin
  FBitBtn.Free;
  inherited Destroy;
end;

procedure TAutoBtnEdit.CreateParams( var Params: TCreateParams );
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or WS_CLIPCHILDREN or ES_MULTILINE;
end;

procedure TAutoBtnEdit.CreateWnd;
begin
  inherited CreateWnd;
  SetEditRect;
end;

function TAutoBtnEdit.GetBtnTabStop : boolean;
begin
  Result := FBitBtn.TabStop;
end;

procedure TAutoBtnEdit.SetBtnTabStop(Value : boolean);
begin
  FBitBtn.TabStop := Value;
end;

function TAutoBtnEdit.GetGlyph : TBitmap;
begin
  Result := FBitBtn.Glyph;
end;

procedure TAutoBtnEdit.SetGlyph(Value : TBitmap);
begin
  FBitBtn.Glyph.Assign(Value);
end;

function TAutoBtnEdit.GetNumGlyphs : integer;
begin
  Result := FBitBtn.NumGlyphs;
end;

procedure TAutoBtnEdit.SetNumGlyphs(Value : integer);
begin
  FBitBtn.NumGlyphs := Value;
end;

procedure TAutoBtnEdit.SetEditRect;
var
  R : TRect;
begin
  R := ClientRect;
  R.Right := FBitBtn.Left - 1;
  SendMessage(Handle, EM_SETRECTNP, 0, LongInt(@R));
  SendMessage(Handle, EM_SCROLLCARET, 0, 0);
end;

procedure TAutoBtnEdit.WMSize(var Message: TWMSize);
begin
  with FBitBtn do begin
    Height := self.Height - 3;
    Width := Height;
    Left := self.Width - Width - 3;
  end;
  SetEditRect;
end;

procedure TAutoBtnEdit.DoButtonClick(Sender: TObject);
begin
  if(Assigned(FOnBtnClick)) then
    FOnBtnClick(self);
end;


{TAutoDBBtnEdit}
constructor  TAutoDBBtnEdit.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FBitBtn := TBitBtn.Create(self);
  FBitBtn.Parent := self;
  FBitBtn.Top := 0;
  FBitBtn.OnClick := DoButtonClick;
  FBitBtn.NumGlyphs := 2;
  FBitBtn.TabStop := False;
end;

destructor TAutoDBBtnEdit.Destroy;
begin
  FBitBtn.Free;
  inherited Destroy;
end;

procedure TAutoDBBtnEdit.CreateParams( var Params: TCreateParams );
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or WS_CLIPCHILDREN or ES_MULTILINE;
end;

procedure TAutoDBBtnEdit.CreateWnd;
begin
  inherited CreateWnd;
  SetEditRect;
end;

function TAutoDBBtnEdit.GetBtnTabStop : boolean;
begin
  Result := FBitBtn.TabStop;
end;

procedure TAutoDBBtnEdit.SetBtnTabStop(Value : boolean);
begin
  FBitBtn.TabStop := Value;
end;

function TAutoDBBtnEdit.GetGlyph : TBitmap;
begin
  Result := FBitBtn.Glyph;
end;

procedure TAutoDBBtnEdit.SetGlyph(Value : TBitmap);
begin
  FBitBtn.Glyph.Assign(Value);
end;

function TAutoDBBtnEdit.GetNumGlyphs : integer;
begin
  Result := FBitBtn.NumGlyphs;
end;

procedure TAutoDBBtnEdit.SetNumGlyphs(Value : integer);
begin
  FBitBtn.NumGlyphs := Value;
end;

procedure TAutoDBBtnEdit.SetEditRect;
var
  R : TRect;
begin
  R := ClientRect;
  R.Right := FBitBtn.Left - 1;
  SendMessage(Handle, EM_SETRECTNP, 0, LongInt(@R));
  SendMessage(Handle, EM_SCROLLCARET, 0, 0);
end;

procedure TAutoDBBtnEdit.WMSize(var Message: TWMSize);
begin
  with FBitBtn do begin
    Height := self.Height - 3;
    Width := Height;
    Left := self.Width - Width - 3;
  end;
  SetEditRect;
end;

procedure TAutoDBBtnEdit.DoButtonClick(Sender: TObject);
begin
  if(Assigned(FOnBtnClick)) then
    FOnBtnClick(self);
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?