Delphi 在TOpenPictureDialog中浏览非图像时,如何避免调试器停止程序?

Delphi 在TOpenPictureDialog中浏览非图像时,如何避免调试器停止程序?,delphi,dialog,delphi-7,shortcut,Delphi,Dialog,Delphi 7,Shortcut,我正在使用TOpenPictureDialog来浏览图像。在调试模式下,当我在该对话框中浏览图片时,我碰巧在快捷方式(.lnk)上单击(而不是双击),调试器会中断我的程序,因为它捕获到一个异常,说它不是有效的文件格式 如何克服这个问题?我知道这只是在调试阶段,在最终的EXE中没有任何问题,但它变得非常烦人,因为我希望能够通过这些快捷方式。您在这里运气不好,此错误已在中报告,并已在中修复 VCL用于验证文件是否为有效映像的代码不会检查快捷方式文件(.lnk),因此VCL会认为哪个文件是有效映像,并

我正在使用TOpenPictureDialog来浏览图像。在调试模式下,当我在该对话框中浏览图片时,我碰巧在快捷方式(.lnk)上单击(而不是双击),调试器会中断我的程序,因为它捕获到一个异常,说它不是有效的文件格式


如何克服这个问题?我知道这只是在调试阶段,在最终的EXE中没有任何问题,但它变得非常烦人,因为我希望能够通过这些快捷方式。

您在这里运气不好,此错误已在中报告,并已在中修复

VCL用于验证文件是否为有效映像的代码不会检查快捷方式文件(.lnk),因此VCL会认为哪个文件是有效映像,并尝试加载该文件,然后引发EInvalidGraphic异常

只有在调试器中才会引发异常,因为这样的代码用于检查文件名是否有效

(仅显示部分真实代码,因为是VCL代码)

解决办法

1) 您可以将EInvalidGraphic异常添加到
异常列表以忽略
列表

2) 您可以编写迂回()并实现自己的
TOpenPictureDialog.DoSelectionChange
方法(验证
.lnk
文件),因为在这里对要加载的文件进行验证

  TOpenPictureDialog= class (ExtDlgs.TOpenPictureDialog)
    procedure DoSelectionChange; override;
  end;
3) 您可以使用插入器类覆盖
TOpenPictureDialog
DoSelectionChange
方法,以验证要加载的文件

  TOpenPictureDialog= class (ExtDlgs.TOpenPictureDialog)
    procedure DoSelectionChange; override;
  end;

您在这里运气不好,此错误已在中报告,并已在中修复

VCL用于验证文件是否为有效映像的代码不会检查快捷方式文件(.lnk),因此VCL会认为哪个文件是有效映像,并尝试加载该文件,然后引发EInvalidGraphic异常

只有在调试器中才会引发异常,因为这样的代码用于检查文件名是否有效

(仅显示部分真实代码,因为是VCL代码)

解决办法

1) 您可以将EInvalidGraphic异常添加到
异常列表以忽略
列表

2) 您可以编写迂回()并实现自己的
TOpenPictureDialog.DoSelectionChange
方法(验证
.lnk
文件),因为在这里对要加载的文件进行验证

  TOpenPictureDialog= class (ExtDlgs.TOpenPictureDialog)
    procedure DoSelectionChange; override;
  end;
3) 您可以使用插入器类覆盖
TOpenPictureDialog
DoSelectionChange
方法,以验证要加载的文件

  TOpenPictureDialog= class (ExtDlgs.TOpenPictureDialog)
    procedure DoSelectionChange; override;
  end;

您说这是在调试时发生的,所以很明显,调试器就在那里。使用它来追踪问题的根源。暂停程序并查看调用堆栈,找出谁报告了错误,以及评估了哪些条件以确定格式无效。(我想我已经知道原因了,但是你面前有一个调试器,我不知道。)我知道问题的原因,我不想修改对话框的代码或任何东西,问题是这个对话框是为了在你选择图像时预览它,但不管你在扩展过滤器中有什么,它仍然会显示快捷方式(.lnk),当单击时(甚至没有尝试打开它们),它会抱怨它不是一个有效的图像。我相信很多人都遇到过这个问题,必须设置一些属性或其他东西。将问题从designtime更改为调试时,而不是更改问题的复杂性!;-)@DavidHeffernan是的,这是我犯的一个愚蠢的错误,混淆了术语。你说这是在调试时发生的,所以你显然有调试器。使用它来追踪问题的根源。暂停程序并查看调用堆栈,找出谁报告了错误,以及评估了哪些条件以确定格式无效。(我想我已经知道原因了,但是你面前有一个调试器,我不知道。)我知道问题的原因,我不想修改对话框的代码或任何东西,问题是这个对话框是为了在你选择图像时预览它,但不管你在扩展过滤器中有什么,它仍然会显示快捷方式(.lnk),当单击时(甚至没有尝试打开它们),它会抱怨它不是一个有效的图像。我相信很多人都遇到过这个问题,必须设置一些属性或其他东西。将问题从designtime更改为调试时,而不是更改问题的复杂性!;-)@大卫·费弗南:是的,那是我的一个愚蠢的错误,混淆了术语。提出例外似乎是解决这个问题的最好办法