Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrere fast gleichnahmige Jpg fast gl.namig. TImages zuweis (https://www.delphipraxis.net/145322-mehrere-fast-gleichnahmige-jpg-fast-gl-namig-timages-zuweis.html)

Fussel9 29. Dez 2009 21:04


mehrere fast gleichnahmige Jpg fast gl.namig. TImages zuweis
 
Hi sorry aber mir ist echt kein passender Titel eingefallen :)

Ich möchte gerne das mein programm eine Zufallszahl erzeugt, diese soll dann an den LoadFromFile pfad angehengt werden...
KlarText: Zufällige Nr -> 6
........... -> Lade Bild KarteNr.G.jpg

Ich hab da schon mal was versucht, aber so klappts nicht, denn hier müsste ich als Parameter übergeben:

Delphi-Quellcode:
Austeilen([Image1],2);
was ganz nebenbei auch noch zu ner fehlermeldung führt (zugriffsverletzung)...
Haben möchte ich:
Delphi-Quellcode:
Austeilen([Image],2);
hat jemand einen vorschlag?
Anbei mein Versuch...

Delphi-Quellcode:
procedure TFormMain.Austeilen(Card: array of TImage; prunde: Integer);
var
  i: Integer;
begin
for i := 1 to prunde do
  begin
    Card[i].Picture.LoadFromFile(X+'CardRED0'+IntToStr(i)+'.jpg');
  end;
end;

geskill 29. Dez 2009 21:24

Re: Prozedur, die einem TImage Extr.FilePath+Name+Lauf+.jpg.
 
Hi,
ist die jeweilige Instanz aus dem TImage Array erstellt worden?
Also: Image1 := TImage.Create();

Ich würde vorher mit FileExists() prüfen ob die Datei existiert.

Bei LoadFromFile() steht eine Variable X und auch sonst um wirklich zu sagen woran der Fehler liegt fehlt ein bisschen Quellcode. So eine Übersicht wäre nicht schlecht.

Grüße

Fussel9 29. Dez 2009 21:42

Re: Prozedur, die einem TImage Extr.FilePath+Name+Lauf+.jpg.
 
Was fehlt denn ?
Also was brauchst du noch..


und die Variable im LoadFromFile brauch ich ja...
Es gibt im Ordner
verschiedene dateien im Ordner (Globale Variable X = ExtractFilePath(ParamStr(0)); ) die alle vom Namen her durchnummeriert sind...

Beispiel
CardRED01.jpg
CardRED02.jpg
CardRED03.jpg
ect.

Matze 29. Dez 2009 21:52

Re: Prozedur, die einem TImage Extr.FilePath+Name+Lauf+.jpg.
 
Hallo,

die Frage ist eher was fehlt dir, was brauchst du, was willst du? Ganz verstanden habe ich es nicht, dennoch ein paar Hinweise:

An deiner Stelle würde ich die Dateinamen in einem Array verwalten. Das hat zum Einen den Vorteil, dass du die Dateinamen beliebig wählen kannst und zum Anderen leichten Zugriff auf die Dateinamen hast:

Delphi-Quellcode:
const CardImgFilenames: array[0..5] of string = (
  'CardRED01.jpg', 'CardRED02.jpg', 'CardRED03.jpg',
  'CardBLACK01.jpg', 'CardBLACK02.jpg', 'CardBLACK03.jpg'
);
Dann kannst du eine Zufallszahl erzeugen:

Delphi-Quellcode:
Num := Random(6);
Und dir daraus den Dateinamen zusammen basteln:

Delphi-Quellcode:
Filepath := ExtractFilePath(ParamStr(0)) + CardImgFilenames[Num];
Dann machst du dir daraus eine Funktion und fertig.

Wenn du nur ein einziges TImage-Array hast, würde ich das übrigens nicht als Parameter übergeben, sondern nur den Index des Bildes (ImgNum). Dann kannst du darauf zugreifen wie eben gezeigt:

Delphi-Quellcode:
ImgArray[ImgNum].Picture.LoadFromFile(Filepath);
Grüße, Matze

Edit: Bitte ändere noch den Titel. Sonst weiß keiner, worum es hier geht.

geskill 29. Dez 2009 21:56

Re: Prozedur, die einem TImage Extr.FilePath+Name+Lauf+.jpg.
 
Jetzt müsste ich den Fehler gefunden habe, wenn du die Prozedur mit nur einer Bild Komponente aufrufst sieht das Array so aus:

Array[0] = Image1

Du startest aber mit der Schleife schon bei 1 das geht aber schief, da im Array insgesamt nur 1 Element ist.

sx2008 29. Dez 2009 22:03

Re: Prozedur, die einem TImage Extr.FilePath+Name+Lauf+.jpg.
 
Zitat:

Zitat von Fussel9
Ich möchte gerne das mein programm eine Zufallszahl erzeugt, diese soll dann an den LoadFromFile pfad angehengt werden...

Warum schreibst du nicht, dass du ein Kartenspiel programmieren möchtest?
Poker, 17&4, welches soll es denn sein?
Schreib doch einfach, was du letztendlich erreichen möchtest.
Mit deinem wirren Text lockst du hier viele auf die falsche Fährte.
Bei einem Kartenspiel kannst du die Bilder alle Spielkarten ohne weiteres in sortierter Reihenfolge laden
und dann gezielt durch "Mischen" in Unordnung bringen.
Eine Spielkarte besteht ja nicht nur aus ihrem Bild, sondern hat auch einen Namen und weitere Eigenschaften (rot oder schwarz, Kreuz|Herz|Pik|Karo).
Daher sollten die Kartendaten in einem Record oder noch besser in einer Klasse gespeichert werden.

Fussel9 29. Dez 2009 22:03

Re: Prozedur, die einem TImage Extr.FilePath+Name+Lauf+.jpg.
 
ok danke mal schaun wie weit ich komm...

was glaub ich noch nicht ganz klar geworden ist ist wohl folgendes:

Ich hab 20 Image Komponenten die heißen alle Card1,Card2,Card3,ect.
denen will ich automatisch ein Bild zuordnen also so zu sagen in ner schleife
also so das wenn ich die prozedur austeilen aufrufe folgendes passiert:
PseudoCode:
Delphi-Quellcode:
begin
  für lauf:=0 bis Rundenanzahl tue
  zufallszahl erzeugen            | Bsp. 6
  Karte|lauf|.Picture.LoadFromFile(PfadBisZumOrdner+Dateiname+Zufallszahl+.jpg)
  -->Bsp. Card2.Picture.LoadFromFile(C:Dokumente und Einstellungen\User\Desktop\Ordner\CardRed6.jpg)
end
[Edit] Das Spiel kennt eh keiner... Aber das mit der Klasse stimmt... warscheinlich ist das die bessere Lösung

Matze 29. Dez 2009 22:06

Re: Prozedur, die einem TImage Extr.FilePath+Name+Lauf+.jpg.
 
Ah, dann kannst du die Images entweder in ein Array packen, wie erwähnt, oder du nutzt Delphi-Referenz durchsuchenFindComponent.

Delphi-Quellcode:
(FindComponent('Card' + IntToStr(Num)) as TImage).Picture.LoadFromFile(...);
Oder so ähnlich. ;)

Grüße, Matze

Edit: Denke an den Titel. Klicke dazu beim ersten Beitrag auf "edit" und trage einen vernünftigen Titel ein. Aktuell findet das über die Suchfunktion kaum einer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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