Autor |
Beitrag |
covel
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Di 28.03.06 20:43
Guten Abend,
ich möchte gern ein "Objekt" definieren. Das Objekt soll z.B. ein Panel mit 2 Button sein. Diesem Panel bzw. den Buttons möchte ich noch gerne eine eingene Methode (könnten auch mehrere werden) zuweisen. Anschließend möchte ich das Objekt (am besten als array) zur Laufzeit erstellen (mit create).
Wie kann ich da machen ??
Grüße Covel
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Di 28.03.06 20:54
covel hat folgendes geschrieben: | Guten Abend,
ich möchte gern ein "Objekt" definieren. Das Objekt soll z.B. ein Panel mit 2 Button sein. |
Dann erzeuge eine von TPanel abgeleitete Klasse.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var TMypanel = class(TPanel) Buton1: TButton; Button2: TButton; constructor Create; end;
constructor TMyPanel.Create; begin Button1 := TButton.Create(self); Button1 := TButton.Create(self); end; |
Achtung: schnell dahingetippt; keine haftung bei Fehlern
Zitat: | Diesem Panel bzw. den Buttons möchte ich noch gerne eine eingene Methode (könnten auch mehrere werden) zuweisen. |
Diese Klasse kannst du dann problemlos um weitere Methoden erweitern.
Zitat: | Anschließend möchte ich das Objekt (am besten als array) zur Laufzeit erstellen (mit create). |
Erzeuge einen Array deiner Klasse und weise ihm die neu erzeugten Instanzen zu
_________________ Markus Kinzler.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 29.03.06 07:37
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 29.03.06 08:05
Eigentlich sollte das .Create(self); den parent setztn.
_________________ Markus Kinzler.
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 29.03.06 08:35
mkinzler hat folgendes geschrieben: | Eigentlich sollte das .Create(self); den parent setztn. |
.Create (Self9 setzt den Owner, nicht den Parent !
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 29.03.06 11:14
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Button2Click(Sender: TObject); var TMypanel=class(TPanel) Buton1: TButton; Button2: TButton; constructor Create; end;
constructor TMyPanel.Create; begin Button1 := TButton.Create(self); Button1 := TButton.Create(self); end;
begin end; |
[Fehler] Unit1.pas(132): ',' oder ':' erwartet, aber '=' gefunden
was mache ich falsch?
|
|
Grishnak
      
Beiträge: 221
Windows XP Home
Delphi 7 PE, Delphi 2005 PE
|
Verfasst: Mi 29.03.06 11:22
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:
| type TMypanel=class(TPanel) Button1: TButton; Button2: TButton; constructor Create; end;
implementation
constructor TMyPanel.Create; begin Button1:=TButton.Create(self); Button2:=TButton.Create(self); end;
procedure TForm1.Button2Click(Sender: TObject); begin MyPanel:=TMyPanel.Create; end; |
"MyPanel" sollte vorher aber noch irgendwo deklariert werden (am besten in der Form).
_________________ Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 29.03.06 12:42
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button2Click(Sender: TObject);
begin MyPanel:=TMyPanel.Create; with MyPanel do begin top:=100; left:=100; width:=100; height:=100; visible:= true; end;
end; |
habe noch ne frage warum bekomme ich bei visible:= true oder parent:= form1 eine EAccessViolation Exception?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 29.03.06 12:50
Muß heißen MyPanel:=TMyPanel.Create( self);
_________________ Markus Kinzler.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 29.03.06 12:51
mkinzler hat folgendes geschrieben: | Muß heißen MyPanel:=TMyPanel.Create( self); |
und parent := self;
_________________ Markus Kinzler.
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 29.03.06 12:59
Bekomme leider nur die fehlermeldung "zuviel Parameter"
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 29.03.06 13:10
_________________ Markus Kinzler.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 29.03.06 14:09
Sollte im überschriebenen Konstruktor nicht doch der Konstruktor des Vorgänges aufgerufen werden?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| constructor TMyPanel.Create( AWwner: TObject); begin inherited; Owner := AOwner; Parent := AOwner; Button1 := TButton.Create(self); Button1.Parent := self; Button2 := TButton.Create(self); Button2.Parent := self; end; |
_________________ Na denn, dann. Bis dann, denn.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mi 29.03.06 14:33
Zitat: | Sollte im überschriebenen Konstruktor nicht doch der Konstruktor des Vorgänges aufgerufen werden? |
Natürlich, heute ist nicht mein Tag
Moderiert von raziel: Doppelposting entfernt.
_________________ Markus Kinzler.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 29.03.06 15:20
und die buttons sollten am besten auch noch freigegeben werden
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Mi 29.03.06 15:47
F34r0fTh3D4rk hat folgendes geschrieben: | und die buttons sollten am besten auch noch freigegeben werden |
nein, wenn Owner gesetzt, kümmert der sich darum!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Vera
      
Beiträge: 82
WinXP Home
Delphi 2005 Personal
|
Verfasst: Mi 29.03.06 15:54
Das stimmt schon. Ich mache es aber grundsätzlich so: Wenn ich ein Objekt erzeuge dann gebe ich dieses auch frei - Immer!
Wenn man sich daran mal gewöhnt hat dann vergisst man es an anderen "wichtigen" Stelle nicht mehr so schnell. 
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 29.03.06 15:55
ok da war ja doch eine version mit owner, davor waren aber einige ohne 
|
|
covel 
      
Beiträge: 131
Win XP PRo
Borland D7/C#
|
Verfasst: Mi 29.03.06 19:41
erstmal besten dank für eure hilfe
aber ich bekomme immer mehr fehler
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:
| type TMypanel=class(TPanel) Button1: TButton; Button2: TButton; constructor Create(AWwner: TObject); end;
var Form1: TForm1; test: Tbutton;
MyPanel : TMyPanel;
implementation constructor TMyPanel.Create( AWwner: TObject); begin inherited; Owner := AOwner; Parent := AOwner; Button1 := TButton.Create(self); Button1.Parent := self; Button2 := TButton.Create(self); Button2.Parent := self; end; |
Fehler:[Fehler] Unit1.pas(52): Inkompatible Typen
lasse ich das inherited weg kommt bei Owner:=AOwner folgenden fehlermeldung :
[Fehler] Unit1.pas(53): Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden
|
|
Waldheini
      
Beiträge: 32
Win 98SE, XP
D5 St., K3 Prof
|
Verfasst: Mi 29.03.06 20:07
Versuch es mal mit:
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:
| type TMypanel=class(TPanel) Button1: TButton; Button2: TButton; constructor Create(AWwner: TObject); override; end;
var Form1: TForm1; test: Tbutton;
MyPanel : TMyPanel;
implementation constructor TMyPanel.Create( AWwner: TObject); begin inherited Create(Self); Owner := AOwner; Parent := AOwner; Button1 := TButton.Create(self); Button1.Parent := self; Button2 := TButton.Create(self); Button2.Parent := self; end; |
|
|