AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey ignoriert SetSubComponent()

Ein Thema von sks4u · begonnen am 14. Mai 2014 · letzter Beitrag vom 18. Mai 2014
Antwort Antwort
sks4u

Registriert seit: 16. Sep 2013
3 Beiträge
 
#1

Firemonkey ignoriert SetSubComponent()

  Alt 14. Mai 2014, 19:17
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:
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.
Das funktioniert soweit auch bis ich die Komponente in ein Formular einfüge.
Die Subkomponente "Button1" wird mit in die .FMX gescchrieben


Delphi-Quellcode:
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
Wenn ich das Formular nun erneut öffne, dann habe ich den Button 2x drin.
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

Geändert von sks4u (15. Mai 2014 um 10:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Firemonkey ignoriert SetSubComponent()

  Alt 14. Mai 2014, 19:49
Hallo Sascha,

herzlich willkommen.

Den Quelltext kannst Du in Delphi-Tags setzen (Delphi-Helm im Editor).

Versuch mal Button1.Stored := False; ob das hilft.
Aber selbst wenn, bei FMX steht man wohl immer wieder vor Rätseln.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firemonkey ignoriert SetSubComponent()

  Alt 14. Mai 2014, 20:01
Eigentlich dachte ich SetSubComponent(true) soll genau das - das Schreiben in die RessourcenDatei verhindern.
War das nicht genau andersrum?
Mit SetSubComponent(True) sagt man, daß die Komponente gespeichert werden soll.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Firemonkey ignoriert SetSubComponent()

  Alt 14. Mai 2014, 20:06
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".
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
sks4u

Registriert seit: 16. Sep 2013
3 Beiträge
 
#5

AW: Firemonkey ignoriert SetSubComponent()

  Alt 14. Mai 2014, 20:27
Herzlichen Dank in die Runde.

Button1.Stored := false; ist das was ich gesucht habe.

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

Geändert von sks4u (15. Mai 2014 um 10:08 Uhr)
  Mit Zitat antworten Zitat
sks4u

Registriert seit: 16. Sep 2013
3 Beiträge
 
#6

AW: Firemonkey ignoriert SetSubComponent()

  Alt 18. Mai 2014, 19:54
Naja, leider ist Stored := false; auch nicht unbedingt eine Lösung.

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.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 22:34 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