![]() |
Firemonkey ignoriert SetSubComponent()
Hallo,
ich versuche gerade mit Delphi XE6 in einem Firmonkey-Projekt eine von TPanel abgeleitete Komponente zu erstellen. Also vereinfacht etwa so etwas:
Delphi-Quellcode:
Das funktioniert soweit auch bis ich die Komponente in ein Formular einfüge.
unit TFlipPanelsIntern;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls; type TFlipPanelIntern = class(TPanel) constructor Create(AOwner: TComponent); override; private Button1: TButton; public published end; procedure Register; implementation procedure Register; begin RegisterComponents('sks', [TFlipPanelIntern]); end; constructor TFlipPanelIntern.create(AOwner: Tcomponent); begin inherited create(AOwner); Button1 := TButton.Create(self); Button1.SetSubComponent(true); Button1.Parent := self; Button1.Name := 'Button1'; Button1.Align := TAlignLayout.Right; Button1.Width := 20; end; end. Die Subkomponente "Button1" wird mit in die .FMX gescchrieben
Delphi-Quellcode:
Wenn ich das Formular nun erneut öffne, dann habe ich den Button 2x drin.
object FlipPanelIntern1: TFlipPanelIntern
Height = 120.000000000000000000 Position.X = 136.000000000000000000 Position.Y = 96.000000000000000000 Width = 120.000000000000000000 TabOrder = 5 object Button1: TButton Align = Right Height = 120.000000000000000000 Position.X = 100.000000000000000000 TabOrder = 0 Text = 'Button1' Width = 20.000000000000000000 end end Ich nehme mal an, dass beim Parsen der .FMX meine Komponente angelegt wird und zwar inclusive des Buttons aus dem Konstructor und dann der Button aus der *.FMX Wenn ich das Formular dan wieder schliesse (und speichere) steht der Button 2x in der .FMX und beim Öffnen zeigt der FormularEditor den Button 3x ... und so weiter.... Eigentlich dachte ich SetSubComponent(true) soll genau das - das Schreiben in die RessourcenDatei verhindern. Folgende Tips habe ich bereits via Google gefunden und vergeblich ausprobiert. - die TButton-Komponente aus privat, public, published deklariern - den Constructor von TButton mit AOwner self, Owne und nil aufrufen Grüße, Sascha |
AW: Firemonkey ignoriert SetSubComponent()
Hallo Sascha,
herzlich willkommen. :-) Den Quelltext kannst Du in Delphi-Tags setzen (Delphi-Helm im Editor). Versuch mal
Delphi-Quellcode:
ob das hilft.
Button1.Stored := False;
Aber selbst wenn, bei FMX steht man wohl immer wieder vor Rätseln. :-( |
AW: Firemonkey ignoriert SetSubComponent()
Zitat:
Mit SetSubComponent(True) sagt man, daß die Komponente gespeichert werden soll. |
AW: Firemonkey ignoriert SetSubComponent()
Ja, das stimmt.
Bei FMX hat aber auch noch Stored einen Einfluss. Ich hatte das durch Quelltextstudium und Versuche heraus bekommen. 100%ig kann ich den Zusammenhang jetzt nicht mehr zusammenfassen. Ich war damals froh, dass es "irgendwie zu funktionieren schien". |
AW: Firemonkey ignoriert SetSubComponent()
Herzlichen Dank in die Runde.
Delphi-Quellcode:
ist das was ich gesucht habe.
Button1.Stored := false;
Dann werde ich mal loslegen und vielleicht komme ich auch noch drauf, welchen Einfluß Button1.SetSubComponent(true|false); hat. Im Moment entdecke ich noch keinen. Danke, Sascha |
AW: Firemonkey ignoriert SetSubComponent()
Naja, leider ist
Delphi-Quellcode:
auch nicht unbedingt eine Lösung.
Stored := false;
Wenn die Subkomponente selbst auch ein TPanel ist - und darauf sollte es hinauslaufen, dann wird eben auch nichts gespeichert, was man da zur Entwurfszeit raufpackt. Damit bin ich wieder am Anfang. Es muß doch möglich sein, die Subkomponenten auf meine Komponente zu bekommen, ohne sie im Konstruktor meiner Komponente zu instanzieren, oder zu verhindern, das sie in der Folgeverarbeitung der .FMX nochmal erzeugt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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