Как избежать отладчика, останавливающего мою программу при просмотре не изображения в TOpenPictureDialog? - PullRequest
1 голос
/ 14 декабря 2011

Я использую TOpenPictureDialog для просмотра изображений. В режиме отладки, когда я просматриваю в этом диалоговом окне изображение и случайно нажимаю (а не двойной щелчок) ярлык (.lnk), отладчик прерывает мою программу, потому что он перехватывает исключение, говоря, что это недопустимый файл. формат.

Как это побороть? Я знаю, что это только во время отладки, и у меня нет проблем в финальном EXE, но это становится очень раздражающим, потому что я хотел бы иметь возможность пройти через эти ярлыки.

1 Ответ

6 голосов
/ 14 декабря 2011

Вам не повезло, эта ошибка была зарегистрирована в QC 69533 и исправлена ​​в обновлении 3 Delphi 2009 .

Код, используемый 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;

Обходные

1) Вы можете добавить исключение EInvalidGraphic в список exceptions list to ignore.

enter image description here

2) вы можете написать обход ( здесь у вас есть образец ) и реализовать свой собственный метод TOpenPictureDialog.DoSelectionChange (проверка файлов .lnk), потому что здесь производится проверка файлов для загрузки.

3) вы можете переопределить DoSelectionChange метод TOpenPictureDialog с помощью класса interposer для проверки загружаемых файлов.

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