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

Jer*_*dge 1 delphi dialog shortcut delphi-7

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

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

RRU*_*RUZ 6

你在这里运气不好,这个bug在QC 69533中报告过, 并在Delphi 2009更新3中得到修复.

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

只在调试器中引发异常,因为这样的代码用于检查验证文件名.

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

ValidPicture := FileExists(FullName) and ValidFile(FullName);
if ValidPicture then
try
 // here try to load the file even if is a shortcut(.lnk)

except //this exception is caught by the debugger.
  ValidPicture := False; 
end;
Run Code Online (Sandbox Code Playgroud)

解决方法

1)您可以将EInvalidGraphic例外添加到 exceptions list to ignore列表中.

在此输入图像描述

2)你可以写一个弯路(在这里你有一个样品),并实现自己的TOpenPictureDialog.DoSelectionChange方法(验证.lnk文件),因为正是在这些地方是由文件验证加载.

3)可以重写DoSelectionChange的方法TOpenPictureDialog使用插入器类,来验证文件中加载.

  TOpenPictureDialog= class (ExtDlgs.TOpenPictureDialog)
    procedure DoSelectionChange; override;
  end;
Run Code Online (Sandbox Code Playgroud)