程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi自帶的SpinEdit控件太丑了,自己寫一個替換它

Delphi自帶的SpinEdit控件太丑了,自己寫一個替換它

編輯:Delphi
unit UpDownEdit; interface   uses   Windows, SysUtils, Classes, Controls, StdCtrls, ComCtrls, Messages;   type   TUpDownEdit = class(TCustomControl)   private     { Private declarations }     UpDown: TUpDown;     Edit: TEdit;     FMin: Integer;     FMax: Integer;     FOnChange: TNotifyEvent;     FPosition: Integer;     procedure WMSize(var Msg: TWMSize); message wm_Size;     procedure SetMax(const Value: Integer);     procedure SetMin(const Value: Integer);     procedure EditChange(Sender: TObject);     procedure EditKeyPress(Sender: TObject; var Key: Char);     procedure UpDownClick(Sender: TObject; Button: TUDBtnType);     procedure SetPosition(const Value: Integer);   protected     { Protected declarations }   public     { Public declarations }     constructor Create(AOwner: TComponent); override;     destructor Destroy; override;   published     { Published declarations }     property Max: Integer read FMax write SetMax;     property Min: Integer read FMin write SetMin;     property Position: Integer read FPosition write SetPosition;     property OnChange: TNotifyEvent read FOnChange write FOnChange;     end;   procedure Register;   implementation   procedure Register; begin   RegisterComponents('Standard', [TUpDownEdit]); end;   { TUpDownEdit }   constructor TUpDownEdit.Create(AOwner: TComponent); begin   inherited Create(AOwner);   SetBounds(0, 0, 57, 21);   Edit := TEdit.Create(Self);   Edit.Left := 0;   Edit.Top := 0;   Edit.Width := 40;   Edit.Align := alLeft;   Edit.Parent := self;   Edit.Text := '0'; //  SetWindowLong(Edit.Handle, GWL_STYLE, GetWindowLong(Edit.Handle, GWL_STYLE) or ES_NUMBER);     UpDown := TUpDown.Create(self);   UpDown.Height := Height; //20;   UpDown.Width := 14;   UpDown.Left := Edit.Width + 1;   UpDown.Parent := self;   FMin := 0;   FMax := 100;     Edit.OnChange := EditChange;   Edit.OnKeyPress := EditKeyPress;   UpDown.OnClick := UpDownClick; end;   destructor TUpDownEdit.Destroy; begin   Edit.Free;   UpDown.Free;   inherited; end;   procedure TUpDownEdit.EditChange(Sender: TObject); begin   UpDown.Position := StrToIntDef(Edit.Text, 0);   FPosition := UpDown.Position;   if Assigned(FOnChange) then     FOnChange(Self); end;   procedure TUpDownEdit.EditKeyPress(Sender: TObject; var Key: Char); var   s: set of char;   i: integer;   Str, Text: string; begin   s := [#8, '0'..'9'];   if Key = #8 then exit;     if not (Key in s) then   begin     Key := #0;     Exit;   end;   //控制輸入數字的大小   if TEdit(Sender).SelLength > 0 then   begin     Text := TEdit(Sender).Text;     Str := Copy(Text, 1, TEdit(Sender).SelStart - 1)       + Key +       Copy(Text, TEdit(Sender).SelStart + TEdit(Sender).SelLength + 1, Length(Text));     i := StrToInt(Str);     if i > FMax then     begin       Key := #0;       Exit;     end;   end   else     if StrToInt(TEdit(Sender).Text + Key) > FMax then     begin       Key := #0;       Exit;     end     else       if StrToInt(TEdit(Sender).Text + Key) < FMin then       begin         Key := #0;         Exit;       end;       end;   procedure TUpDownEdit.SetMax(const Value: Integer); begin   FMax := Value;   UpDown.Max := FMax;   if StrToIntDef(Edit.Text, 0) > FMax then   begin     UpDown.Position := FMax;     Edit.Text := IntToStr(FMax);     FPosition := UpDown.Position;   end; end;   procedure TUpDownEdit.SetMin(const Value: Integer); begin   FMin := Value;   UpDown.Min := FMin;   if StrToIntDef(Edit.Text, 0) < FMin then   begin     UpDown.Position := FMin;     Edit.Text := IntToStr(FMin);     FPosition := UpDown.Position;     if Assigned(FOnChange) then       FOnChange(Self);   end; end;   procedure TUpDownEdit.SetPosition(const Value: Integer); begin   if (Value >= FMin) or (Value <= FMax) then   begin     FPosition := Value;     UpDown.Position := FPosition;     Edit.Text := IntToStr(FPosition);     if Assigned(FOnChange) then       FOnChange(Self);   end; end;   procedure TUpDownEdit.UpDownClick(Sender: TObject; Button: TUDBtnType); begin   if Max = 0 then   begin     Max := 100;     UpDown.Max := Max;   end;   UpDown.Min := Min;   Edit.Text := IntToStr(UpDown.Position);   Edit.SetFocus;   Edit.SelectAll;   if Assigned(FOnChange) then     FOnChange(Self);   FPosition := UpDown.Position; end;   procedure TUpDownEdit.WMSize(var Msg: TWMSize); begin     Edit.Width := Width - 15;   UpDown.Left := Edit.Width + 1;   UpDown.Height := Height;   inherited;   end;   end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved