| Autor |
Beitrag |
Helmut
      
Beiträge: 44
|
Verfasst: 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:
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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Do 16.01.03 21:09
Hallo
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
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 
      
Beiträge: 44
|
Verfasst: Do 16.01.03 21:15
| Keldorn hat folgendes geschrieben: | Hallo
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
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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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.
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 
      
Beiträge: 44
|
Verfasst: Do 16.01.03 21:35
ah, jo, klappt. Hab das mit dem sender nicht so richtig verstanden (hab mich aber grade schlau gemacht  )
So, wenn du das mit dem findcomponent noch finden könntest wäre echt toll, der quelltext hier sieht nicht wirklich professionell aus:
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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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.
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 
      
Beiträge: 44
|
Verfasst: 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
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: 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)
|
|
|