Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bild in Image laden ohne Dateiendung anzugeben (https://www.delphipraxis.net/153214-bild-image-laden-ohne-dateiendung-anzugeben.html)

Danyel 25. Jul 2010 11:56

Delphi-Version: 2005

Bild in Image laden ohne Dateiendung anzugeben
 
Hi,
ich möchte in meinem Programm ein Bild in ein Image reinladen.
Hierzu drückt man in der Listbox auf einen Namen, wodurch der
Dateiname definiert wird.
Klicken wir also zB auf Danyel, soll er das Bild Danyel laden.
ABER um ein Bild zu laden, muss ich ja den vollständingen Namen angeben, heißt zB Danyel.jpg. Nun kann es aber vorkommen, dass ich Bilder mit verschiedenen Dateiendungen haben werde. Kann man das realisieren, dass er in einem bestimmten Ordner nach einer Datei such, die Danyel heißt, wobei man die Endung nicht angeben muss?

Delphi-Quellcode:
procedure TForm1.bildladen(name:string);
begin
      if fileexists(ExtractFilePath(Application.ExeName)+'\Data\images\'+name) then bild.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'\Data\images\'+name);
end;
Name wäre in diesem Falle zB Danyel

Matze 25. Jul 2010 12:20

AW: Bild in Image laden ohne Dateiendung anzugeben
 
Ja, das geht. Stichwort: Delphi-Referenz durchsuchenFindFirst. Da gibt es in der Code-Library auch einen Code: FindAllFilesFindAllFiles, den du dir anpassen kannst. Gibst du als Maske *.* an, spielt die Dateiendung keine Rolle.

Nur was machst du, wenn es "Danyel.jpg" und "Danyel.bmp" gibt?

Wenn man diese Bilder aus einer ListBox auswählen kann, würde ich an deiner Stelle die zugehörigen Pfadangaben z.B. in einer TStringList hinterlegen, die du mit der ListBox synchronisierst.

Das könnte grob so aussehen:

Delphi-Quellcode:
// Bild in ListBox einfügen
ListBox.Items.Add('Danyel');
StringList.Add('Pfad zum Bild');

// laden
Image.Picture.LoadFromFile(StringList[ListBox.ItemIndex]);
Oder so in der Art. Sinnvoller wäre es natürlich, die GUI von den Daten zu trennen, sprich eine Funktion/Methode zu schreiben, der du als Parameter die entsprechenden Indizes o.ä. übergibst.

Wobei man die Daten evtl. auch direkt den ListBox-Items zuweisen kann. Da bin ich mir nicht ganz sicher. Aber ein Feld wie "Data", wie man es von TTreeNode kennt, gibt es hier meines Wissens nicht.

Danyel 25. Jul 2010 12:38

AW: Bild in Image laden ohne Dateiendung anzugeben
 
Viele Dank :D
werde mir das gleich mal alles angucken ^^

Das mit dem Festen Pfad überlege ich mir noch, ist eigentlich ne sehr schöne Idee. (eigentlich soll man den Ordner, wo die Bilder später drinne sind, nicht bearbeiten, wird die Zielgruppe auch nicht tun :D )

EDIT
Interessant zu lesen bzw wieder was dazugelernt, dennoch werde ich es wohl doch nicht mehr brauchen und wie du bereits vorschlugst, feste Pfade bzw Dateiendungen vorgeben, das vereinfacht die Sache ungemein, bzw wirft nicht so viele Probleme auf, wenn man zB Danyel.jpg und Danyel.bmp hat, wie du sagtest.

Danke nochma, kann geclosed werden

himitsu 25. Jul 2010 12:57

AW: Bild in Image laden ohne Dateiendung
 
Wie kommt der Dateiname in die ListBox?

Intern speichert man sich zu dem Eintrag dann den vollständigen Namen.

PS: Was passiert, wenn es mal ein Danyel.jpg und ein Danyel.png gibt?

Matze 25. Jul 2010 13:02

AW: Bild in Image laden ohne Dateiendung
 
Zitat:

Zitat von himitsu (Beitrag 1037390)
Wie kommt der Dateiname in die ListBox?

Intern speichert man sich zu dem Eintrag dann den vollständigen Namen.

PS: Was passiert, wenn es mal ein Danyel.jpg und ein Danyel.png gibt?

Hast du meinen Beitrag gelesen? :mrgreen:

himitsu 25. Jul 2010 14:08

AW: Bild in Image laden ohne Dateiendung
 
nicht alle Zeilen :oops: (war zu schnell von deiner umfangreichen Signatur abgelenkt)

mkinzler 25. Jul 2010 15:33

AW: Bild in Image laden ohne Dateiendung anzugeben
 
Aber von festen Datenpfaden und vorallem von fest"gecodete" datenpfaden würde ich abraten

Matze 25. Jul 2010 15:36

AW: Bild in Image laden ohne Dateiendung anzugeben
 
Was mir noch auffällt ist, dass du in deinen Pfadangaben 2 aufeinander folgende Blackslashes haben wirst:

Delphi-Referenz durchsuchenExtractFilePath gibt bereits einen Pfad mit abschließendem Backslash zurück.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz