Delphi自带的SpinEdit控件太丑了,自己写一个替换它
来源:互联网 发布:腾讯云域名dns未生效 编辑:程序博客网 时间:2024/04/28 06:46
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.
- Delphi自带的SpinEdit控件太丑了,自己写一个替换它
- Delphi自带控件
- delphi XE2自带的皮肤控件
- c自带的排序函数qsort,再也不用自己麻烦写排序函数了
- 由于“浏览”控件的样式太丑,想把他换成图片,但是出问题了!!!
- 自己写的一个DELPHI 控制台程序
- 自己写了一个拍照的页面,但是保存的图片太模糊了。求大神帮忙看看
- 看漏了眼, 有一个VM叫Maxine,它也自带了一个调试器
- Delphi 自带GIF控件的动画图片加载和播放
- 写了一个很简单的,一个圆环闪烁的控件,用于自己gps定位
- 自己写了一个带placeHolder的textView,分享给大家
- Delphi 自带了 Base64 编解码的单元
- Delphi 自带了 Base64 编解码的单元
- 一个替换windows自带CMD的超级命令终端
- 导航条返回键带的title太讨厌了,怎么让它消失!
- 导航条返回键带的title太讨厌了,怎么让它消失?
- 自己配置了一天的opencv 从自带的库到编译成功的库写
- 一个北京妞儿写的经典的话,太现实了!
- 开始我的Blog
- 拍马屁能拍到如此的境界
- delphi的interface编程注意问题
- Automatic Transactions and .NET Framework Classes
- (JAVA)Regular Expression测试
- Delphi自带的SpinEdit控件太丑了,自己写一个替换它
- 将asp权限提到最高
- 利用C++Builder 6 中OLE自动化功能实现调用Word进行报表制作
- SAML简介(beegee译稿)
- 上午跑去单位将佛山公文交换联调了一下,下午继续闭关修炼(CA)
- IT人的通病,你占了几条?〔转自pconline〕
- 完成权限控制中的Group Administration
- 提高写代码的效率
- Struts例子的设计分析