![]() |
Problem: In einer Prozedur ein Frame auf eine Form zuweisen
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:
auf diesen sollen natürlich noch Buttons usw.
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; 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 |
Re: Problem: In einer Prozedur ein Frame auf eine Form zuwei
müsste es nicht heißen:
Delphi-Quellcode:
damit geht natürlich die Variabilität verloren.
TframeOptionsClass = class of TframeOptions;
function TformMain.ShowWindow(pFrame: TFrame; pFrameClass: TframeOptionsClass): TForm; TFrameClass weiß ja nix von Deinem Constructor. Ich weiß jetzt nur nicht auf anhieb, ob man KLassentypen wieder Casten kann:
Delphi-Quellcode:
if pFrameClass is TframeOptions then
TframeOptions(pFrameClass).Create |
Re: Problem: In einer Prozedur ein Frame auf eine Form zuwei
Also:
ich habe den Constructor von dem Frame folgendermaßen geändert: alt:
Delphi-Quellcode:
constructor create(Owner: TComponent);
neu:
Delphi-Quellcode:
constructor create(Owner: TComponent);override;
(also override angefügt) und siehe da, es funktioniert! :-D Ich bin mir aber nicht sicher, ob dass so richtig ist und dem entspricht, was ich wollte. Sind vllt. irgendwelche "Tücken" dabei, die ich noch beachten müsste (wie Frame beim Beenden freigeben usw.) ?? Kann mir da nochmal bitte jmd. was dazu sagen ? Gruß, Paule |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz