![]() |
Re: Arrayelement anklicken
Schau dir mal deine Schleifen genau an, wenn du die äußere Schleife zum zweiten mal durchläufst, dann erstellst du wieder die TImage mit dem Index [1] - [5]
Gruß |
Re: Arrayelement anklicken
Uuups! das ist mir ja noch garnicht aufgefallen :oops:
Dankeschön! |
Re: Arrayelement anklicken
Und vergiss bitte nicht die Images, am Ende (am besten im OnDestroy von Form1), wieder freizugeben.
Delphi-Quellcode:
Gruß
for j := 0 to 3 do
for i := 0 to 4 do Karte[j * 5 + i].free; |
Re: Arrayelement anklicken
Ja, muss ich, sonst kann ich keine levels machen!
|
Re: Arrayelement anklicken
Noch eine Frage:
Mit dem Ereignis OnClick möchte ich die Anzahl der Clicks zählen und je nachdem ob es klick1 oder klick2 ist, möchte ich das bild einer variable karte1 oder karte2 zuordnen, die vom typ TImage sind. So sieht es aus bei mir:
Delphi-Quellcode:
klick ist globaldeklariert und von typ integer
procedure TForm1.Image1Click(Sender: TObject);
var karte1,karte2: TImage; begin (Sender as TImage).picture := Image2.picture; klick:=klick+1; if klick = 1 then karte1.OnClick := Karte[(j - 1) * x + k]; else if klick = 2 then karte2.OnClick:= Karte[(j - 1) * x + k]; if Karte2 =Karte1 then showmessage('hallo'); end; das problem ist, ich weiss nicht wie man auf die gerade angeklickte karte zugreift. Ich habe versucht die variablen j,x,k global zu deklarieren und sie hier in deiser procedure zu benutzen, aber das klappt nicht.Vielleicht hat jemadnd eine lösung für mich. Der Überlegung nach, sollte nach dem zweiten Klick diese Message kommen, es passiert aber nichts! |
Re: Arrayelement anklicken
Na mit (Sender as TImage) so wie du es bereits machst.
Gruß |
Re: Arrayelement anklicken
entweder du gehst das Array durch und vergleichst
Delphi-Quellcode:
oder du speicherst den Index im Bild:
for j := 1 to 4 do
for i := 1 to 5 do if Sender = Karte[(j - 1) * 5 + i] Then .. // oder for i := 1 to 20 do if Sender = Karte[i] Then ..
Code:
Abrufen dann z.B. so
for j := 1 to 4 do
for i := 1 to 5 do begin Karte[(j - 1) * 5 + i]:=TImage.Create(Self); Karte[(j - 1) * 5 + i].Parent := Self; Karte[(j - 1) * 5 + i].Left := a; Karte[(j - 1) * 5 + i].Top := b; Karte[(j - 1) * 5 + i].AutoSize := True; [color=#ff0000][b] Karte[(j - 1) * 5 + i].Tag := (j - 1) * 5 + i; [/b][/color] Karte[(j - 1) * 5 + i].Picture := Image1.picture; Karte[(j - 1) * 5 + i].OnClick := Image1Click; end;
Delphi-Quellcode:
Index := Sender.Tag;
//oder Index := TImage(Sender).Tag; //oder Index := (Sender as TImage).Tag; PS: mal ein bissl Code ... wenn du Lust hat, dann schau ihn dir mal an ... is so'n kleiner Vorschlag, wie man es auch machen könnte :angel:
Delphi-Quellcode:
var karte : array [0..19] of TImage;
procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i := 0 to 19 do begin Karte[i] := TImage.Create(Self); Karte[i].Parent := Self; Karte[i].Left := (i mod 5) * 100 + 2; Karte[i].Top := (i div 5) * 100 + 2; Karte[i].AutoSize := True; Karte[i].Tag := i; Karte[i].Picture := Image1.picture; Karte[i].OnClick := Image1Click; end; end; procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i := 0 to 19 do Karte[i].free; end; procedure TForm1.Image1Click(Sender: TObject); begin Karte[TImage(Sender).Tag] // diese Karte wurde angeklickt end; |
Re: Arrayelement anklicken
Großartig!
Hat geklappt! Danke schön! Noch eine kleine Frage: Karte[k].Picture := Image1.picture; wie kann man diese 1 zu einer variable machen? |
Re: Arrayelement anklicken
Mit FindComponent. Das ist aber unperfomant. Was genau willst du denn machen?
|
Re: Arrayelement anklicken
Zitat:
Die Bilder kannst du dann zur Laufzeit mit Picture.LoadFromFile laden. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 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