procedure TForm1.Button1Click(Sender: TObject);
var
szFileName : array[0..49] of char;
szModuleName : array[0..19] of char;
iSize : integer;
begin
StrPCopy(szModuleName, 'NameOfModule');
iSize := GetModuleFileName(GetModuleHandle(szModuleName),szFileName,
SizeOf(szFileName));
if iSize > 0 then
ShowMessage('Имя модуля с полным путем: ' + StrPas(szFileName))
else
ShowMessage('Имя модуля не встречено');
end;
// Включить в Uses SysUtilsprocedure TMainForm.Button2Click(Sender: TObject);
var
AppDirectory, AppPathName: string;
begin
AppPathName := Application.ExeName;
AppDirectory := ExtractFilePath(AppPathName);
messageDlg('Имя программы '+ AppPathName+#13+
'Имя каталога программы '+ AppDirectory
,mtInformation,[mbOK],0);
end;
Вот перевод текста на русский язык:
Три из трех решений направлены на получение имени модуля или приложения. Вот разбивка каждого кода:
1. Валентин Озеров
Этот код использует функции GetModuleFileName и GetModuleHandle из Windows API для получения полного пути исполняемого файла (модуля) с конкретным именем (szModuleName). Если выполнение успешно, он отображает сообщение об ошибке с полным путем модуля.
Преимущества:
* Может получить конкретный модуль по его имени
Недостатки:
* Требует знания имени модуля
* Не может работать, если модуль не присутствует или неправильно ссылается
2. Андрей Иванов
Этот код использует функцию ParamStr, которая возвращает строку командной строки с индексом 0 (первым аргументом). В этом случае он предполагает, что приложение было запущено из командной строки и первый аргумент - имя модуля.
Преимущества:
* Простой и легко использовать
Недостатки:
* Работает только в том случае, если приложение было запущено из командной строки
3. Степанова Павла
Этот код использует свойство Application.ExeName, которое возвращает имя исполняемого файла (модуля), и функцию ExtractFilePath для извлечения пути каталога модуля.
Преимущества:
* Легко использовать и понимать
Недостатки:
* Работает только для текущего модуля приложения
В целом, лучшее решение зависит от вашей конкретной необходимости. Если вам нужно получить конкретный модуль по его имени, код Валентина Озерова может быть подходящим. Если вы ищете простой способ получения имени текущего модуля приложения, код Степановой Павлы - хорошим выбором.
Альтернативное решение можно использовать функцию ExtractFileName для извлечения имени файла (модуля) из полного пути, возвращенного свойством Application.ExeName. Вот пример:
procedureTMainForm.Button2Click(Sender:TObject);varAppPathName:string;beginAppPathName:=Application.ExeName;messageDlg('Имя программы '+ExtractFileName(AppPathName)+#13+'Имя каталога программы '+ExtractFilePath(AppPathName),mtInformation,[mbOK],0);end;
Этот код более компактен и достигает того же результата, что и оригинальное решение Степановой Павлы.
В статье описываются различные методы получения имени модуля в Delphi, включая использование функции GetModuleFileName и параметра ParamStr(0), а также способ получения пути к файлу приложения с помощью класса Application.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS