Seid gegrüßt!
Also, folgendes Problem:
Ich habe in meiner Anwendung zur Designzeit 1 Form und mehrere Frames erstellt.
Einer der Frames ist folgendermaßen deklariert:
Delphi-Quellcode:
TframeOptions = class(TFrame)
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
constructor Create(Sender: TComponent);
destructor Destroy;
end;
...
constructor TframeOptions.Create(Sender: TComponent);
begin
inherited Create(Sender);
//tue was...
end;
destructor TframeOptions.Destroy
begin
inherited;
end;
auf diesen sollen natürlich noch Buttons usw.
Nun möchte ich durch einen Klick auf einen Button im Hauptformular ein neues Fenster zur Laufzeit erstellen und darauf ein entsprechendes Frame legen. Dafür möchte ich eine function benutzen, der ich nur das Frame übergeben möchte, welches ich anzeigen lassen will.
Ich habe mir da folgendes überlegt:
Delphi-Quellcode:
type TFrameClass = Class of TFrame;
function TformMain.ShowWindow(pFrame: TFrame; pFrameClass: TFrameClass): TForm;
begin
Result := TForm.Create(Self);
Result.Hide;
pFrame := pFrameClass.Create(Result); //hier wird der constructor von TframeOptions NICHT aufgerufen **
Result.Height := pFrame.Height;
Result.Width := pFrame.Width;
pFrame.Parent := Result;
pFrame.Align := alClient;
Result.Show;
end;
procedure TformMain.Button1Click(Sender: TObject);
var
t: TframeOptions;
begin
//t := TframeOptions.Create(Self); //hier wird der constructor von TframeOptions aufgerufen ****
ShowWindow(t, TframeOptions);
end;
Fenster erstellen und Frame darauf legen funktioniert auch. Allerdings wird in der function ShowWindow der Constructor von TframeOptions
nicht ausgeführt(siehe **), was er aber, wenn ich testweise den Frame ausserhalb erstelle (****).
Da ich aber beim Erstellen des Frames etwas ausführen möchte, muß der Constructor ausgeführt werden.
Kann mir da mal jemand helfen und mir vllt. mal erklären, wo ich da falsch denke?
Schönen Gruß,
Paule