![]() |
AW: Button Selbstzerstörung
einfachste Version: mach den Button selbstmord nicht im onClick, sondern im OnMouseUp/OnKeyUp
Die Exceptions kommen, weil normalerweise eben nach OnClick noch einige andere Events kommen, die dann bei bereits zerstörter Instanz knallen. |
AW: Button Selbstzerstörung
Hallo!
Danke für die vielen Reaktionen. :wink: Hier einige Details zu meinem Projekt und wofür ich das brauche: - Firemonkey Desktop und Mobile App (XE8) - dynamsiche virtuelle UI für verschiedene hierachische Layer (Erzeugung neuer) - ich nenne sie in der Datenbank allgemein "bubbles" - das "Zerstören" hab ich sowieso nicht in einem OnClick-Event sondern in einem MouseUp-Event (brauch ich für die Toucheingabe -> speziell Win10 (LongPress)) - mein Beispiel hier ist eine sehr vereinfachte Darstellung des Problems - Lösung wurde von Sir Rufo gegeben die bereits eingebaut ist und bestens funktioniert - Danke nochmal |
AW: Button Selbstzerstörung
Zitat:
Bei der geschilderten Aufgabe halte ich es jedenfalls nicht für zielführend, ständig Buttons zu zerstören und neu zu erstellen. Es wäre hier meines Erachtens eben wesentlich gescheiter, mit einem Feld von vorher erstellten Buttons zu operieren (oder, falls keine sinnvolle Maximalzahl angegeben werden kann, die Buttons bei Bedarf on the Fly zu erstellen, wenn keine unsichtbaren Buttons mehr in Reserve sind), die je nach Bedarf angezeigt werden oder nicht. |
AW: Button Selbstzerstörung
Zitat:
|
AW: Button Selbstzerstörung
Ok - noch ein paar Infos.
Es handelt sich nicht um "gewöhnliche Buttons" die ich dynamisch erstellen muss, sondern um irgendwelche Objekte. Da gibt es keine maximale Anzahl statischer Objekte. Die Objekte sind z.b. Häuser, Bäume, Autos In einem anderen Fall Sonnensysteme, Planeten, Monde Oder auch nur Kreise, Rechtecke, Linien, ... Darum nenne ich sie allgemein Bubbles... :cyclops: |
AW: Button Selbstzerstörung
Zitat:
|
AW: Button Selbstzerstörung
Zitat:
Delphi-Quellcode:
und die Controls, die man gerade nicht braucht, statt zu löschen, einfach invisible setzen.
Type
Form1=class(Tform) private FObjects: array of TControl; ... function Form1.Newcontrol (Typ: TControlClass): TControl; var l: integer; o: TControl; begin for o in FObjects do if not o.visible and (o is Typ) then begin o.Visible:=true; result:=o; exit; end; result:=Typ.Create(self); result.Parent:=self; l:=length(FObjects); setlength(FObjects, l+1); FObjects[l]:=result; end; |
AW: Button Selbstzerstörung
Das muss nicht der bessere Ansatz sein.
Wenn Du jetzt 1 Button und 20 Labels hast und in der nächsten Darstellung 1 Label und 20 Buttons und in der nächsten Darstellung 10 Checkboxen und 1 Edit würde es einen unnötigen Aufwand mit sich bringen, die aussortierten Controls ständig weiter mitzuschleppen und zu behandeln. Wenn man z.B. ein Control sucht muss man ggf. auch nochmal die Karteileichen überprüfen. Es gibt natürlich Anwendungsfälle, wo solch eine Pufferung sinnvoll ist, aber ganz generell kann man das sicher nicht sagen. |
AW: Button Selbstzerstörung
Zitat:
Zitat:
|
AW: Button Selbstzerstörung
Wie war das nochmal?
Säge nicht den Ast ab, auf dem du grade sitzt? ![]() Einfach mal bei TForm abgucken, den Button ableiten und es dort implementieren. (wäre auch zu einfach gewesen, wenn Emba das einfach bereits ins TComponent/TControl/TWinControl implementiert hätte) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 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