AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

Ein Thema von pmros · begonnen am 12. Mai 2017 · letzter Beitrag vom 15. Mai 2017
Antwort Antwort
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
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

  Alt 12. Mai 2017, 23:58
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.
Philip
  Mit Zitat antworten Zitat
pmros

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

AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

  Alt 13. Mai 2017, 11:29
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!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

  Alt 13. Mai 2017, 13:29
Mir war gar nicht beswusst, dass das zu Poblemen führen kann. Unter Windows hat das immer funktioniert,
Das war dann pures Glück.

Aber gibt es denn keine - sagen wir mal - elegantere Lösung dafür?
In solchen Fälle verlager ich die Löschfunktion in einen Eventhandler den ich per PostMessage(self.handle, UM_MyDefinedIDToDelete, 0, 0) von Windows aufrufen lassen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
pmros

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

AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

  Alt 13. Mai 2017, 13:38
den ich per (...) von Windows aufrufen lassen.
Ob das unter Android läuft...?
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
577 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Android ARC / DisposeOf - dynamisch erstellte Komponente entfernen

  Alt 15. Mai 2017, 10:57
Zitat:
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.
Was für Ressourcen verschwendest Du denn da?
Die paar Byte würden mich überhaupt nicht stören, Panel bei Nichtnutzung zur Seite schieben, bei Programmende aufräumen...

Ciao
Stefan
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz