При работе с файлами шрифтов в Delphi и использовании функции ShellExecuteEx для их открытия, пользователи могут столкнуться с ошибкой "The parameter is incorrect". В данной статье мы рассмотрим, как исправить эту ошибку, основываясь на материале, предоставленном пользователем.
Описание проблемы
Пользователь получил абсолютный PIDL (PIDL - Pointer Item Data List, указатель на список данных элементов) файла шрифта, но при попытке его открыть с помощью кода, использующего ShellExecuteEx, возникла ошибка "The parameter is incorrect". В коде не указаны дополнительные параметры, которые могли бы вызвать эту ошибку, но в контексте обновления указано, что PIDL получается через сложный процесс взаимодействия с интерфейсами IShellFolder.
Подтвержденный ответ
Исправление ошибки заключается в том, что параметр lpVerb (строка, указывающая действие, которое должно быть выполнено) в структуре SHELLEXECUTEINFO не должен быть задан как "Open". Вместо этого, lpVerb следует оставить пустым или установить в nil, чтобы ShellExecuteEx выполнил действие по умолчанию для файла шрифта. По умолчанию, если не указано другое, используется действие "open", но если оно не доступно, система использует первое вербальное действие, перечисленное в реестре. В случае с файлами шрифтов, у которых по умолчанию нет зарегистрированного действия "Open", оставление lpVerb пустым позволит выполнить действие по умолчанию, которое фактически доступно для данного типа файлов.
Пример кода
var
ShExeInfo: TShellExecuteInfo;
begin
ZeroMemory(@ShExeInfo, SizeOf(ShExeInfo));
ShExeInfo.cbSize := SizeOf(ShExeInfo);
// ShExeInfo.lpVerb := 'Open'; // Удаление этой строки или ее комментарий
ShExeInfo.lpIDList := FontPIDL;
ShExeInfo.nShow := SW_SHOWNORMAL;
ShExeInfo.fMask := SEE_MASK_IDLIST;
end;
ShellExecuteEx(@ShExeInfo);
Альтернативный ответ
В альтернативном ответе пользователь предоставил пример кода, который в итоге оказался некорректным для решения задачи, так как в нем использовались дополнительные параметры и изменения, не относящиеся к сути проблемы. Ключевым моментом, на который обратил внимание пользователь @DavidHeffernan, является то, что изменение в коде заключается исключительно в отсутствии назначения параметра lpVerb или его установке в пустую строку, что было подтверждено последующими комментариями пользователя.
Общие рекомендации для работы с ShellExecuteEx в Delphi
Убедитесь, что вы правильно инициализируете структуру SHELLEXECUTEINFO, включая установку cbSize.
Если используете PIDL для открытия файла, установите fMask в SEE_MASK_IDLIST.
Не назначайте строку для lpVerb для выполнения действия по умолчанию для файла или установите ее в пустую строку.
Проверьте, что все другие параметры структуры заполнены корректно.
Следуя этим простым рекомендациям, вы сможете избежать ошибки "The parameter is incorrect" при работе с ShellExecuteEx в Delphi.
Исправление ошибки 'The parameter is incorrect' при открытии файла шрифта в Delphi с использованием ShellExecuteEx.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.