Huhu,
Ich habe mir mal eine TestClasse geschrieben auf der nur ein Panel erzeugt wird.
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: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| unit MeineClasse;
interface uses Controls,ExtCtrls,Classes,SysUtils,Graphics ; Type TMeineClasse = class(TPanel) U_Panel : TPanel; Private
Public Constructor Create(AOwner : TComponent); override; Destructor Destroy;override; end;
procedure Register; implementation
procedure Register; begin RegisterComponents('Standard', [TMeineClasse]); end;
constructor TMeineClasse.Create(AOwner: TComponent); begin inherited; U_Panel := TPanel.Create(Self); U_Panel.Parent := Self; U_Panel.Color := CLGreen; U_Panel.Align := ALClient; end;
destructor TMeineClasse.Destroy; begin FreeandNil(U_Panel); inherited; end;
end. |
Wenn ich diese Komponente jetzt auf einem Formular einbinde und auf dieses Object jetzt noch einen Button lege wird dieser Button nicht erzeugt.Muss in der Komponente noch irgendwas deklariert werden, damit auf ihr auch noch weitere Objecte angelegt werden können?
Im Anhang ist mein ein kleines Beispielprojekt in dem man es sehr schön sehen kann.
Der Button wird auch zur Entwurfszeit nach dem Öffen der Unit nicht mehr erzeugt.
Delphi-Quelltext
1:
| ControlStyle := ControlStyle + [csAcceptsControls]; |
Habe ich schon versucht, das bringt leider nicht das gewünschte ergebniss.
in der *.dfm Taucht der Button komischerweise auch nicht auf
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:
| object Form2: TForm2 Left = 0 Top = 0 Caption = 'Form2' ClientHeight = 427 ClientWidth = 652 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object MeineClasse1: TMeineClasse Left = 96 Top = 72 Width = 457 Height = 289 end end |
Und hier noch zu guter letzt den Quelltext der Unit
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: 28: 29: 30: 31: 32: 33: 34:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MeineClasse;
type TForm2 = class(TForm) MeineClasse1: TMeineClasse; Button1: TButton; procedure FormCreate(Sender: TObject); private public end;
var Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject); begin if Assigned(Button1) then SHowmessage('Button ist erzeugt') else SHowmessage('Button ist NICHT erzeugt') end;
end. |
Der Button soll nur ein Beispiel darstellen. Es sollen beliebige Komponenten auf dieser neuen Komponente erzeugt werden können. Diese sollen aber nicht zu Klasse TMeineClasse gehören
ich nutze BDS 2006
mfg
Jens