Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem: In einer Prozedur ein Frame auf eine Form zuweisen (https://www.delphipraxis.net/63249-problem-einer-prozedur-ein-frame-auf-eine-form-zuweisen.html)

Paul Schmidt 15. Feb 2006 22:42


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

sh17 16. Feb 2006 05:31

Re: Problem: In einer Prozedur ein Frame auf eine Form zuwei
 
müsste es nicht heißen:

Delphi-Quellcode:
TframeOptionsClass = class of TframeOptions;

function TformMain.ShowWindow(pFrame: TFrame; pFrameClass: TframeOptionsClass): TForm;
damit geht natürlich die Variabilität verloren.

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

Paul Schmidt 16. Feb 2006 07:04

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 13:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz