网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.查句柄知多少.
.数字随机排序.
.Delphi下的接口编程学习笔记(原.
.监视剪贴板内容.
.类,接口与动态链接库.
.Delphi深度探索-数据库明了的Act.
.COM程序编写入门(全文-3).
.一个从EXE、DLL文件中提取、存取.
.在DELPHI中用线程排序.
.創建一個簡單的"專家".
.MPEG音频压缩规格一览.
.用Delphi制作中国式报表.
.如何得到本机的ip地址!.
.在Delphi中调用CHM帮助文件.
.Delphi中实现文件拷贝的三种方法.
.firebird嵌入式数据库.
.控制面板的编程.
.自定义DataSet,并写入数据.
.在delphi7中利用mscomm控件编程.
.绑架窗体之Delphi版.

Delphi自带的SpinEdit控件太丑了,自己写一个替换它

发表日期:2006-2-4


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.
上一篇:quake2源码分析(一) 人气:4039
下一篇:控件移动类的实现之一 人气:4632
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐