![]() |
Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen
Hallo erst mal,
ich habe mich jetzt schon tot gesucht zu dem Thema und alle Lösungen die es gibt funktionieren nicht. Ich generiere zwei TRectangle und einen TButton bei Berührung eines Buttons. Das "InvisiblePanel" ist nicht sichtbar und soll dafür da sein, herauszufinden wann außerhalb des zweiten Rectangles (dem MenuPanel) gedrückt wird.
Delphi-Quellcode:
In der InvisibleClick Prozedur sollen dann eigentlich nur ButtonConfig, InvisiblePanel und MenuPanel entfernt werden.
procedure TForm1.MenuPanel;
var MP:TRectangle; IP:TRectangle; BtnConfig:TButton; begin if FindComponent('InvisiblePanel') = nil then begin //-------------------------------------------> Inivisble Panel IP:=TRectangle.Create(self); IP.Parent:=Form1; IP.Name:='InvisiblePanel'; IP.Width:=Form1.Width; IP.Height:=Form1.Height; IP.Position.X:=0; IP.Position.Y:=0; IP.OnClick:=InvisibleClick; IP.Fill.Color:=StringToAlphaCOlor('null'); //-------------------------------------------> Menu Panel MP:=TRectangle.Create(self); MP.Parent:=Form1; MP.Name:='MenuPanel'; MP.Width:=300; MP.Height:=300; MP.Position.X:=Form1.Width-300; MP.Position.Y:=73; //------------------------------------------> Buttons BtnConfig:=TButton.Create(self); BtnConfig.Parent:=Form1; BtnConfig.Name:='ButtonConfig'; BtnConfig.Width:=300; BtnConfig.Height:=50; BtnConfig.Position.X:=Form1.Width-300; BtnConfig.Position.Y:=73; //BtnConfig.OnClick:=ConfigClick; BtnConfig.ComponentIndex:=2; BtnConfig.Text:='Einstellungen'; end Versuch 1:
Delphi-Quellcode:
Die App crasht unter Android.
procedure TForm1.InvisibleClick(Sender: TObject);
var MP,IP:TRectangle; BtnConfig:TButton; begin IP:=FindComponent('InvisiblePanel') as TRectangle; MP:=FindComponent('MenuPanel') as TRectangle; BtnConfig:=FindComponent('ButtonConfig') as TButton; IP.DisposeOf; MP.DisposeOf; BtnConfig.DisposeOf; end; Versuch 2 (Ich lass den ersten Teil der Prozedur mal weg):
Delphi-Quellcode:
Die App crasht unter Android.
IP.Parent:=nil;
IP:=nil; IP.DisposeOf; MP.Parent:=nil; MP:=nil; MP.DisposeOf; BtnConfig.Parent:=nil; BtnConfig:=nil; BtnCOnfig.DisposeOf; Versuch 3:
Delphi-Quellcode:
Natürlich Crash.
IP:=nil;
IP.Owner.RemoveComponent(IP); IP.free; MP:=nil; MP.Owner.RemoveComponent(MP); MP.free; BtnConfig:=nil; BtnConfig.Owner.RemoveComponent(BtnConfig); BtnConfig.free; Solange ich nicht versuche
Delphi-Quellcode:
auszuführen, geht alles gut.
IP.DisposeOf;
Delphi-Quellcode:
funktionieren.
MP.DisposeOf;
BtnConfig.DisposeOf; Hat jemand eine Idee? :? |
AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen
Naja, Du gibts während des Events das ausführende Control frei. Starte einen Timer im OnClick der nach 1 Sekunde das Panel frei gibt.
|
AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen
Mir war gar nicht beswusst, dass das zu Poblemen führen kann. Unter Windows hat das immer funktioniert, auch wenn ich verstehe warum das eigentlich nicht wirklich der richige Weg ist.
Aber gibt es denn keine - sagen wir mal - elegantere Lösung dafür? Ich könnte im OnClick Ereignis sagen, dass das Panel außerhalb des sichtbaren Bereiches verschoben wird, damit die Elemente darunter wieder erreichbar werden, aber das würde unnötig Resourcen verschwenden wenn ich das Panel nicht frei gebe. Das mag jetzt vielleicht für das Projekt nicht so wichtig sein und mein Code eh noch nicht sehr sauber, aber ich würde trotzdem gerne eine saubere Lösung haben. Aber danke schon mal für den Hinweis! |
AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen
Zitat:
Zitat:
|
AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen
Zitat:
|
AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen
Zitat:
Die paar Byte würden mich überhaupt nicht stören, Panel bei Nichtnutzung zur Seite schieben, bei Programmende aufräumen... Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 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-2025 by Thomas Breitkreuz