Einzelnen Beitrag anzeigen

Benutzerbild von sh17
sh17

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

Re: Dynamisch erzeugtes Frame freigeben ...

  Alt 2. Nov 2005, 08:58
1. Du legst Dir eine Variable

CurrentFrame : TTntFrame; an zentraler Stelle an (im Hauptformular oder einer gemeinsamen Unit)

2 .Du legst im Hauptformular ein Panel als Container für die Frames an.

3. Die TreeView-Click-Funktion:

Delphi-Quellcode:
procedure TDPR00001Form1.MenuTreeClick(Sender: TObject);
begin
  if CurrentFrame <> nil then begin
    CurrentFrame.Free;
    CurrentFrame := nil;
  end;

  if MenuTree.Selected.Text = _('Logintabelle') then begin TDPR001Frame1.ShowFrame(Panel1); exit; end;
  if MenuTree.Selected.Text = _('Sprache') then begin TDPR001Frame14.ShowFrame(Panel1); exit; end;
...
end;
4. Jedes Frame verfügt über eine statische ShowMethode:

Delphi-Quellcode:
  public
    class procedure ShowFrame(_Parent : TWinControl);
  end;

...

class procedure TDPR001Frame4.ShowFrame(_Parent: TWinControl);
begin
  DPR00001Form1.CurrentFrame := TDPR001Frame4.Create(_Parent);
  with TDPR001Frame4(DPR00001Form1.CurrentFrame) do
  begin
    Parent := _Parent;
    Align := alClient;
  end;
end;
5. Schliesen des Frames vom Frame aus:

Delphi-Quellcode:
procedure TDPR001Frame4.ButtonFrameCloseClick(Sender: TObject);
begin
  PostMessage(Application.MainForm.Handle,WM_USER+3333,0,0);
end;
6. Das Gegenstück im Hauptformular

Delphi-Quellcode:
    procedure OnCloseFrame(var _Msg : TMessage); message WM_USER+3333;

...

procedure TDPR00001Form1.OnCloseFrame(var _Msg: TMessage);
begin
  if CurrentFrame <> nil then
  begin
    CurrentFrame.Free;
    CurrentFrame := nil;
  end;
end;
Sven Harazim
--
  Mit Zitat antworten Zitat