关于MASKEDIT的异常处理!(急!)(100分)

  • 主题发起人 主题发起人 diablohack
  • 开始时间 开始时间
D

diablohack

Unregistered / Unconfirmed
GUEST, unregistred user!
TMaskEdit控件不是很好用!
问题:
我动态定义了一个'00-00-000;0;1'这样一个mask,如果在TMaksEdit的界面实例对象的输入框中
敲入回车或者别的什么非数字符号时就会报:'EAccessViolation'错误,非常可恶!我试图
写了一个截获错误的方法:MyException
if E is EDbEditError then
begin
if TComponent(Sender).Name = 'etPrNbr' then
Showmessage(TComponent(Sender).Name + ' : 端子编号输入错误')
else
inherited;
end
else
inherited;
(并且在form 的OnCreate中:Application.OnException := MyException;),
但是每次就是先报delphi的系统错误,然后我的错误message才出来
请问:我如何能屏蔽该讨厌的系统异常!我这样写错误在哪里?
 
是你的 Mask 有问题吧,最后一个“1”,是何意?
最后一个字符的意思是空格用“1”表示,这合适吗?把它改成空格“ ”。
在Delphi开发环境中运行程序,输入非法时,是会引发例外,
但直接运行可执行程序时,不会引发例外,所以不用担心。
但是,MaskEdit在输入非法时会出现默认英语提示:
”Invalid Input Value,use escape key to abandon changes“.
如果你不喜欢这一提示,可以将它改成中文,这一信息在以下单元中定义:
Delphi5/source/vcl/consts.pas
改成中文后,重新编译该单元应该就可以了。
 
其实我就想把
”Invalid Input Value,use escape key to abandon changes“.
屏蔽掉!
 
在TCustomMaskEdit控件下继承一个新的类,重载它的ValidateError方法,自己写提示或处理!
unit Unit1;

interface

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

type
TMyMaskEdit=Class(TCustomMaskEdit)
protected
procedure ValidateError; Override;
end;
TForm1 = class(TForm)
MaskEdit1: TMaskEdit;
procedure FormCreate(Sender: TObject);
private
MaskEdit2: TMyMaskEdit;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TMyMaskEdit }

procedure TMyMaskEdit.ValidateError;
begin
MessageBeep(0);
ShowMessage('My self error message!');
Abort;//最好有这句,可以中止操作比如Exit.
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MaskEdit2:=TMyMaskEdit.Create(Self);
MaskEdit2.Parent:=Self;
MaskEdit2.EditMask:=MaskEdit1.EditMask;
end;

end.
 
上面也是一种做法!但现在的讨论可能不是当初的了。
 
多人接受答案了。
 
后退
顶部