Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frame zerstören... (https://www.delphipraxis.net/46842-frame-zerstoeren.html)

jaikai 1. Jun 2005 15:49


Frame zerstören...
 
Hi Leute,


Mehrere virtuell erzeugte Frames liegen auf einem Panel in der Form. Diese muß ich ja auch wieder zerstörern (gewöhnlich mit "Free"). Framenamen sind eindeutig. Die Komponenten des Frames liegen alle auf einem Panel und werden auf einem andern Panel innerhalb der Form dargestellt/erzeugt.

Ein unbenötigter Frame soll gelöscht werden...

Problem:
Wenn ich aber einen Button innerhalb des Frames habe und auf ButtonClick das "free" auslöse, bekomme ich einen EAbstraktError und Ende. Da der Frame intern noch irgendwas aktiv macht kommt dies wohl zwangsläufig zustande.

Plaziere ich in der Form neben dem Frame einen virtuellen Button, der das "Free" auslösen soll , hab ich die generelle Schwierigkeit, den richtigen Frame zu löschen.
Mit

Delphi-Quellcode:
(FindComponent(Uebergabe_Framename) as TFrame_Neu).free;
sollte ich eigentlich den eindeutigen Namen übergeben und zerstörern könne. Aber das ergebnis ist immer "nil" und nix passiert...

Hat jemand ne Lösung für mich?

Danke :(

barf00s 1. Jun 2005 15:51

Re: Frame zerstören...
 
EAbstractError besagt ja in der Regel das die Klasse die du benützt diese methode nicht implementiert, oder du falsch "gecastet" hast.

ein größeren einblick in deinen code wäre sicher hilfreich für "uns"

jaikai 1. Jun 2005 16:11

Re: Frame zerstören...
 
Also...

Im Muster-Frame (TFrame_Neu) mit all seinen Komponeneten gibts halt ein Icon, daß auf dem OnClick-Ereignis reagieren sollte...

Delphi-Quellcode:
procedure TFrame_Neu.Image3Click(Sender: TObject);
begin
  Uebergabe_Framename := name;
  // free;
end;
Lass ich nun den Image (als Button) mit der "free" Zeile starten, dann gibts den EAbstractError.

Ha! dachte ich und legte einen Button auf die Form neben dem Frame, der mit den übergebenen Parametern "Uebergabe_Framename" den Frame löschen kann. Könnte er auch, aber in der Zwischenzeit kann alles mögliche pasiert sein und der Parameter ist wech. Ergo - dieser Button ist blind und so kommt es nicht zum löschen des Frames.

Es gäbe noch die unelegante Methode über eine Liste den entsprechenden Frame zu löschen...

...und nun brauch ich eine Methode, wie der bestimmte unter vielen Frames (möglichst von innen, aus sich selbst heraus und per Click) sich selbst zerstört - aber eben ohne Errors.

shmia 1. Jun 2005 16:13

Re: Frame zerstören...
 
Zitat:

Zitat von jaikai
Ein unbenötigter Frame soll gelöscht werden...
Problem:
Wenn ich aber einen Button innerhalb des Frames habe und auf ButtonClick das "free" auslöse, bekomme ich einen EAbstraktError und Ende. Da der Frame intern noch irgendwas aktiv macht kommt dies wohl zwangsläufig zustande.

Innerhalb eines Events darfst du nicht das Steuerelement mit .Free freigeben!
Schau dir mal in der Code-Library den Betrag "Controls, die sich selbst zerstören" an:
http://www.delphipraxis.net/internal...ct.php?t=29732

jim_raynor 1. Jun 2005 17:54

Re: Frame zerstören...
 
Eventuell hast du glück und auch ein TFrame besitzt die Methode Release. Mit der wird das Objekt erst nach dem Eventhandler tatsächlich freigegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz