Добрый вечер!
В настоящее время я нахожусь на первых этапах разработки нового приложения в Firemonkey. Это мой первый опыт работы с Firemonkey, но у меня есть опыт работы с Delphi несколько лет.
Пока у меня есть внешнее приложение, которое извлекает значок из exe-файла и затем сохраняет его в файл как BMP. Я закодировал возможность передавать параметр в это приложение (которое предоставляет строковое значение, чтобы сообщить ему, где находится .exe для извлечения). Он был построен в VCL, так как я хочу использовать фреймворк FireMonkey в основном для 3D-функций, но также, если захочу, я смогу расширить его на Mac в будущем. Внешнее приложение работает правильно, поэтому код не нуждается в настройке.
У меня проблема с передачей параметра из моего приложения firemonkey. Я использую настроенный модуль "fOpen", который позволяет передавать параметры;
unit fOpen;
interface
uses
{$IFDEF MSWINDOWS}
Winapi.ShellAPI, Winapi.Windows;
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
Posix.Stdlib;
{$ENDIF POSIX}
type
TMisc = class
class procedure Open(sCommand, Params: string);
end;
implementation
class procedure TMisc.Open(sCommand, Params: string);
begin
{$IFDEF MSWINDOWS}
ShellExecute(0, 'OPEN', PChar(sCommand), PChar(Params), '', SW_SHOWNORMAL);
{$ENDIF MSWINDOWS}
{$IFDEF POSIX}
_system(PAnsiChar('open ' + AnsiString(sCommand)));
{$ENDIF POSIX}
end;
end.
Как вы можете видеть, я добавил переменную "Params" в isdef MSWINDOWS.
В моей форме с firemonkey есть 2 кнопки. 1 из них выполняет TOpenDialog и выводит выбранное имя файла в TEdit. Другая кнопка выполняет внешнее приложение (которое извлекает значок), а затем загружает растровое изображение, которое было сохранено в TImageControl.
Вот код, который я пытаюсь использовать;
fOpen.TMisc.Open('HypExIcon.exe', '"' + edit1.Text +'"');
Проблема в том, что первая строка, в которой должен выполняться файл с параметром, на самом деле не работает так, как задумано. Он даже не выполняет файл вообще (то есть, нет никаких признаков запуска приложения, как должно быть). Однако, если я изменю это на это ...
fOpen.TMisc.Open('HypExIcon.exe', 'C:\Windows\Notepad.exe');
... он функционирует, как и ожидалось, выполняя внешнее приложение и создавая значок, включенный в поле параметра. Я пытался использовать PChar('"' + Edit1.text + '"')
, а также аналогичную функцию PWideChar
, но ни одна из них не устранила проблему.
Я уверен, что это что-то чрезвычайно простое, что мне здесь не хватает. Я так привык использовать PChar
или PWideChar
для такого рода вещей в VCL, что это отбросило меня.
Есть идеи?