![]() |
Pfadangaben bei Image-Dateien
Hallo, wie kann ich dafür sorgen, dass er die Bilddatei findet, egal an in welchem Ordner der Ordner steckt?
Delphi-Quellcode:
Dachte eigentlich, dass Delphi in dem Ordner sucht, wo auch das Projekt selbst gespeichert ist... tut er aber nicht. Wie kann ich das umgehen`?
Image1.Picture.LoadFromFile('\Spielkarten\Spielkarte_1.jpg');
|
AW: Pfadangaben bei Image-Dateien
Nur so nebenbei: Du gibst hier keinen relativen Pfad an, sondern einen Root-Pfad im aktuellen Laufwerk!
Das aktuelle Laufwerk wird aus dem aktuellen Pfas ermittelt, auf den sich dir (richtigen) relativen Pfade beziehen. Das "aktueile Laufwerk" für das aus der IDE gestartete Projekt kann über "Start - Parameter - Arbeitsverzeichnis" eingestellt werden. Falls da nichts steht, wird das aktuelle Verzeichnis der IDE genommen. Das kann sich aber während der Arbeit in der IDE schon mal ändern. |
AW: Pfadangaben bei Image-Dateien
Hmm..
Wenn Du nur willst, das die Bilder aus einem Unterordner deines Programmverzeichnisses geladen werden, dann nutze
Delphi-Quellcode:
ExtractFilePath(ParamStr(0)) + 'Spielkarten\Spielkarte_1.jpg'
Somit ist es egal, wo dein Programmverzeichnis ist und was aktuell unter 'Arbeitsverzeichnis' eingetragen wird. |
AW: Pfadangaben bei Image-Dateien
Zitat:
Ansonsten solltest Du für die Speicherung die Standardverzeichnisse, bzw. deren Unterverzeichnisse nutzen. z.B. CSIDL_COMMON_APPDATA C:\ProgramData CSIDL_COMMON_DOCUMENTS C:\Users\Public\Documents CSIDL_LOCAL_APPDATA C:\Users\xxxxx\AppData\Local Dann hast Du die Chance, daß dein Programm auf den meisten Windows-Rechnern problemlos läuft. Gruß K-H |
AW: Pfadangaben bei Image-Dateien
Also egal in welchem Ordner ist es ja nun nicht, sondern die Dateien befinden sich ja immer relativ zum Anwendungsverzeichnis.
Code:
Diese Dateien sind also ein fester Bestandteil der Anwendung und somit per Definition eine Ressource.
.\Anwendung.exe
.\Spielkarten\Spielkarte1.jpg .\Spielkarten\Spielkarte2.jpg ... Ressourcen können sich direkt in der Anwendung befinden oder eben auch getrennt vorliegen. Am sinnvollsten definiert man das auch so in seinem Programm
Delphi-Quellcode:
und in der Anwendung brauche ich dann nur noch
unit Unit1;
interface type Resources = class sealed private const SpielkartenFolder = 'Spielkarten'; Spielkarten: array [ 0 .. 7 ] of string = ( {} 'Spielkarte1.jpg', {} 'Spielkarte2.jpg', {} 'Spielkarte3.jpg', {} 'Spielkarte4.jpg', {} 'Spielkarte5.jpg', {} 'Spielkarte6.jpg', {} 'Spielkarte7.jpg', {} 'Spielkarte8.jpg' ); private class function GetAppFolder: string; static; class function PathCombine( const PartA, PartB: string ): string; overload; class function PathCombine( const Parts: array of string ): string; overload; class function GetSpielkarte( const Index: Integer ): string; static; class property AppFolder: string read GetAppFolder; public class property Spielkarte1: string index 0 read GetSpielkarte; class property Spielkarte2: string index 1 read GetSpielkarte; class property Spielkarte3: string index 2 read GetSpielkarte; class property Spielkarte4: string index 3 read GetSpielkarte; class property Spielkarte5: string index 4 read GetSpielkarte; class property Spielkarte6: string index 5 read GetSpielkarte; class property Spielkarte7: string index 6 read GetSpielkarte; class property Spielkarte8: string index 7 read GetSpielkarte; end; implementation uses SysUtils; { Resources } class function Resources.GetAppFolder: string; begin Result := ExtractFilePath( ParamStr( 0 ) ); end; class function Resources.GetSpielkarte( const Index: Integer ): string; begin Result := PathCombine( [ AppFolder, SpielkartenFolder, Spielkarten[ index ] ] ); end; class function Resources.PathCombine( const PartA, PartB: string ): string; begin Result := IncludeTrailingPathDelimiter( PartA ) + PartB; end; class function Resources.PathCombine( const Parts: array of string ): string; var I: Integer; begin Result := Parts[ 0 ]; for I := 1 to high( Parts ) do begin Result := PathCombine( Result, Parts[ I ] ); end; end; end.
Delphi-Quellcode:
aufrufen.
Image1.Picture.LoadFromFile( Resources.Spielkarte1 );
(Ist schon lange her, aber
Delphi-Quellcode:
kennt Delphi 7 wohl noch nicht :stupid:)
class property
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz