Знай путь образа

Я новичок в программировании, и у меня есть игра (например, Flappy Bird). В моем проекте мне обычно приходится менять изображение, поэтому в моей основной форме у меня есть TImage. *Мой вопрос: КАК Я МОГУ ТОЧНО УЗНАТЬ, ГДЕ ПУТЬ ИЗОБРАЖЕНИЯ, конечно, я использую Image1.Picture.LoadFromFile

пример: у меня есть - имя изображения: 'Scene1.bmp'; - TForm1.Button1Click(Отправитель: TObject);

*Миссия: когда пользователь нажимает кнопку, изображение загружается из файла «LoadFromFile», чтобы установить для Scene1.bmp значение TImage.

Пожалуйста, помогите мне! Большое спасибо!


person Johnny    schedule 16.04.2017    source источник
comment
Вы пишете свою программу установки, чтобы скопировать файл в подпапку ProgramData. Найдите SO или MSDN для получения подробной информации об этом. F.ex. это   -  person Tom Brunberg    schedule 16.04.2017
comment
Я все еще чувствую себя расплывчато. Можешь ли ты выразиться яснее?   -  person Johnny    schedule 16.04.2017
comment
Вы (или ваша программа установки) должны решить, где будут храниться ваши изображения. Используйте четко определенное местоположение, которое можно запросить с помощью Windows API, например, подкаталог (который создается вашим установщиком) пользовательской папки ProgramData. Взгляните на ShGetFolderPath или подобные функции, чтобы узнать, где это находится. Вы также можете хранить их в каталоге программы.   -  person Rudy Velthuis    schedule 16.04.2017
comment
Если ты не знаешь, где он, какие у нас шансы?   -  person David Heffernan    schedule 16.04.2017
comment
Где вы в последний раз видели, что ваш файл изображения Scene1.bmp?   -  person Free Consulting    schedule 16.04.2017


Ответы (2)


Вы можете использовать папку (или подпапку) EXE-файла вашего приложения для хранения файла Scene1.bmp.

В VCL у вас есть глобальный объект Application типа TApplication. Вы можете использовать свойство Application.ExeName, чтобы получить имя исполняемого файла приложения, включая информацию о пути. См. документацию.

Затем с помощью TPath.GetDirectoryName вы можете извлечь части диска и каталога. См. эту документацию.

Так, например, путь к подпапке с именем Sub равен TPath.GetDirectoryName(Application.ExeName)+'\Sub';.

Таким образом вы можете создать полный путь и имя файла и использовать его в LoadFromFile.

person user3384674    schedule 16.04.2017

Когда вы обращаетесь к файлу в своем приложении только с помощью имени файла (например, «Scene1.bmp»), ваше приложение будет искать файл по пути исполняемого файла вашего приложения как путь по умолчанию вашего приложения, но путь по умолчанию может быть изменен по некоторым причинам, вы можете установить путь по умолчанию вашего приложения с помощью функции SetCurrentDir и получить путь по умолчанию с помощью функции GetCurrentDir

Каждый процесс имеет «Текущий каталог» в качестве пути по умолчанию, и его можно изменить, поэтому вы всегда должны работать с полным адресом файла, который хотите использовать.

Вы можете получить полный путь к exe-файлу вашего приложения из поля ExeName класса Application:

var
 MyApplicationFullPath : String;
begin
 MyApplicationFullPath := Application.ExeName;
end;

С помощью функции ExtractFilePath вы можете получить путь без имени файла исполняемого файла вашего приложения, фактически адрес папки исполняемого файла, а затем вы можете использовать этот адрес для работы с файлами помимо вашего исполняемого файла, например:

 Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Scene1.bmp')

Вы можете быть уверены, что «Scene1.bmp» будет найден, и путь по умолчанию вашего приложения не имеет значения.

КАК Я МОГУ ТОЧНО ЗНАТЬ, ГДЕ ПУТЬ ИЗОБРАЖЕНИЯ

Текущий каталог приложения + 'Scene1.bmp':

ImageFullAddress := GetCurrentDir + 'Scene1.bmp'
person G3ntle_Man    schedule 16.04.2017
comment
и как я могу подключить строку CurrentDir в PlaySound('Path',0,SND_ASYNC)? - person Johnny; 21.04.2017
comment
@Johnny PlaySound(PChar(GetCurrentDir + 'MyFile'), 0,SND_ASYNC); - person G3ntle_Man; 22.04.2017