AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi zur laufzeit erstelltes objekt ansprechen
Thema durchsuchen
Ansicht
Themen-Optionen

zur laufzeit erstelltes objekt ansprechen

Ein Thema von blubber443 · begonnen am 25. Mär 2012 · letzter Beitrag vom 26. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
blubber443

Registriert seit: 28. Jan 2012
Ort: Dresden
41 Beiträge
 
Delphi XE2 Professional
 
#1

zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 15:48
Delphi-Version: XE2
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;
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 16:02
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;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 16:03
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;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 16:12
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#5

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 16:26
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 Shape.SetBounds(...) .

Und ich hoffe mal, das "Shape" ist nicht wirklich eine globale Variable.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 16:28
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;
Man sollte hier auch noch dazu sagen, dass with sehr böse werden kann. Man spart sich zwar Schreibarbeit, ist aber imho einfach weniger präziser, als wenn man immer shape.[Property|Methode] verwendet. An diesem Beispiel sieht man auch warum, denn TForm1 hat auch eine OnClick-Methode. Klar, der Compiler wird hier immer erst nach dem with schauen, aber für andere könnte der Code weniger verständlich sein. Ebenso ist der Code mit dem with weniger robust gegenüber Änderungen. Aber es kann sich jeder selbst überlegen, was er bevorzugt. Wollte es nur der vollständigkeithalber erwähnen
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
blubber443

Registriert seit: 28. Jan 2012
Ort: Dresden
41 Beiträge
 
Delphi XE2 Professional
 
#7

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 18:43
thx, probiers gleich mal aus
  Mit Zitat antworten Zitat
blubber443

Registriert seit: 28. Jan 2012
Ort: Dresden
41 Beiträge
 
Delphi XE2 Professional
 
#8

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 20:32
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?
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#9

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 20:40
[...] da ich mit einer unbekannten anzahl an shapes arbeite wär es schön einen array zuzulegen [...]
Nein, wäre es nicht. Dafür gibt es geeignetere Container, wie z.B. Listen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: zur laufzeit erstelltes objekt ansprechen

  Alt 25. Mär 2012, 20:43
Delphi-Quellcode:
Shapes: Array of TShape;
...
i := Length(Shapes);
Setlength( Shapes, i+1);
shapes[i] := TShape.Create(self);
...
Aber für die Events istr das garnicht notwendig, weil die Instanz ja im Parameter Sender übergeben wird.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
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