小编Ser*_*rge的帖子

在Delphi中显示自定义错误消息而不是系统错误消息

我希望我的自定义错误消息显示而不是系统生成的错误消息.具体来说,在这种情况下,如果用户试图打开已经在使用的文件,我想捕获错误并显示我的消息,但系统总是打败我,并生成以下消息:"项目.. .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

2
推荐指数
1
解决办法
1346
查看次数

成功运行后,Delphi中的访问冲突

我在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)

delphi

1
推荐指数
1
解决办法
1988
查看次数

即使在编辑框中输入整个值之前,也会进行错误检查

我在表单上有两个编辑框,一个用于最小值,另一个用于用户需要输入的最大值.我希望在用户输入值时捕获可能的错误.一个可能的错误是最大值小于最小值.如果发生这种情况,我会提示错误消息.但是,即使用户想要在最小框中输入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)

delphi

0
推荐指数
1
解决办法
418
查看次数

如何检查是否在Delphi中填充了备注

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

0
推荐指数
1
解决办法
1439
查看次数

标签 统计

delphi ×4