我希望我的自定义错误消息显示而不是系统生成的错误消息.具体来说,在这种情况下,如果用户试图打开已经在使用的文件,我想捕获错误并显示我的消息,但系统总是打败我,并生成以下消息:"项目.. .raised异常类EFOpenError,消息'无法打开文件'文件路径和名称".进程无法访问该文件,因为它正被另一个进程使用'." 当我关闭此错误消息时,即显示我的消息.我想只显示我的信息.我不希望显示系统消息.有没有办法做到这一点?我的代码不起作用.
这是我的代码:
begin
//check if input file can be opened
try
if OpenDialog1.Execute then
begin
Application.ProcessMessages;
Memo1.Clear;
try
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
InputFile := TStringList.Create;
InputFile.LoadFromFile(OpenDialog1.FileName);
ActiveFileName := ExtractFileName(OpenDialog1.FileName);
lblActiveFileName.Caption := 'Active File: ' + ActiveFileName;
mmuDisplayClear.Enabled := True;
mmuAnalysisOptions.Enabled := True;
except on
EFOpenError do //if file does not exist or is in use
MessageDlgPos('File either does not exist or may be ' +
'in use!', mtError, [mbOK], 0, 300, 300);
end;
end;
finally
mmuDispInstructions.Enabled := True;
mmuDispData.Enabled := False; …Run Code Online (Sandbox Code Playgroud) 我在Delphi中编写了一个程序来计算,显示和保存Pascals的三角形,用于用户定义的行数.它工作正常(显示三角形,并允许我保存它),除了它最后出现访问冲突!这是消息:
模块"Project1.exe"中地址004031DB的访问冲突.读取地址00000000.
我在程序中有一个2D动态数组但是我在最后释放了内存(:= nil).为什么它仍然给我一个访问冲突?很沮丧!
我在档案中搜索了一个答案,但找不到合适的答案.任何帮助将不胜感激.
这是代码(我有点犹豫,因为有一些代码:
procedure TForm1.btnPTClick(Sender: TObject);
var
I, J, K, N, MidCol: integer;
PT: array of array of integer;
Row: string;
begin
K := StrToInt(lblNumRows.Text);
N := StrToInt(lblNumRows.Text);//# values in row = row number
try
//initiatlize the array
SetLength(PT, K, (N*2)-1);
for I := 0 to K-1 do
for J := 0 to (N*2-1) do
PT[I,J] := 0;
MidCol := (N*2 div 2)-1;//MidCol already 0-based
for I := 0 to K-1 do
begin
if (I = 0) …Run Code Online (Sandbox Code Playgroud) 我在表单上有两个编辑框,一个用于最小值,另一个用于用户需要输入的最大值.我希望在用户输入值时捕获可能的错误.一个可能的错误是最大值小于最小值.如果发生这种情况,我会提示错误消息.但是,即使用户想要在最小框中输入5并且在最大框中输入100,如果用户在最大框中输入100的"1",它也会显示错误消息在min框中输入了5.如何在出现错误消息之前允许用户输入整个值?
这是我的代码(我也捕获其他错误,但只有max <min错误似乎受到影响):
procedure TfrmAnalysisOptions.lbleConstraintsMaxChange(Sender: TObject);
var
I: integer;
Val, ValidEntry: string;
Chr: char;
RangeMin, RangeMax: Double;
const Allowed = ['0'..'9', '.'];
begin
Val := lbleConstraintsMax.Text;
//initialize values
ValidEntry := '';
ConstraintsMaxChange := '';
//value can contain only numerals, and "."
for I := 1 to Length(Val) do
begin
Chr := Val[I];
if not (Chr in Allowed) then
begin
MessageDlgPos('The value entered for the max value of the ' +
'constraint must contain only a numeral, a decimal ' + …Run Code Online (Sandbox Code Playgroud) Memo当用户在表单上输入错误的条目时,我会向用户添加错误消息.因此,如果没有错误消息,则没有条目Memo.我想让它Memo变得可见并在Save按下按钮时显示错误消息(如果有的话).如果没有任何错误消息,那么我希望表单能够在按下Save按钮时关闭.以下代码适用try finally end但不适用try except end,意味着使用except,它似乎跳过except块并且即使没有错误消息也不会关闭表单并且Memo清除.以下代码完全按照我的要求工作.很抱歉发布整个过程的代码,但我想知道为什么try except end不允许表单关闭.
procedure TfrmAnalysisOptions.btnSaveOptionsClick(Sender: TObject);
//save input and output options
var
I: integer;
Chr: char;
Temp, Val: string;
const Allowed = ['0'..'9', '.'];
const AllowedPlus = ['0'..'9', '.', '-'];
begin
ErrorMsgMemo.Clear;
ErrorMsgMemo.Visible := True;
//Populate memo with error messages if user makes mistakes
try
if (rgConstraintMinMax.ItemIndex = -1) then //if no radiobutton checked
begin …Run Code Online (Sandbox Code Playgroud) delphi ×4