![]() |
Delphi-Version: XE2
zur laufzeit erstelltes objekt ansprechen
moin, ich bin dabei einen leveleditor für mein spiel zu erstellen und hab da ein kleines problem:
ich weiß zwar wie man objekte erzeugt; aber nicht wie man später eine funktion (etwa wie onclick oder onmousedown) erzeugt. es sollte etwa so aussehen:
Delphi-Quellcode:
var
shape: TShape; ... procedure TForm1.Button1Click(Sender: TObject); begin shape:=TShape.Create(Form1); With shape do begin Parent:=Form1; Left:=0; Top:=0; Width:=100; Height:=50; Shape:=stRoundRect; Name:='Shape1'; end; end; ... procedure Shape1.onklick; //und hier weiß ich nicht wie es richtig heißt begin ... end; |
AW: zur laufzeit erstelltes objekt ansprechen
Delphi-Quellcode:
var
shape: TShape; ... procedure TForm1.Button1Click(Sender: TObject); begin shape:=TShape.Create(Form1); With shape do begin Parent:=Form1; Left:=0; Top:=0; Width:=100; Height:=50; Shape:=stRoundRect; Name:='Shape1'; end; // Hier weißt du dem shape den entsprechenden // OnClick-Handler zu shape.OnClick := Self.onklick; end; ... // Hier hast du den Parameter Sender vergessen. procedure Shape1.onklick(Sender: TObject); //und hier weiß ich nicht wie es richtig heißt begin ... end; |
AW: zur laufzeit erstelltes objekt ansprechen
Delphi-Quellcode:
var
shape: TShape; ... procedure TForm1.Button1Click(Sender: TObject); begin shape:=TShape.Create(Form1); With shape do begin Parent:=Form1; Left:=0; Top:=0; Width:=100; Height:=50; Shape:=stRoundRect; Name:='Shape1'; onClick = OnShapeKlick; end; end; ... procedure Form1.onShapeklick( Sender:... begin ... end; |
AW: zur laufzeit erstelltes objekt ansprechen
Und nun mal ohne with und benannte Instanz:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin shape := TShape.Create(self); //die aktuelle Instanz shape.Parent := self; //hier auch shape.Left := 0; shape.Top := 0; shape.Width := 100; shape.Height := 50; shape.Shape := stRoundRect; shape.Name := 'Shape1'; shape.onClick := OnShapeKlick; end; |
AW: zur laufzeit erstelltes objekt ansprechen
Dynamisch erstellte Komponenten brauchen nicht unbedingt einen Namen. (Shape1)
Durch den statischen Namen knallt es, wenn man zweimal auf den Button drückt, da der Name eindeutig sein muß. Statt der 4 Parameter kann man diese auch auf Einmal setzen
Delphi-Quellcode:
.
Shape.SetBounds(...)
Und ich hoffe mal, das "Shape" ist nicht wirklich eine globale Variable. |
AW: zur laufzeit erstelltes objekt ansprechen
Zitat:
|
AW: zur laufzeit erstelltes objekt ansprechen
thx, probiers gleich mal aus ;)
|
AW: zur laufzeit erstelltes objekt ansprechen
ich hätt da nur noch eine einizige frage; da ich mit einer unbekannten anzahl an shapes arbeite wär es schön einen array zuzulegen, wie würde das gehen?
|
AW: zur laufzeit erstelltes objekt ansprechen
Zitat:
|
AW: zur laufzeit erstelltes objekt ansprechen
Delphi-Quellcode:
Aber für die Events istr das garnicht notwendig, weil die Instanz ja im Parameter Sender übergeben wird.
Shapes: Array of TShape;
... i := Length(Shapes); Setlength( Shapes, i+1); shapes[i] := TShape.Create(self); ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz