Einzelnen Beitrag anzeigen

Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Ein Panel an eine Instanz einer Klasse TBall übergeben

  Alt 11. Mär 2022, 16:44
Ja mach ich.
Unsere Meldungen haben sich überschnitten, war noch am suchen und schreiben, da hast Du schon geantwortet, das habe ich erst gesehen, nachdem ich es abgeschickt habe.
Änderung ist schon eingebaut.

Jetzt muss ich mich aber wieder mal meinem eigentlichen, kleinerem Problem zuwenden, wie ich mein einfaches Lernprojekt fortsetze.
Zu Anfang dachte ich es sei leichter mit einem TPanel und einem TShape darauf zu arbeiten, da man dafür die x und y Koordinaten für den linken oberen Punkt übergeben muss und sich nicht wie bei einem gezeichneten Kreis noch mit Mittelpunkt vom Kreis und linkem Rand vom Kreis beschäftigen muss.
Das geht aber auch wenn ich ein Rechteck zeichne und später den Kreis.
Außerdem kann man auch mit einem Image arbeiten und das bewegen.

Jetzt habe ich mich erst mal für eine Painbox entschieden auf die ich dann ein Rechteck zeichne.
Die Randprüfung überfordert die meisten Anfänger schon.

Ich nehme also eine Form und setze eine Paintbox darauf.
Mit Ball := TBall.Create(Paintboxname); erstelle ich dann einen Ball in der MainForm.
im TBall Objekt übernehme ich diese PB dann mit
in der Typ Deklaration und rufe es auf mit
Code:
constructor Create (AOwner: TPaintbox);
und in der Implementierung mit
Code:
constructor Tball.Create (AOwner: TPaintbox);
Hier initialisere ich meine Variable und erstelle meinen Timer für den Ball.
Code:
Inherited;
BallTimer := TTimer.Create(nil);
BallTimer.OnTimer := OnBallTimer;
Im OnBallTimer Ereignis kann ich dann den Ball, mit berechneten Koordinaten, auf dem canvas der übergebenen Paintbox, zeichnen.

Das funktioniert schon mal.

Was ist mit dem override beim Constuctor ? Brauche ich das ?

Kann ich in der MainForm auch ein Image verwenden und TBall erkennt das anhand der übergebenen Componente ?

Geändert von Smiley (11. Mär 2022 um 16:48 Uhr)
  Mit Zitat antworten Zitat