Einzelnen Beitrag anzeigen

pmros

Registriert seit: 8. Sep 2015
22 Beiträge
 
#1

Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

  Alt 12. Mai 2017, 21:00
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:
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
In der InvisibleClick Prozedur sollen dann eigentlich nur ButtonConfig, InvisiblePanel und MenuPanel entfernt werden.

Versuch 1:

Delphi-Quellcode:
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;
Die App crasht unter Android.

Versuch 2 (Ich lass den ersten Teil der Prozedur mal weg):

Delphi-Quellcode:
IP.Parent:=nil;
IP:=nil;
IP.DisposeOf;

MP.Parent:=nil;
MP:=nil;
MP.DisposeOf;

BtnConfig.Parent:=nil;
BtnConfig:=nil;
BtnCOnfig.DisposeOf;
Die App crasht unter Android.

Versuch 3:

Delphi-Quellcode:
IP:=nil;
IP.Owner.RemoveComponent(IP);
IP.free;

MP:=nil;
MP.Owner.RemoveComponent(MP);
MP.free;

BtnConfig:=nil;
BtnConfig.Owner.RemoveComponent(BtnConfig);
BtnConfig.free;
Natürlich Crash.

Solange ich nicht versuche
IP.DisposeOf; auszuführen, geht alles gut.

Delphi-Quellcode:
MP.DisposeOf;
BtnConfig.DisposeOf;
funktionieren.

Hat jemand eine Idee?
  Mit Zitat antworten Zitat