Free Pascal programmieren lernen.

TFrame

Einleitung:

In Lazarus kann man Frames vom Typ TFrame verwenden und diese als Komponente laden. In einem Frame kann man Programmteile auslagern. Wie man einen Frame in ein Form laden kann beschreibe ich in dem folgenden Artikel.

Den Beitrag als Video ansehen:

TFrame Beispiel Software

TFrame Beispiel Software

Teil 01: Die Software GUI

Ich das Form1 genommen und ein TMainMenu auf ihm platziert. Das Menu hat verschiedene Einträge. Wir benötigen hier zwei. In meinem Beispiel sind des die Buttons Ticket und Asset die ich verwendet habe.

Teil 02: Anlegen der Frames

Frame erstellen

Frame erstellen

In Lazarus unter Neu-> Frame können wir einen neuen Frame vom Typ TFrame anlegen. Speichern Sie den Frame dann ab. Ich habe die Frames ticket und asset genannt. In diesen Frames können wir nun zur Unterscheidung unterschiedliche Inhalte und Komponenten anlegen

Teil 03: Prozedur giveFrameFree erstellen

Als nächstes legen wir in unserer Software eine neue Prozedur diese trägt den Namen giveFrameFree und macht genau das die Frames die wir laden freigeben. Nachfolgend der Quelltext mit Erläuterungen.

procedure TForm1.giveFrameFree;
begin
TFrame1(FindComponent('FrmAsset')).Free;
TFrame2(FindComponent('FrmTicket')).Free;
end;

Der Kopf der Prozedur lautet: procedure TForm1.giveFrameFree; Das Wort procedure zeigt das es sich um eine Prozedur handelt. TForm1 ist das Formular indem sich die Prozedur befindet und giveFrameFree; ist der beschreibende und ausdruckstarke Name der Prozedure. Das Word begin leitet den Rumpf der Prozedur ein und das Wort end; schließt diesen wieder.

In Schritt 04 legen wir zwei OnClick Ereignisse an die wir laden möchten. In den Anweisungen die in der oben stehenden Prozedur stehen geben wir diese wieder frei. Der erste Frame vom Typ TFrame1 trägt den Namen ‚FrmAsset‘ . mit der Funktion FindComponent suchen wir die Komponenten und geben diese mit .Free wieder frei.

Teil 04: OnClick Ereignisse erstellen
Wir können einen Frame nutzen wie eine Komponente die zur Laufzeit eingebunden wird. Erstellen Sie unter dem Menüpunkt Asset und Ticket folgende OnClick Ereignisse. Gehen Sie dafür in das TMainmenu und Rufen Sie den richtigen Button mit einem Doppelklick auf. Die Prozeduren werden im Quelltext automatisch angelegt. Quellcode nachfolgend:

procedure TForm1.MenuItem1Click(Sender: TObject);
var
frmAsset : TFrame1;
begin
// Alle Frames freigeben
giveFrameFree;

frmAsset := TFrame1.Create(Self);
frmAsset.parent := Form1;
frmAsset.top := 0;
frmAsset.left := 0;
frmAsset.name := 'FrmAsset';
end;

procedure TForm1.MenuItem2Click(Sender: TObject);
var
frmTicket : TFrame2;
begin
// Alle Frames freigeben
giveFrameFree;
// Erstelle den Frame
frmTicket  := TFrame2.Create(Self);
frmTicket.parent := Form1;
frmTicket.top := 0;
frmTicket.left := 0;
frmTicket.name := 'FrmTicket';
end;

Beide Prozeduren sind gleich aufgebaut und können daher auch durch eine dynamische Prozedur ersetzt werden. Ich beschreibe nun nachfolgend den Quelltext der Prozedur MenuItem2Click. Wird auf den Button mit dem Namen Ticket geklickt erstellen wir eine Variable var vom Typ TFrame2 mit dem Namen frmTicket. In der Prozedur selber rufen wir als erstes unsere selbst erstellte Prozedur auf um alle Frames freizugeben. Danach erstellen wir unseren benötigten Frame mit frmTicket  := TFrame2.Create(Self);. Im zweiten Schritt sagen wir das das Eltern Element das Form1 sein soll. Wir könnten auf unserem Form1 auch ein neues Panel erstellen und hier die Daten laden. Das bleibt euch überlassen. In den nächsten beiden Zeilen legen wir den Abstand von Oben (Top) fest und den Abstand von links (Left) fest. In der letzten Anweisung legen wir den Namen des Frames fest. Wichtig den Namen kann es nur einmal geben. Wollt ihr dynamisch mehrere Frames desselben Typs laden könnt ihr z.B. über eine for Schleife den Namen mit einer fortlaufenden Nummer versehen. Dies könnte z.B. bei einem Ticketsystem das Dashboard sein. Hier könnte ich mir ein Frame WorkerTicket vorstellen. Dieser zeigt an welche Tickets welcher Mitarbeiter gerade bearbeitet. Das es mehrere Mitarbeiter in einem Team gibt die Frames alle gleich sein können, bleiben könntet ihr diese dynamisch über eine for Schleife laden und die Zustände in einer Datenbank speichern, damit diese bei jedem neuen Start geladen werden können.

Beispielsoftware herunterladen. Die Datei ist als Zip mit 7Zip gepackt. Die Software wurde unter Windows 10 64Bit Version 1909 erstellt und unter Linux Mint 20.1 Ulyssa getestet. Beide Versionen sind lauffähig.

Update: Ereignisse OnShow OnCreate bei einem Frame.

Um Bei einem Frame ein In Create oder OnShow Ereigniss nutzen zu können, kann man den Constructor Create überschreiben.

Bei den Funktionen ergänzt man unter public

constructor Create(AOwner: TComponent); override;
Der Code sorgt dafür das ihr mit der unten stehenden Funktion den Constructor überschreiben könnt.

Unter implementation fügt ihr folgende hinzu.

uses
startu1;
In meinem Programm (Update siehe unten) lesen wir Daten aus dem Form1 aus und setzen dann die Caption des PageSheet auf Geräte oder Assts.

Der Constructor selbst sieht dann z.B so aus.

constructor TFrame2.Create(AOwner: TComponent);
begin
inherited Create(AOwner);

if (Form1.CBMMLanguage.ItemIndex = 1) then
begin
TabSheet1.Caption := 'Geräte';
end;
if (Form1.CBMMLanguage.ItemIndex = 0) then
begin
TabSheet1.Caption := 'Assets';
end;
end;

Update: Beispiel Software Update:

Herunterladen der Beispiel Software


Beitrag kommentieren

Bitte verfasse einen Kommentar.

Dein Kommentar wird vor der Freischaltung von einem Admin moderiert.