Sign in Join
Wiki copytemporary

Revision 3 of 3, by WikiArchive on 11-9-2026. The page as it is now.

Frames/de

TFrames sind benannte Container für Komponenten und sind Formularen sehr ähnlich. Ihre einzigartige Fähigkeit besteht darin, dass sie in Formulare oder andere Frames eingebettet werden können. Als Formulare werden sie in zwei Dateien gespeichert: Der Code wird in einer .pas-Datei gespeichert, das Design in einer .lfm-Datei.

Wie kann ich ein neues Frame erstellen?

Wählen Sie den Menüpunkt Datei und klicken Sie den Unterpunkt Neu... an. Wählen Sie im sich öffnenden Dialog "Frame".

Frame new.PNG

Wie platziere ich ein Frame auf einem Formular oder einem anderen Frame?

Die Registerkarte Standard der Komponentenpalette enthält die Komponente "TFrame". Wenn Sie sie auf dem Formular oder einem anderen Frame ablegen, werden Sie von der IDE dazu aufgefordert, einen der Projektframes auszuwählen (Der Auswahldialog wird erst erscheinen, wenn die TFrame-Komponente auf der Form platziert wurde, nicht wenn man einfach auf das Icon in der Toolbar klickt). Frames in Packages können noch nicht angegeben werden, jedoch können Sie auch Frames im Code erstellen, die auch in Packages sein können. Sie können keine Frame Circles erstellen - die IDE wird es verbieten, d. h. Sie können FrameA nicht in FrameA platzieren, ebenso wenig ein Frame, das FrameA in FrameA enthält.

Frame add.PNG

Wofür können Frames benutzt werden?

Sie werden benötigt, wenn Sie eine Gruppe von Komponenten haben, die Sie in mehreren Formularen wiederverwenden möchten. Die Gruppe sollte in verschiedenen Fenstern (Formularen) Ihrer Anwendung über dieselben Steuerelemente und dieselbe Logik verfügen. Sie können diese sich wiederholenden Komponenten und Logik in einem Frame gruppieren und diesen Frame an verschiedenen Stellen verwenden. Dafür müssen Sie die Arbeit der Anordnung der Komponenten und des Schreibens ihrer Logik nicht wiederholen.

Sie haben beispielsweise zwei ListBoxes und Buttons, um Elemente zwischen ihnen zu verschieben. Sie können also ein Frame mit zwei ListBoxes und den notwendigen Buttons erstellen, die Logik für die sich bewegenden Elemente schreiben und Ihr Frame bei Bedarf für alle Formulare verwenden. Wenn Sie außerdem einen Fehler im Frame-Code finden, können Sie ihn einmal im Code beheben, anstatt ihn x-mal in allen Formularen zu beheben.

Ein Frame im Designer:

Frame example.PNG

Das Frame, auf einem Formular platziert:

Frame embedded.PNG

Das selbe Frame, auf einem anderen Formular platziert:

Frame embedded2.PNG

Private Variablen initialisieren

TFrame verfügt nicht über OnCreate- oder OnDestroy-Ereignisse, in denen private Variablen initialisiert und freigegeben werden können. Überschreiben Sie dazu den Standardkonstruktor und den Destruktor.

pascal
TFrame1 = class(TFrame)
      private
        MyObj: TObject;
      public
        constructor Create(TheOwner: TComponent); override;
        destructor Destroy; override;
      end; 
    
    constructor TFrame1.Create(TheOwner: TComponent);
    begin
      inherited Create(TheOwner);
      MyObj := TObject.Create;
    end;
    
    destructor TFrame1.Destroy;
    begin
      MyObj.Free
      inherited Destroy;
    end;

Beispiel für eine dynamische Erstellung

Leichter, da eine TFrame-Komponente in der Komponentenpalette nicht erforderlich ist. Sie können außerdem eine Seitenwechsel-Anwendung (wie eine Smartphone-Anwendung) mit sicheren Ressourcen erstellen.

pascal
unit Unit1;
    
    {$mode objfpc}{$H+}
    
    interface
    
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
    
    type
    
      { TForm1 }
    
      TForm1 = class(TForm)
        Button1: TButton;
        GroupBox1: TGroupBox;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
        Frame: TFrame;
      public
        { public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    uses
      Unit2{TFrame1}, Unit3{TFrame2}, Unit4{TFrame3};
    
    {$R *.lfm}
    
    { TForm1 }
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Frame := TFrame1.Create(GroupBox1);
      Frame.Parent := GroupBox1;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not Assigned(Frame) then
      begin
        Frame := TFrame1.Create(GroupBox1);
        Frame.Parent := GroupBox1;
      end else if Frame is TFrame1 then begin
        Frame.Free;
        Frame := TFrame2.Create(GroupBox1);
        Frame.Parent := GroupBox1;
      end else if Frame is TFrame2 then begin
        Frame.Free;
        Frame := TFrame3.Create(GroupBox1);
        Frame.Parent := GroupBox1;
      end else begin
        FreeAndNil(Frame);
      end;
    end;
    
    end.

Siehe auch


From the Free Pascal wiki, page "Frames/de", as the Internet Archive kept it on 2025-03-23, last changed on 2024-11-09. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.