Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка исключения. Исключение для ShellExecute 
V
    Опции темы
Novichek27
Дата 13.11.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 24.4.2010

Репутация: нет
Всего: 1



Приветствую всех форумчан. Есть вопрос относительно обработки исключений для ShellExecute.

открываю файл:

try
  ShellExecute(Handle,'open','D:\Folder\file.xls, nil, nil,SW_SHOWNORMAL);
  except on EFOpenError  //если файла нет на месте 
  do
  begin
  messagedlg('Файл не найден.', mtInformation, [mbOK], 0); //сообщение не появляется, т.е. в ответ на щелчок по кнопке ничего не происходит
end; 

Как указать дескриптор ShellExecute?

или нужно что-то другое?


PM   Вверх
CodeMonkey
Дата 13.11.2010, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



А с чего вы взяли, что системная функция ShellExecute возбуждает Delphi-вые исключения?

Смотрим справку:

Цитата
If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an int and compared to either 32 or the following error codes below.

Return code - Description
0 - The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND - The specified file was not found.
ERROR_PATH_NOT_FOUND - The specified path was not found.
ERROR_BAD_FORMAT - The .exe file is invalid (non-Win32 .exe or error in .exe image).
SE_ERR_ACCESSDENIED - The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE - The file name association is incomplete or invalid.
SE_ERR_DDEBUSY - The DDE transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL - The DDE transaction failed.
SE_ERR_DDETIMEOUT - The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND - The specified DLL was not found.
SE_ERR_FNF - The specified file was not found.
SE_ERR_NOASSOC - There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM - There was not enough memory to complete the operation.
SE_ERR_PNF - The specified path was not found.
SE_ERR_SHARE - A sharing violation occurred.


Хотите исключений - возбуждайте:
Код
Res := ShellExecute(Handle,'open','D:\Folder\file.xls', nil, nil,SW_SHOWNORMAL);
case Res of 
  ERROR_FILE_NOT_FOUND: raise EFOpenError.Create(Format('Файл %s не найден', ['D:\Folder\file.xls']));
  ...
end;


Впрочем, гораздо приятнее в этом плане выглядит ShellExecuteEx:

Цитата
Returns TRUE if successful; otherwise, FALSE. Call GetLastError for extended error information.


Тогда:
Код
if not ShellExecuteEx(...) then
  RaiseLastOSError;



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Novichek27
Дата 14.11.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 24.4.2010

Репутация: нет
Всего: 1



Спасибо CodeMonkey
Вопрос решен.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.