Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Arrayelement anklicken (https://www.delphipraxis.net/84737-arrayelement-anklicken.html)

MrKnogge 20. Jan 2007 23:23

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ß

Sotov 20. Jan 2007 23:27

Re: Arrayelement anklicken
 
Uuups! das ist mir ja noch garnicht aufgefallen :oops:
Dankeschön!

MrKnogge 20. Jan 2007 23:31

Re: Arrayelement anklicken
 
Und vergiss bitte nicht die Images, am Ende (am besten im OnDestroy von Form1), wieder freizugeben.
Delphi-Quellcode:
for j := 0 to 3 do
  for i := 0 to 4 do
    Karte[j * 5 + i].free;
Gruß

Sotov 20. Jan 2007 23:38

Re: Arrayelement anklicken
 
Ja, muss ich, sonst kann ich keine levels machen!

Sotov 21. Jan 2007 14:54

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:
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;
klick ist globaldeklariert und von typ integer

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!

MrKnogge 21. Jan 2007 14:57

Re: Arrayelement anklicken
 
Na mit (Sender as TImage) so wie du es bereits machst.

Gruß

himitsu 21. Jan 2007 15:14

Re: Arrayelement anklicken
 
entweder du gehst das Array durch und vergleichst
Delphi-Quellcode:
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 ..
oder du speicherst den Index im Bild:
Code:
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;
Abrufen dann z.B. so
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;

Sotov 21. Jan 2007 15:50

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?

inherited 21. Jan 2007 16:00

Re: Arrayelement anklicken
 
Mit FindComponent. Das ist aber unperfomant. Was genau willst du denn machen?

MrKnogge 21. Jan 2007 16:09

Re: Arrayelement anklicken
 
Zitat:

Zitat von Sotov
Noch eine kleine Frage:
Karte[k].Picture := Image1.picture;
wie kann man diese 1 zu einer variable machen?

Die beste Antwort steht eine Zeile drüber, erstelle Image1 und Image2 genauso wie du Karte erstellt hast.
Die Bilder kannst du dann zur Laufzeit mit Picture.LoadFromFile laden.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr.
Seite 2 von 3     12 3      

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