困扰了很久的问题,希望大家都来帮个忙,谢谢了!(200分)

  • 主题发起人 主题发起人 comerliang
  • 开始时间 开始时间
C

comerliang

Unregistered / Unconfirmed
GUEST, unregistred user!
我想找一个TEdit类的控件,只能输入整数或者数字。
其实这很好做到。只不过每次用到都要写代码,太麻烦了,很多网友建议我用maskedit,我觉得那东西不好用,想自己写个控件,鼓捣了几天也没成功。
希望大家帮帮忙,提供个控件。
谢谢了 !
 
呵,我写了一个,但还有一点BUG,你要不要。
 
以下是我写的一个TimeEdit控件,基本没有什么问题。你只要稍作修改即可。
unit ZhdyTimeEdit;

interface

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

type
TZhdyTimeEdit = class(TCustomEdit)
private
{ Private declarations }
protected
{ Protected declarations }
procedure KeyPress(var Key: Char); override;
procedure KeyDown (var Key: Word; Shift: TShiftState);override;
public
{ Public declarations }
constructor Create(AOwner:TComponent);override;
published
{ Published declarations }
property Text;
property onChange;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Zhdy Controls', [TZhdyTimeEdit]);
end;

{ TZhdyTimeEdit }


constructor TZhdyTimeEdit.Create(AOwner: TComponent);
begin
inherited;
Text:='00:00:00';
end;

procedure TZhdyTimeEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
if key=vk_delete then key:=0
else if key=vk_back then key:=0;
inherited;

end;

procedure TZhdyTimeEdit.KeyPress(var Key: Char);
var ss:integer;
begin
ss:=selstart;
if ss<=7 then sellength:=1;
if ss=0 then
begin
if not (key in ['0'..'2']) then key:='0';
end
else if ss=1 then
begin
if not (key in ['0'..'9']) then key:='0'
end
else if ss=2 then
begin
if not (key in [':']) then key:=':'
end
else if ss=3 then
begin
if not (key in ['0'..'5']) then key:='0'
end
else if ss=4 then
begin
if not (key in ['0'..'9']) then key:='0'
end
else if ss=5 then
begin
if not (key in [':']) then key:=':'
end
else if ss=6 then
begin
if not (key in ['0'..'5']) then key:='0'
end
else if ss=7 then
begin
if not (key in ['0'..'9']) then key:='0';
end
else if ss>=8 then
begin
key:=#0;
end;

inherited;

end;

end.
 
可以发给我吗?

我的信箱是:comerliang@163.com

谢谢了!
 
给你发了一个,请查收
 
新问题:
case Key of
#8,#13:inherited;
'0'..'9':
begin
I := Pos('.',Text);
if (FIpo > 0) and (I > 0) then
begin
S := Copy(Text,I+1,Length(Text)-I);
if (Length(S)>=FIpo) and (SelStart >= I) then
Key := #0 else inherited;
end
else
if (FIpo>0)and(SelStart>FLen-FIpo-2) then
Key := #0 else inherited;
end;
'.': if (Pos('.',Text) > 0)or(SelStart<Length(Text))or(FIpo=0)
then Key := #0 else inherited;
else Key := #0;
这个case语句里没有"Delete"键呀,我向加入“Delete”键怎么办?“delete”键为什么和“.”有冲突呢?
该怎么解决呀,请大侠们指点!!!
 
对此问题,下载一些控件就可以,你可以到www.51delphi.com,mydelphi.8u8.com,www.2cc.com里下载就可以了。
 
我记得有Delete对应的虚拟Key
vr_delete还是什么的?你查一下原程序中是怎么定义的
 
好象有个numberedit的控件
 
.keypress
begin
if key = #8 then
if lengtht(Ed_Int.text)=1 then Ed_Int.text:='0' else exit;
if ((key<#48) or (key>#57)) then key := #0;
 
VK_DELETE在KeyDown事件里面处理不就可以了,采用同样的方法继承一下
 
后退
顶部