Einzelnen Beitrag anzeigen

ColeZero

Registriert seit: 6. Sep 2007
18 Beiträge
 
#1

[Gelöst]Eigene Komponenten ruft über Designer kein Create auf

  Alt 2. Aug 2010, 15:34
Hallo zusammen ,

ich habe eine eigene Komponente entwickelt, oder besser gesagt, bin dabei.
Ich habe die letzten Wochen damit verbracht, ein Klassenmodell zu entwickeln, mit Inhalt zu füllen und nun in eine schöne Komponente zu verpacken.
Meine Komponente funktioniert soweit bestens, wenn ich sie "manuell" benutze.

Beispiel:
Meine Komponente:
Delphi-Quellcode:
unit Component1;

interface

uses
  SysUtils, Classes;

type
  TMyCompo = class(TComponent)
  private
    { Private declarations }
    procedure DoSomethingImportant;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create;
    destructor Destroy;override;
  public
    procedure DoFoobar;
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TComponent1]);
end;

{ TMyCompo }

constructor TMyCompo.Create;
begin
  inherited;
  DoSomethingImportant;
end;

destructor TMyCompo.Destroy;
begin
  inherited;
end;

procedure TMyCompo.DoSomethingImportant;
begin
  Foobar;
end;

end.
Mit "Manuell" meine ich folgendes:
Ich deklariere mir eine Variable vom Typ TMyCompo:
Delphi-Quellcode:
var
  myCompo: TMyCompo;
Und benutze sie dann:

Delphi-Quellcode:
 myCompo := TMyCompo.Create;
 myCompo.DoFoobar;
Am Ende dann ein

Delphi-Quellcode:
if Assigned(myCompo) then
 myCompo.free;

Das funktioniert wunderbar.
Wenn ich die Komponente nun aber über den Designer auf meine Form ziehe und
mein Programm ausführe, also so:


Delphi-Quellcode:
  TForm1 = class(TForm)
    MyCompo1: TMyCompo;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
und diese dann benutzen will:

Delphi-Quellcode:
procedure Button1CLick(Sender : TObject);
begin
 MyCompo1.DoFoobar;
end;
gibt es einen crash, weil ich feststellte, dass das Create der KOmponente nicht ausgeführt worden ist.
Weil die Prozedure, in dem Fall:

DoSomethingImportant

nicht ausgeführt wurde. Und es ist wichtig, dass DoSomethingImportant ausgeführt wird, damit DoFoobar funktioniert.

Kann ich also davon ausgehen, dass das Create nicht aufgerufen wurde?
Bzw. was kann ich tun, dass das Create meiner Komponente trotz Designer richtig ausgeführt wird?

Viele Grüßen bei weiteren Fragen bitte melden

Geändert von ColeZero ( 2. Aug 2010 um 16:47 Uhr) Grund: [Gelöst]
  Mit Zitat antworten Zitat