Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - einem dynamischen Array Methoden zuweisen
TiRoCkx - So 17.03.19 17:10
Titel: einem dynamischen Array Methoden zuweisen
Hey Leute,
Folgender Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| private Shapes: array of TShape; public Madn: TMadn; procedure OnShapeClick(Sender: TObject); end;
var Form2: TForm2; count,anz,z: byte;
procedure TForm2.CreateShapes(n: word; wc: TWinControl); begin SetLength(Shapes, n); Field.Parent := Panel1; while n > 0 do begin Shapes[n] := TShape.Create(Self); Shapes[n].Parent := wc; case n of 1,2,3,4: Shapes[n].Brush.Color := rgb(255,0,0); 5,6,7,8: Shapes[n].Brush.Color := RGB(255,216,0); 9,10,11,12: Shapes[n].Brush.Color := RGB(58,196,0); 13,14,15,16: Shapes[n].Brush.Color := RGB(0,148,255); end; Shapes[n].Shape := stcircle; Shapes[n].Height := 30; Shapes[n].Width := 30; Shapes[n].Left := UMadn.Start[n].X; Shapes[n].Top := UMadn.Start[n].Y; Shapes[n].Pen.Width := 3; Shapes[n].Visible := true; Shapes[n].Enabled := false; n := n-1; OnClick := Self.OnShapeClick(Self); end; end;
procedure TForm2.OnShapeClick(Sender: TObject); begin showmessage('Läuft'); end; |
Mein Problem ist folgendes:
Ich habe je nach Spieleranzahl verschieden viele Figuren (Anzahl stellt Übergabewert n dar).
Diese Figuren stelle ich somit in einem dynamischem Array dar, um sie leichter ansprechen zu können.
Nun möchte ich durch die OnClick Methode der Figuren(Shapes) diese setzen.
Ich habe ein bisschen rumprobiert, komme aber auf keine Lösung.
Wie setze ich das um?
Delphi-Quelltext
1:
| [Fehler] Unewgame.pas(105): Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter' |
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am So 17.03.2019 um 19:02
Holgerx - So 17.03.19 17:28
Hmm..
Mal ne Frage:
Delphi-Quelltext
1: 2: 3: 4:
| Shapes[n].Enabled := false; n := n-1; OnClick := Self.OnShapeClick(Self); end; |
Wessen OnCLick wird da das Self.OnShapeClick zugewiesen?
Könnte es sein, dass das so lauten müsste ( ohne das (self))?
Delphi-Quelltext
1: 2: 3: 4:
| Shapes[n].Enabled := false; Shapes[n].OnClick := Self.OnShapeClick; n := n-1; end; |
Mit dem (self) würdest Du nicht die Methode zuweisen, sondern das Ergebnis des Methodenaufruf Self.OnShapeClick(Self) ;)
TiRoCkx - So 17.03.19 20:22
Ja das mit dem Shapes[n]. habe ich vergessen.
Aber das wirft immer mehr Fragen auf:
Es gibt ja nur ein MouseDown und MouseUp Event für Shapes.
Und ich muss ja einen Sender übergeben....
Es wird immer komplizierter. :oops: :(
Holgerx - So 17.03.19 20:27
Hmm..
Wenn Du einem Object eine Event-Methode zuweißt, dann wird beim Aufrufen (vom Object selber, wenn innerhalb dessen das Event passiert) als 'Sender' das Object selber übergeben.
Somit kannst Du in deiner zugewiesenen Methode über 'Sender' auf das Object zugreifen, welches die Methode aufgerufen hat... ;)
TiRoCkx - So 17.03.19 20:36
ok ich probiers dann gleich mal und schreibe evtl. noch mal. Danke erst mal!
TiRoCkx - So 17.03.19 21:33
Hab es jetzt so geschrieben:
Delphi-Quelltext
1:
| Shapes[n].OnMouseDown := OnShapeClick; |
Fehlermeldung:
Delphi-Quelltext
1:
| [Fehler] Unewgame.pas(103): Inkompatible Typen: 'Liste der Parameter ist unterschiedlich' |
Ich verzweifel...
Gausi - So 17.03.19 22:03
Vielleicht so?
Delphi-Quelltext
1:
| Shapes[n].OnClick:= OnShapeClick; |
Das OnClick-Event hat nunmal andere Parameter als OnMouseDown. ;-)
TiRoCkx - So 17.03.19 23:49
Aber Shapes haben kein OnClick Event...
Moderiert von Narses: Beiträge zusammengefasstWenn ich es als OnClick schreibe, stimmen die Parameter wahrscheinlich.
Wie könnte ich denn dem Array von TShape eine OnClick-Methode zuweisen?
Delete - Mo 18.03.19 07:30
- Nachträglich durch die Entwickler-Ecke gelöscht -
TiRoCkx - Mo 18.03.19 11:04
Ich habs endlich!
Danke an alle bemühten Helfer! :D :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!