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:
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