TFrame - Inhalt ändern

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: TFrame - Inhalt ändern

Beitrag von theo »

Die Erklärung von Hitman greift etwas zu kurz. Die Aspekte der Vererbung und der visiuellen Gestaltung müssten noch erwähnt werden:

http://books.google.ch/books?id=W2NoGUF ... t&resnum=9

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: TFrame - Inhalt ändern

Beitrag von Latze »

Die Übersichtlichkeit ist genau das, was mir bei PageControl überhaupt nicht gefällt. Ich habe jetzt angefangen, das Programm einfach mal damit zu gestalten und bei der 2ten Page wird es schon sehr unschön. Auf jeder Page sind diverse Edits, ListBoxen, ComboBoxen und Labes (hab schon über 90 Objekte und bräuchte allein für den ersten Bereich noch ca. 3 - 4 Pages). Das Programm wird ein FrontEnd für eine recht umfangreiche MySQL-Datenbank, wodurch noch diverse Prozeduren hinzukommen würden. Ich werde mir mal den Link von theo etwas weiter ansehen, weil ich mich gerade wieder auf TFrame einschieße. Grund: Ich möchte nicht unbedingt diverse Fenster öffnen sondern das ganze schön in einem Fenster halten aber trotzdem den Code übersichtlich halten.
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: TFrame - Inhalt ändern

Beitrag von Scotty »

Ein Designvorschlag: nimm ein TreeView und erzeuge die notwendigen Steuerelemente dynamisch. In etwa so, wie die Optionen von Lazarus aussehen.

pluto
Lazarusforum e. V.
Beiträge: 7179
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TFrame - Inhalt ändern

Beitrag von pluto »

Das hatte ich mal gemacht. In Lazarus sind das glaube ich einzelne Forms. Früher war es aufjedenfall so. Bevor es den einhaltlichen "Baum" gab.
Das würde ich auch mit verschiedenen Forms lösen Wo ich das Parent entsprechend setzte. Ob das unter Lazarus klappt weiß ich nicht unter Delphi ging das. Da konnte ich ein Form in ein Panel packen und es hat sich auto. Angepasst.
MFG
Michael Springwald

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: TFrame - Inhalt ändern

Beitrag von Hitman »

pluto hat geschrieben:Das hatte ich mal gemacht. In Lazarus sind das glaube ich einzelne Forms. Früher war es aufjedenfall so. Bevor es den einhaltlichen "Baum" gab.
Das würde ich auch mit verschiedenen Forms lösen Wo ich das Parent entsprechend setzte. Ob das unter Lazarus klappt weiß ich nicht unter Delphi ging das. Da konnte ich ein Form in ein Panel packen und es hat sich auto. Angepasst.


Das geht schon, ich sehe da aber keinen Vorteil gegenüber einem TFrame ... nur ist der TFrame eben genau für sowas gedacht und daher ein Tick leichter handhabbar. Wieso bist du so abgeneigt gegen TFrame? ;)

pluto
Lazarusforum e. V.
Beiträge: 7179
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TFrame - Inhalt ändern

Beitrag von pluto »

Weil, ich unter Delphi damit nur Probleme hatte. Z.B. Funktioniert die Events nicht richtig. Ich hatte mal auf ein Frame eine Listbox gepackt. Jedoch klappte die OnKey* Events nicht. Unter Lazarus müsste ich das mal testen. Das Beispiel mit den Einstellungs Dialog von Lazarus ist nicht schlecht. Dafür sind sie bestimmt besser, als wenn man ein "NoteBook" nutze
MFG
Michael Springwald

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: TFrame - Inhalt ändern

Beitrag von Latze »

Hallo,

ich hab nun auch etwas gefunden, was mich ziemlich nah an mein Ziel bringt in einem kleinen Projekt ausprobiert. Ich beschreibe das hier mal ganz kurz um anderen, die vor dem gleichen Problem stehen, zu helfen und um Kritik kriegen zu können.

Form1 wird mein Hauptfenster und beinhaltet neben einem Button ein TPanel, wo dann Form2 erscheint. Dazu habe ich die unit von Form2 unter uses in unit1 eingetragen. Dazu in den private declarations noch

Code: Alles auswählen

FForm2 : TForm2;


Um Form2 erscheinen zu lassen:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
 FForm2 := TForm2.Create(Panel1);
 FForm2.Parent := Panel1;
 FForm2.BorderStyle := bsnone;
 FForm2.Align := alClient;
 FForm2.Show;
end;


Das ganze habe ich dann noch um Form3 erweitert und es funktioniert ganz gut.

Danke an alle, die mich in die richtige Richtung gebracht haben (solange sie denn Richtig ist :wink: ).

Gruß
Latze
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

pluto
Lazarusforum e. V.
Beiträge: 7179
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TFrame - Inhalt ändern

Beitrag von pluto »

Vergisst du nicht Form2 auch wieder frei zugeben ? sonst wird es jedes mal neu belegt. Im Übrigen heißt das was du machst: Forms Dynamisch erzeugen. Im Übrigen habe ich genau das gemeint, als ich davon sprach: Den Parent von Form2 zu ändern. Schön das, dass auch in Lazarus geht.

Schau mal nach include Dateien, die LCL ist drauf aufgebaut. Sie helfen ebenfalls eine unit zu strukturieren.
MFG
Michael Springwald

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: TFrame - Inhalt ändern

Beitrag von Latze »

Hab leider keine (oder inzwischen sehr wenig?) Ahnung von objektorientierter Programmierung, darum bin ich wohl nicht dahinter gekommen, als du mir den Tip gegeben hast. Bisher konnte ich mir mit Free Pascal (vor einigen Jahren von Turbo Pascal umgestiegen) immer sehr gut helfen, da meine Programme in der Regel auf einem Server laufen (meist Linux auf der Console).

Wenn ich da jetzt das richtige gefunden habe:

Code: Alles auswählen

procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  release;
  form2 := nil;
end;


Danke für die Hilfe
Latze
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: TFrame - Inhalt ändern

Beitrag von Hitman »

Vorsicht ... oben weist du die private FForm2 variable zu, unten gibst du aber "Form2" frei ... das ist NICHT das selbe ;)

pluto
Lazarusforum e. V.
Beiträge: 7179
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TFrame - Inhalt ändern

Beitrag von pluto »

Du musst nach der Verwendung einfach nur From2.Destroy aufrufen oder FreeAndNil(Form2).
Damit gibt du die Instanz wieder frei. Am besten packst du "FForm2 : TForm2" als Lokale Variable Definition.
Dann gibt es keine Probleme. Es sei denn du greifst noch von einer anderen Stelle auf fForm2 drauf zu.
MFG
Michael Springwald

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: TFrame - Inhalt ändern

Beitrag von Latze »

Man soll es nicht glauben, ich hab es kapiert :wink: Danke dafür.
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TFrame - Inhalt ändern

Beitrag von Socke »

Da hier im Thread auf das richtige Freigeben der Fenster hingewiesen wurde, möchte ich Dir nahe legen, die Unit heaptrc einzubinden, mit der genau dies überprüft werden kann (in den Compiler-Optionen).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: TFrame - Inhalt ändern

Beitrag von Latze »

Danke für den Tip
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Antworten