Autor Beitrag
Helmut
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Do 16.01.03 20:43 
Hallo,

ich habe mehrere TImages, bei denen wird beim klick auf diese code ausgeführt.
Die Images heissen wuerfel1 bis wuerfel6 .
Ich möchte jetzt das zum beispiel
procedure TForm1.wuerfel1Click(Sender: TObject);
aufgerufen wird in einer schleife

Und zwar so:
ausblenden Quelltext
1:
2:
3:
4:
5:
for i:=1 to 6 do
if wuerfel[i].zahl=1 then
begin
TForm1.wuerfel[color=red][i][/color]Click(Sender: TObject);
end;


Ich weiss aber nicht wie ich das i in den namen hereinbekomme. Über FindComponent geht es (glaube ich) nicht, zumindest hab ich es nicht geschafft. Und ich weiss auch nicht ob das Sender: TObject noch richtig ist, damit kenne ich mich nicht aus wozu das da ist...
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 16.01.03 21:09 
Hallo

ausblenden Quelltext
1:
2:
3:
procedure Tform1.irgendwo;
...
wuerfel1Click(wuerfel1);


du mußt nicht unbedingt Wuerfel1 übergeben, es kommt auf deine onClick-Methode an.
hast du zb. eine Methode für alle wuerfel
ausblenden Quelltext
1:
2:
3:
proc onclick(Sender:Tobject)
if sender=wuerfel1 then ...
if sender=wuerfel2 then ...

wird nix gehen, wenn als Sender kein Wuerfelimage übergeben wird.

mit Findcomponent kannsz du auch arbeiten, wenn du eine Onklick-methode für alle Wuerfel hat

wuerfelalleClick(findcomponent(...))

sollte gehen, habs aber nich gestestet

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Helmut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Do 16.01.03 21:15 
Keldorn hat folgendes geschrieben:
Hallo

ausblenden Quelltext
1:
2:
3:
procedure Tform1.irgendwo;
...
wuerfel1Click(wuerfel1);


du mußt nicht unbedingt Wuerfel1 übergeben, es kommt auf deine onClick-Methode an.
hast du zb. eine Methode für alle wuerfel
ausblenden Quelltext
1:
2:
3:
proc onclick(Sender:Tobject)
if sender=wuerfel1 then ...
if sender=wuerfel2 then ...

wird nix gehen, wenn als Sender kein Wuerfelimage übergeben wird.

mit Findcomponent kannsz du auch arbeiten, wenn du eine Onklick-methode für alle Wuerfel hat

wuerfelalleClick(findcomponent(...))

sollte gehen, habs aber nich gestestet

Mfg Frank


Hi,

ich glaub du hast mich falsch verstanden: Ich will ja grade nur die prozedur aufrufen, die normalerweise ausgeführt wird wenn man auf die jeweiligen TImages klickt. Man soll nicht darauf klicken...
Also soll das klicken garnicht stattfinden, die prozeduren die aber beim klicken aufgerufen werden ausgeführt werden. Ich hoffe ich hab euch (dich) jetzt nicht nochmehr verwirrt.

Es geht darum das ich eine KI bei meinem Spiel programmiere, welche genauso wie der mensch die spielzüge machen soll, damit ich nicht nochmal extra jeden code schrieben muss. Also soll die KI auf buttons klicken, images klicken usw. Nur sieht der benutzer nur die auswirkungen, nicht das klicken direkt (das wird ja nicht mit der maus gemacht).
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 16.01.03 21:26 
Zitat:
ich glaub du hast mich falsch verstanden: Ich will ja grade nur die prozedur aufrufen, die normalerweise ausgeführt wird wenn man auf die jeweiligen TImages klickt. Man soll nicht darauf klicken...

doch doch, hab dich schon verstanden.
ausblenden Quelltext
1:
2:
3:
4:
procedure form1.button1click;
  begin
    wuerfel1Click(wuerfel1); 
  end;

probiers aus

für die Sache mit findcomponents muß ich mal ein bsp suchen wird aber nicht gleich

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Helmut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Do 16.01.03 21:35 
ah, jo, klappt. Hab das mit dem sender nicht so richtig verstanden (hab mich aber grade schlau gemacht :oops: )

So, wenn du das mit dem findcomponent noch finden könntest wäre echt toll, der quelltext hier sieht nicht wirklich professionell aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
if wuerfel[1].selected  then begin wuerfel[1].selected:=false; wuerfel1Click(wuerfel1); end;
if wuerfel[2].selected  then begin wuerfel[2].selected:=false; wuerfel2Click(wuerfel2); end;
if wuerfel[3].selected  then begin wuerfel[3].selected:=false; wuerfel3Click(wuerfel3); end;
if wuerfel[4].selected  then begin wuerfel[4].selected:=false; wuerfel4Click(wuerfel4); end;
if wuerfel[5].selected  then begin wuerfel[5].selected:=false; wuerfel5Click(wuerfel5); end;
if wuerfel[6].selected  then begin wuerfel[6].selected:=false; wuerfel6Click(wuerfel6); end;
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Do 16.01.03 21:47 
wuerfel[1] = wuerfel1 ?

nee, ich glaub, so wie du das hast, geht dat net.
wuerfel?Click wird nicht gehen - keine Ahnung, wüßte nicht wie

es würde gehen, wenn du für alle Wuerfel eine onklick-methode hast, ind der du den Sender abfragst und entsprechend reagierst.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
for ...
  begin
     wuerfel:=Findcomponent(...);
     wuerfel.selected:=false
     AlleWuerfelClick(wuerfel)
  end;


warum 6 einzelne Klickmethoden? was steht denn da drin um es nicht allgeimein für alle Wuerfel zu halten?

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Helmut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Do 16.01.03 21:53 
hm... alles ein bisschen verwirrend. Aber du hast recht, eigentlich kann ich den code auch nochmal extra machen für alle wuerfelclicks.

Ich hab dich jetzt wahrscheinlich verwirrt mit dem record.

Also wuerfel[1] ist bei mir ein record der von 1-6 geht und dann hab ich noch wuerfel1 bis wuerfel6 als TImage. ;)

Aber so reicht mir das schon vollkommen, ich werd es dann nurnoch so verkürzen indem ich die einzelnen onclickmethoden direkt in die for..to-schleife reinbaue.

Danke!

mfg
Helmut
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 17.01.03 09:17 
du hast aber noch eine Möglichkeit.

du erstellst dir eine eigene Komponente, abgeleitet von TImage, und erweiterst die ganze Sache um deine gewünschten Angaben (das record).
hätte den Vorteil, das du dann alles in einem Objekt hast. die ganzen Würfel kannst du dann in einem Array halten und die zur Laufzeit erstellen

um bei dem Onclick ereignis auf den richtigen Wuerfel zu reagieren, kannst du mit dem Senderobjekt arbeiten oder du vergibst fuer jeden Wuerfel nen unterschieldichen Tag.

mußt du halt mal in einem neuen Projekt bissel experimentieren

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)