Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi alternative zu 225 onclick-ereignissen ? (https://www.delphipraxis.net/33605-alternative-zu-225-onclick-ereignissen.html)

dEluXe 9. Nov 2004 20:57


alternative zu 225 onclick-ereignissen ?
 
Hallo zusammen,

Wir sollen im Informatikunterricht eine Art Vier-Gewinnt programmieren.
Das Spielfeld soll eine größe von 15 x 15 Feldern (also 225 Einzelfelder)haben.
Ich habe das momentan so realisiert, indem ich 225 Images :shock: erstellt habe, die ich auch ohne Probleme füllen kann.
Nun komme ich mal zum eigentlichen Problem:
Um nun seinen Zug abzugeben, sollte der Spieler auf dem Spielfeld (225 Images :x ) eines der Felder anklicken, woraufhin ich dieses mit seiner Farbe fülle.

Aber WIE soll ich das jetzt machen ohne 225 onclick-Ereignisse für jedes Image zu schreiben ?

Oder gibt es eine alternative zu den Images mit der man ein solches Spielfeld erstellen kann ?


Danke im Voraus

dEluXe

SirThornberry 9. Nov 2004 21:00

Re: alternative zu 225 onclick-ereignissen ?
 
erstelle die Images dynamich und packe sie in ein array. Dann weißt du allen die gleiche OnClick-Methode zu. Anhand des Senders in der OnClick-Methode kannst du dann herausfinden welches deiner Images geklickt wurde (oder du missbrauchst du Tag-Eigenschaft dazu)

phlux 9. Nov 2004 21:02

Re: alternative zu 225 onclick-ereignissen ?
 
ohje, viel zu komplex, meine alternative: definierst einfach ein onclick ereignis für alle steine, dann kannst du mittels dem sender der dem event übergeben wird von welchem object der event ausgelöst wurde.

edit: arrgh der gummibär war schneller :x

glkgereon 9. Nov 2004 21:05

Re: alternative zu 225 onclick-ereignissen ?
 
:gruebel:

ist doch dasselbe, oder?

bis auf das array....
und dein code wäre dann so:

Delphi-Quellcode:
Image1:=TImage.Create;
Image2:=TImage.Create;
Image3:=TImage.Create;
//...
Image225:=TImage.Create;
-> lieber doch array :wink:

das ginge dann so:

Delphi-Quellcode:
var Images:array[1..225] of TImage;
begin
For i:=1 to 225 do
  Images[i]:=TImage.Create;

JasonDX 9. Nov 2004 21:14

Re: alternative zu 225 onclick-ereignissen ?
 
und noch was (relativ) einfaches:
nimm ein einziges Image, zeichne da die einzelnen steinchen drauf (Position musste halt mit einer einfachen Multiplikation ausrechnen....) und kannste auch einfach wieder beim Klicken über die Mausposition zurückrechnen (hoch lebe div)
Damit ersparst du dir, den ganzen Speicher mit TImages vollzustopfen ;)

dEluXe 9. Nov 2004 21:32

Re: alternative zu 225 onclick-ereignissen ?
 
Hmm...

so ganz versteh ich das noch nicht.

Wie erstell ich denn ein onclick-Ereignis ohne festzulegen auf was geklickt werden muss ?

Und wenn ich auf z.B. ein Image klicke dann wird doch bloss dort das onclick-Ereignis ausgelöst, oder ?

so ein kurzes codeschnippselchen würde mir vielleicht helfen :)

dEluXe

alcaeus 9. Nov 2004 21:36

Re: alternative zu 225 onclick-ereignissen ?
 
Hi dEluXe,

mal zum Beispiel:

Delphi-Quellcode:
//...
type
  TForm1 = class(TForm)
//deine objekte und funktionen etc.
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
//deine eigene Click-routine
    procedure Click(Sender: TObject);
  public
    { Public declarations }
  end;
//...
implementation
//...
procedure TForm1.Click(Sender: TObject);
begin
  ShowMessage('Hallo Welt');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//hier werden den kompos die OnClick-Funktionen zugewiesen
//alles nur Beispiele:
  Button1.OnClick := Click;
  Image1.OnClick := Click;
  Form1.OnClick := Click;
end;
Greetz
alcaeus

dEluXe 9. Nov 2004 22:01

Re: alternative zu 225 onclick-ereignissen ?
 
HiHo,

und Danke für die schnellen Antworten.

@alcaeus
also wo ich meine eigene onclick-Prozedur hinschreibe hab ich jetzt verstanden.
Trotzdem bin ich noch nicht ganz schlau aus deinem Beispiel geworden, wie der Klick jetzt an meine eigene click-Prozedur geleitet wird ?

Jetzt mal als Beispiel ich klicke während dem Spiel auf ein Image (als Beispiel: Image34)
dann wird doch auch nur dort das onclick-Ereigniss ausgelöst, wie wird das denn an meine eigene click-Prozedur weitergeleitet und wie übergebe ich die Zahl 34 von dem Image an die Prozedur ?

man ist das kompliziert (zumindestens für mich ;) )

dEluXe

alcaeus 9. Nov 2004 22:08

Re: alternative zu 225 onclick-ereignissen ?
 
Hi dEluXe,

es gibt etwas das du beachten musst: den Unterschied zwischen einem Ereignis und der Ereignisbehandlungsroutine.

Ich versuchs mal einfach: Wenn du auf einen Button klickst, dann wird das OnClick-Ereignis ausgelöst. Wenn dem OnClick-Ereignis nun eine Behandlungsroutine zugewiesen ist, dann wird der Code dieser Routine (in meinem Beispiel hieß die Routine "Click") ausgeführt.
Dies kann man auf 2 verschiedene Arten erledigen:
  1. Du kannst die OnClick-Behandlung zur Designzeit einfügen (z.B. mit einem Doppelklick auf einen Button auf deinem Form), oder
  2. du kannst dies alles zur Laufzeit machen.
Wie du es zur Designzeit machen musst weißt du hoffentlich.
Wenn du es zur Laufzeit machen willst, dann musst du wie bereits gezeigt die Prozedur manuell schreiben, also
Delphi-Quellcode:
procedure Click(Sender: TObject);
Damit diese Prozedur auch als Behandlungsroutine bei einem Klick auf einen Button ausgelöst wird, musst du sie natürlich als Behandlungsroutine eintragen. Dies geschieht mit
Delphi-Quellcode:
Button1.OnClick := Click;
oder eben
Delphi-Quellcode:
Image34.OnClick := Click;
Du musst dies natürlich für alle Images machen.

Greetz
alcaeus

dEluXe 9. Nov 2004 22:22

Re: alternative zu 225 onclick-ereignissen ?
 
@alcaeus
ok soweit hab ich das verstanden.
Das jedoch bedeutet, dass ich 225 mal
Delphi-Quellcode:
ImageXXX.OnClick := Click;
schreiben muss.
geht das nicht auch leichter ?

Und dann ist da noch das Problem, dass ich ja irgendwie die Nummer des Images an die Click-Routine übergeben muss ?


dEluXe


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:43 Uhr.
Seite 1 von 2  1 2      

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