Autor Beitrag
covel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 28.03.06 20:54 
user profile iconcovel 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 29.03.06 07:37 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
 TMypanel = class(TPanel)
    Buton1: TButton;
    Button2: TButton;
    constructor Create;
end;

constructor TMyPanel.Create;
begin
  Button1 := TButton.Create(self);
  Button1 := TButton.Create(self);
  Button1.Parent := Self;
  Button2.Parent := Self;
end;
sollte es doch schon heißen, :wink:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 29.03.06 08:05 
Eigentlich sollte das .Create(self); den parent setztn.

_________________
Markus Kinzler.
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 29.03.06 08:35 
user profile iconmkinzler 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mi 29.03.06 11:14 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 221

Windows XP Home
Delphi 7 PE, Delphi 2005 PE
BeitragVerfasst: Mi 29.03.06 11:22 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mi 29.03.06 12:42 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 29.03.06 12:50 
Muß heißen MyPanel:=TMyPanel.Create( self);

_________________
Markus Kinzler.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 29.03.06 12:51 
user profile iconmkinzler hat folgendes geschrieben:
Muß heißen MyPanel:=TMyPanel.Create( self);

und parent := self;

_________________
Markus Kinzler.
covel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mi 29.03.06 12:59 
Bekomme leider nur die fehlermeldung "zuviel Parameter"
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 29.03.06 13:10 
Habe hier nen kleinen Fehler im constructor gemacht
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
constructor TMyPanel.Create( AWwner: TObject);
begin
    Owner := AOwner;
    Parent := AOwner;
    Button1 := TButton.Create(self);
    Button1.Parent := self;
    Button2 := TButton.Create(self);
    Button2.Parent := self;
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt

_________________
Markus Kinzler.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 29.03.06 14:09 
Sollte im überschriebenen Konstruktor nicht doch der Konstruktor des Vorgänges aufgerufen werden?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
constructor TMyPanel.Create( AWwner: TObject);
begin
  inherited// <<-------------- MÖÖÖP
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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 user profile iconraziel: Doppelposting entfernt.

_________________
Markus Kinzler.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 29.03.06 15:20 
und die buttons sollten am besten auch noch freigegeben werden
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 29.03.06 15:47 
user profile iconF34r0fTh3D4rk 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 82

WinXP Home
Delphi 2005 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 29.03.06 15:55 
ok da war ja doch eine version mit owner, davor waren aber einige ohne :P
covel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

Win XP PRo
Borland D7/C#
BeitragVerfasst: Mi 29.03.06 19:41 
erstmal besten dank für eure hilfe

aber ich bekomme immer mehr fehler

ausblenden 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// <<-------------- MÖÖÖP      hier kommt der Fehler
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 32

Win 98SE, XP
D5 St., K3 Prof
BeitragVerfasst: Mi 29.03.06 20:07 
Versuch es mal mit:

ausblenden 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;  // überschreiben der 
                                                    // Vorgängermethode 
  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;