没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2005-06-24 09:26:00.000|阅读 1398 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
我发现Delphi下没有很好用的只能输入数字的控件。所以自己写了一个(D7)。
菜鸟一个,希望大家多多指点。呵呵。。。
unit ComerMaskEdit;
interface
uses
Windows, Messages, Graphics, Forms,
SysUtils, Classes, Controls, StdCtrls;
type
TComerMaskEdit = class(TEdit)
private
FMdNumber: string;
FIpo : Integer;
FLen : Integer;
procedure SetMdNumber(const Value: string);
procedure WMPaste(var Message: TMessage); message WM_PASTE;
{ Private declarations }
protected
procedure CreateWnd;override;
{ Protected declarations }
public
constructor Create(AOwner:TComponent);override;
procedure DoEnter(); override;
procedure DoExit(); override;
procedure KeyPress(var Key: Char); override;
procedure KeyDown (var Key: Word; Shift: TShiftState);override;
{ Public declarations }
published
property MdNumber:string read FMdNumber write SetMdNumber;
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Standard', [TComerMaskEdit]);
end;
{TComerMaskEdit}
constructor TComerMaskEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Font.Size :=12;
Font.Name:='宋体';
Font.Charset:=GB2312_CHARSET;
FMdNumber := '';
end;
procedure TComerMaskEdit.CreateWnd;
var
I, k : Integer;
S, Str : string;
begin
inherited;
if not Enabled then
Font.Color := clNavy;
Font.Size :=12;
Font.Name :='宋体';
Font.Charset :=GB2312_CHARSET;
if FMdNumber <> '' then
begin
I := Pos(',',FMdNumber);
if I > 0 then
begin
S := Copy(FMdNumber,1,I-1);
FIpo := StrToInt(Copy(FMdNumber,I+1,Length(FMdNumber)-I));
for k:=1 to FIpo do
Str := Str + '0';
Text := '.' + Str;
end
else
begin
S := FMdNumber;
FIpo := 0;
Text := '';
end;
MaxLength := StrToInt(S);
FLen := MaxLength;
imeMode := imClose;
end;
end;
procedure TComerMaskEdit.SetMdNumber(const Value: string);
var
S : string;
begin
if Value <> '' then
begin
S := StringReplace(Value,',','',[rfIgnoreCase]);
try
StrToInt(S);
except
Application.MessageBox('属性值设置不对!','错误',MB_OK+MB_ICONError);
FMdNumber := '';
Exit;
end;
end;
FMdNumber := Value;
end;
procedure TComerMaskEdit.DoEnter();
begin
inherited;
SelStart := 0;
end;
procedure TComerMaskEdit.DoExit();
begin
if (FIpo>0) and (Pos('.',Text)=0) then
Text := Text + '.' + StringOfChar('0',FIpo)
else
inherited;
end;
procedure TComerMaskEdit.KeyPress(var Key: Char);
var
I, k : Integer;
AfterDot, BeforSelStart : string;
//, AfterSelStart,
Str : string;
TmpText : string;
iSelStart: Integer;
//BeforComma, AfterComma : String;
begin
//如果有多个字符被选中
if SelLength > 0 then
SelStart := 0
else
begin
if FMdNumber <> '' then
begin
if (Length(Text)=0) and (FIpo>0) then
begin
for k:=1 to FIpo do
Str :=
Str + '0';
Text :=
'.' + Str;
end;
case Key of
#13:
inherited;
'-':
begin
if (SelStart<>0) or (Pos('-',Text)>0) then
Key := #0
else
//MaxLength := MaxLength + 1;
inherited;
end;
#8:
begin
I := Pos('.',Text);
if (I > 0) and (SelStart>I) then
begin
key := #0;
iSelStart := SelStart;
TmpText := Text;
BeforSelStart := Copy(TmpText,1,iSelStart-1);
Text := BeforSelStart +
Copy(TmpText,iSelStart+1,Length(TmpText)-iSelStart) + '0';
SelStart := iSelStart - 1;
end
else if (I > 0) and (SelStart=I) then
begin
key := #0;
iSelStart := SelStart;
SelStart := iSelStart - 1;
end
else
inherited;
end;
'0'..'9':
begin
I := Pos('.',Text);
//限制位数
if I > 0 then
begin
if SelStart = Length(Text) then
key := #0
else
begin
AfterDot := Copy(Text,I+1,Length(Text)-FIpo);
if Length(AfterDot) > FIpo then
key := #0
else if SelStart >=
I then
begin
iSelStart := SelStart;
TmpText := Text;
BeforSelStart := Copy(TmpText,1,iSelStart);
Text := BeforSelStart + Copy(TmpText,iSelStart+2,Length(TmpText)-iSelStart-1);
SelStart := iSelStart;
end
else
inherited;
end;
end
else if (I<=0) and (FIpo>0) then //这种情况基本不存在
begin
if Length(Text) >= FLen-FIpo-1 then
key := #0
else
inherited;
end
else //FIpo=0
inherited;
end;
'.':
begin
Key := #0;
if FIpo>0 then
SelStart := Pos('.',Text);
end;
else
Key := #0;
end;
end
else
//Key := #0;
inherited;
end;
end;
procedure TComerMaskEdit.KeyDown(var Key: Word; Shift: TShiftState);
var
I : Integer;
BeforSelStart : string;
TmpText : string;
iSelStart: Integer;
begin
//如果有多个字符被选中
if SelLength > 0 then
begin
Key := 0;
SelStart := 0;
end
else
begin
if FMdNumber <> '' then
begin
if Key=VK_DELETE then
begin
I := Pos('.',Text);
if (I > 0) and (SelStart>=I)
then
begin
key := 0;
iSelStart := SelStart;
TmpText := Text;
BeforSelStart := Copy(TmpText,1,iSelStart);
if (SelStart=Length(Text)) then
Text := BeforSelStart +
Copy(TmpText,iSelStart+2,Length(TmpText)-iSelStart-1)
else
Text := BeforSelStart +
Copy(TmpText,iSelStart+2,Length(TmpText)-iSelStart-1) + '0';
SelStart := iSelStart;
end
else if (I > 0) and (SelStart=I-1) then
begin
key := 0;
iSelStart := SelStart;
SelStart := iSelStart + 1;
end;
end
else if (Key=VK_TAB) or (Key=VK_LEFT) or (Key=VK_UP) or (Key=VK_RIGHT) or (Key=VK_DOWN)
or (Key=VK_END) or (Key=VK_HOME) then
inherited
else
Key := 0;
end
else
inherited;
end;
end;
procedure TComerMaskEdit.WMPaste(var Message: TMessage);
begin
if FMdNumber='' then
inherited;
end;
end.
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号