Einzelnen Beitrag anzeigen

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