Функция объявлена следующим образом:

function ShellExecuteEx(IpExecInfо: PShellExecutelnfо):BOOL;

Функция возвращает false в случае ошибки. Единственным параметром функции является указатель на запись типа PShellExecutelnfo. Для нашей задачи интерес представляют следующие поля этой записи:

cbSize: DWORD

размер записи в байтах

Wnd: HWND

дескриптор окна приложения

lpVerb: PAnsiChar

вид операции ("ореп", "edit", "print", "explore*, "find")

в VCL Win32

и String в VCL .NET

lpFile: PAnsiChar

имя файла с путем

в VCL Win32

и String в VCL .NET

hlnstApp: HINST

дескриптор стартовавшего приложения или идентифи-

катор ошибки

nShow: Integer

режим отображения открываемого окна

Поле nShow указывает режим отображения открываемого окна при запуске выполняемого файла. Возможные значения режимов указаны выше в описании функции ShellExecuteEx. При работе с файлами документов значение nShow должно быть равно нулю.

Значения идентификаторов различных ошибок вы увидите в приведенном далее коде.

Рассмотренный ранее пример просмотра, редактирования и печати файла документа может при использовании функции ShellExecuteEx реализовываться в проекте VCL Win32 так (проект РShellExecuteEx в каталоге Browser на диске, приложенном к книге):

uses ShellAPI;
var SInfo: TShellExecutelnfо;

procedure TForml.ButtonlClick(Sender: TObject); begin

if OpenDialogl.Execute then begin SInfo.Wnd := Handle; SInfo.nShow := 0; if Sender = Buttonl

then SInfo.lpVerb := 'open'

else SInfo.lpVerb := 'edit'; SInfo.lpFile := PChar(OpenDialogl.FileName); SInfo.cbSize := sizeof (SInfo); if not ShellExecuteEx(@SInfo) then case SInfo.hlnstApp of

SE_ERR_FNF: ShowMessage('Файл не найден');
SE_ERR_PNF: ShowMessage('Путь не найден');
SE_ERR_ACCESSDENIED: ShowMessage('Доступ к файлу запрещен');
SE_ERR_OOM: ShowMessage('Не хватает памяти');

SE_ERR_DLLNOTFOUND: ShowMessage('Не найдена необходимая DLL'); SE_ERR_SHARE: ShowMessage ('-Файл захвачен другим пользователем'); SE_ERR_ASSOCINCOMPLETE: ShowMessage(

'Не полная информация о связанном с файлом приложении'); SE_ERR_DDETIMEOUT: ShowMessage(

'Истекло время на выполнение операции DDE');
SE_ERR_DDEFAIL: ShowMessage('Ошибочная операция DDE');
SE_ERR_DDEBUSY: ShowMessage('Операция DDE занята');

SE_ERR_NOASSOC: ShowMessage('Нет приложения, связанного с файлом'); end

else Button3.Enabled := true;
end;
end;

procedure TForml.Button3Click(Sender: TObject); begin

SInfo.lpVerb := 'print';
ShellExecuteEx (@SInfo);
end;

Процедура ButtonlClick является обработчиком событий OnClick одновременно кнопок Открыть и Редактировать. В начале этой процедуры заполняются поля Wnd, lpFile, nShow записи SInfo. Значение поля lpVerb задается в зависимости от того, на какой кнопке: Открыть или Редактировать совершен щелчок. После заполнения этих полей заполняется поле cbSize, указывающее размер записи. Затем вызывается функция ShellExecuteEx и анализируется значение поля hlnstApp. Если оно равно одному из идентификаторов ошибок, то пользователю выдается соответствующее сообщение.

Процедура Button3Click обработчик щелчка на кнопке Печать. Вряд ли эта процедура требует пояснений.


⇐ Предыдущая страница| |Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Май
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс