Frame soll sich selbst schließen

Rund um die LCL und andere Komponenten
Antworten
ufkpra2
Beiträge: 32
Registriert: Fr 14. Mai 2010, 14:47
CPU-Target: i386
Wohnort: Ulm

Frame soll sich selbst schließen

Beitrag von ufkpra2 »

Hallo.

ich habe eine Form mit Frame drauf (wird zur Laufzeit erzeugt). Auf dem Frame befindet sich ein Button, der den Frame entfernen und freigeben soll.
Wie mache ich das am geschicktesten?

Gruß und Danke schonmal.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Frame soll sich selbst schließen

Beitrag von theo »

Mal ne andere Frage:
Bist du sicher, dass du dazu einen Frame benötigst?
Ich habe in meinem ganzen Leben noch keinen TFrame gebraucht, und nichts vermisst.
Meinst du nicht eher TPanel oder sowas?

ufkpra2
Beiträge: 32
Registriert: Fr 14. Mai 2010, 14:47
CPU-Target: i386
Wohnort: Ulm

Re: Frame soll sich selbst schließen

Beitrag von ufkpra2 »

Nun ja, es ist nun mal ein Frame.

Hat den Vorteil, dass Form und Frame unabhängig von verschiedenen personen gleichzeitig bearbeitet werden können.

Socke
Lazarusforum e. V.
Beiträge: 3178
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: Frame soll sich selbst schließen

Beitrag von Socke »

theo hat geschrieben:Mal ne andere Frage:
Bist du sicher, dass du dazu einen Frame benötigst?
Ich habe in meinem ganzen Leben noch keinen TFrame gebraucht, und nichts vermisst.
Meinst du nicht eher TPanel oder sowas?
Mit Frames kann man die Geschäftslogik (hab ich neulich bei Wikipedia gelesen :P) verschiedener GUI-Elemente wunderbar voneinander trennen. Außerdem finde ich drei Frames auf einem TNotebook übersichtlicher als ein Notebook mit hundert Komponenten.
ufkpra2 hat geschrieben:ich habe eine Form mit Frame drauf (wird zur Laufzeit erzeugt). Auf dem Frame befindet sich ein Button, der den Frame entfernen und freigeben soll.
Wie mache ich das am geschicktesten?
Gebe niemals ein Objekt in dem eigenen Ereignisbehandler (Event-Handler) frei. Das führt in der Regel zu einer darauf folgenden AccessViolation. Der richtige Weg wäre wohl, das Frame-Objekt vom Eltern-Objekt (in diesem Falle ein Formular) freigeben zu lassen. Ein einfacher Aufruf á la myform.freechildframe; funktioniert aber wegen der AV nicht. Also irgendwie unabhängig vom Mausklick aufrufen! Das geht mit Application.QueueAsyncCall();
Ne fertige Lösung darfst du dir selbst basteln :D
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

martin_frb
Beiträge: 588
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Frame soll sich selbst schließen

Beitrag von martin_frb »

frame.Release sollte auch im handler erlaubt sein => das wird verzögert ausgeführt

Für das sofortige visuelle entfernen Visible := false


Edit:
Application.ReleaseComponent(Frame)

Socke
Lazarusforum e. V.
Beiträge: 3178
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: Frame soll sich selbst schließen

Beitrag von Socke »

martin_frb hat geschrieben:frame.Release sollte auch im handler erlaubt sein => das wird verzögert ausgeführt
Release wird von TCustomForm eingeführt; TFrame stammt aber nicht davon ab.
martin_frb hat geschrieben:Application.ReleaseComponent(Frame)
genau das wird auch von TCustomForm.Release ausgeführt. Ich habe kurz über den Code von Application.ReleaseComponent drüber geschaut und auch einen Aufruf von QueueAsyncCall gefunden. Alles drumherum habe ich nicht ganz analysiert und kann auch nicht sagen, wofür das genau gut ist - sieht aber eher danach aus, wenn man mehrere bis viele Komponenten frei geben will.
Applicatoin.ReleaseComponent dürfte also alles tun, was man will, ohne dass man noch irgendetwas selbst schreiben müsste.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Frame soll sich selbst schließen

Beitrag von theo »

Socke hat geschrieben: Mit Frames kann man die Geschäftslogik (hab ich neulich bei Wikipedia gelesen :P) verschiedener GUI-Elemente wunderbar voneinander trennen.
Ja genau. So ist mir TFrame schon immer vorgekommen. Ideal um schlaue Sprüche loszuwerden, aber keiner weiss so wirklich was das soll. Aka: Over-engineering.

;-)

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Frame soll sich selbst schließen

Beitrag von mse »

theo hat geschrieben: Ja genau. So ist mir TFrame schon immer vorgekommen. Ideal um schlaue Sprüche loszuwerden, aber keiner weiss so wirklich was das soll.
TFrame wird beispielsweise verwendet, um identisch oder ähnlich aufgebaute widget Gruppen in einem oder mehreren Formularen zu bilden.
Beispiel: Mehrkanalmischpult. Vorteil: Änderungen an den "Baugruppen" müssen nur einmal vorgenommen werden.

Martin

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Frame soll sich selbst schließen

Beitrag von theo »

@mse: Danke, ich weiss schon ungefähr wozu das gedacht ist. Wie gesagt, mir ist das Bedürfnis noch nie untergekommen.
Ich frage mich dann einfach, ob ein Newbie wie ufkpra2 wirklich TFrame meint, wenn er TFrame verwendet ;-)

ufkpra2
Beiträge: 32
Registriert: Fr 14. Mai 2010, 14:47
CPU-Target: i386
Wohnort: Ulm

Re: Frame soll sich selbst schließen

Beitrag von ufkpra2 »

Ja, ich habe TFrame gemeint. ;-)

Danke nochmals an alle!

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Frame soll sich selbst schließen

Beitrag von theo »

ufkpra2 hat geschrieben:Ja, ich habe TFrame gemeint. ;-)
Ohne Begründung bringt diese Bemerkung nicht viel.
Ich kann auch der festen Meinung sein, ich brauche vier Ostfriesen welche die Leiter drehen, während ich drauf steh und die Glühbirne festhalte. ;-)

"Ich brauche vier Ostfriesen! Ich bin mir ganz sicher! Fragt bloss nicht wozu." ;-)

Nur ein Scherz....

Socke
Lazarusforum e. V.
Beiträge: 3178
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: Frame soll sich selbst schließen

Beitrag von Socke »

mse hat geschrieben:TFrame wird beispielsweise verwendet, um identisch oder ähnlich aufgebaute widget Gruppen in einem oder mehreren Formularen zu bilden.
Beispiel: Mehrkanalmischpult. Vorteil: Änderungen an den "Baugruppen" müssen nur einmal vorgenommen werden.

Martin
Das gleiche könnte man auch erreichen, wenn man dazu ein eigenes Control von TControl/TWinControl oder so ableitet. TFrame bietet dazu nur noch die bequeme Möglichkeit der grafischen Gestaltung der Oberfläche.
Man kann also auch wunderbar ohne auskommen. Mit TFrame kann man aber seinen Code einfach und mit grafischer Unterstützung in Units aufteilen. Ob das denn auch angebracht ist, muss im Einzelfall geklärt werden.

Das gleiche kann man auch mit einem eigenen Formular erreichen. Man muss nur selbst (im Code) den Parent entsprechend setzen. Dafür hat man aber auch wieder einiges an Overhead, den TFrame bewusst nicht implementiert (es ist und kann kein Fenster sein).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten