Frames/de
│
Deutsch (de) │
English (en) │
suomi (fi) │
русский (ru) │
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".
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.
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:
Das Frame, auf einem Formular platziert:
Das selbe Frame, auf einem anderen Formular platziert:
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.
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.
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.