AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem: In einer Prozedur ein Frame auf eine Form zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: In einer Prozedur ein Frame auf eine Form zuweisen

Ein Thema von Paul Schmidt · begonnen am 15. Feb 2006 · letzter Beitrag vom 16. Feb 2006
Antwort Antwort
Paul Schmidt

Registriert seit: 7. Feb 2006
22 Beiträge
 
#1

Problem: In einer Prozedur ein Frame auf eine Form zuweisen

  Alt 15. Feb 2006, 23:42
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
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem: In einer Prozedur ein Frame auf eine Form zuwei

  Alt 16. Feb 2006, 06:31
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
Sven Harazim
--
  Mit Zitat antworten Zitat
Paul Schmidt

Registriert seit: 7. Feb 2006
22 Beiträge
 
#3

Re: Problem: In einer Prozedur ein Frame auf eine Form zuwei

  Alt 16. Feb 2006, 08:04
Also:

ich habe den Constructor von dem Frame folgendermaßen geändert:

alt:
constructor create(Owner: TComponent);
neu:
constructor create(Owner: TComponent);override;
(also override angefügt) und siehe da, es funktioniert!


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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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