TheMagicalMuffinMan
TheMagicalMuffinMan

Reputation: 31

Error when changing TImage picture on click event

I have the following basic code :

procedure TForm4.shrek1Click(Sender: TObject);
begin
  shrek1.Picture.LoadFromFile('donkey.jpeg');
end;

Where shrek1 is a TImage, and donkey.jpeg is the image I want shrek1 to load when clicked.

donkey.jpeg is located in the same directory of literally every other related project file, yet when I attempt to run the code I get an error:

Exception class EFOpenError with message 'Cannot open file "\(removed directory for privacy)\donkey.jpeg". The system cannot find the file specified

What am I doing wrong?

Upvotes: 0

Views: 595

Answers (1)

Remy Lebeau
Remy Lebeau

Reputation: 596352

Always use absolute paths. Relative paths are relative to the calling processe's Current Working Directory, which can (and usually does) change value during the process's lifetime, and is not always what you expect.

If the JPG file is in the same folder as the your EXE, you can do this instead:

var
  AppPath: string;

procedure TForm4.shrek1Click(Sender: TObject);
var
  FileName: string;
begin
  FileName := AppPath+'donkey.jpeg'; // <-- make sure this path is accurate!
  shrek1.Picture.LoadFromFile(FileName);
end;

initialization
  AppPath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));

Upvotes: 3

Related Questions