AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FMX "Unterkomponente"

Ein Thema von sko1 · begonnen am 27. Feb 2018 · letzter Beitrag vom 28. Feb 2018
Antwort Antwort
sko1

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

FMX "Unterkomponente"

  Alt 27. Feb 2018, 14:16
Hallo,

ich erzeuge einen Button mit darauf liegendem Label, welches oben links in der Ecke anzeigen soll:
Delphi-Quellcode:
  
  Result := TButton.Create(GridPanelLayout1);
  Result.Align := TAlignLayout.Client;
  Result.StyledSettings := [];
  lbl:=TLabel.Create(Result);
  lbl.Parent:=Result;
  lbl.Align := TAlignLayout.Client;
  lbl.TextSettings.VertAlign:=TTextalign.Leading;
  lbl.StyledSettings := [];
  lbl.TextSettings.Font.Size:=9;
  lbl.Margins.Left:=3;
  lbl.Margins.top:=3;
das funktioniert auch, aber wenn ich dann auf das Label zugreifen möchte:

Delphi-Quellcode:
    
  lbl := TLabel(btn.Children[0]);
  lbl.Text:='x';
knallt es, bei btn.Children[1] funktioniert es wie erwartet.
btn.Childrencount ist im Debugger = 2!
Wieso, ich möchte verstehen warum das eine eingebettete Control nicht über Index = 0 zu erreichen ist!

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: FMX "Unterkomponente"

  Alt 27. Feb 2018, 14:19
Wenn du dir nicht sicher bist oder du merkst, dass da was nicht stimmt, dann lbl := (btn.Children[0] as TLabel);

oder ShowMessage(Children[0].ClassName); // bzw. Children[0].ClassName im Debugger ansehn



PS: https://community.embarcadero.com/bl...remonkey-39366
Components = Owner
Controls = Parent
Children = sonstwas
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (27. Feb 2018 um 14:26 Uhr)
  Mit Zitat antworten Zitat
sko1

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

AW: FMX "Unterkomponente"

  Alt 27. Feb 2018, 14:30
Zitat:
ShowMessage(Children[0].ClassName)
danke für den Denkanstoss!

da kommt als Children[0] ein TLayout und dann als Children[1] das TLabel!

Muss ich nun in einer Schleife alle Children auf TLabel prüfen oder darf ich mit Sicherheit davon ausgehen, dass immer Children[1] hier das Label ist?

Ciao
Stefan
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.108 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: FMX "Unterkomponente"

  Alt 27. Feb 2018, 14:33
Muss ich nun in einer Schleife alle Children auf TLabel prüfen oder darf ich mit Sicherheit davon ausgehen, dass immer Children[1] hier das Label ist?
Ich kenne mich mit FMX nicht aus, aber ich persönlich würde das nicht tun. Niemand gibt dir eine Garantie dass es auf anderen Plattformen oder zukünftigen Versionen ebenso ist. Das kann man wahrscheinlich noch nicht einmal richtig mit Unit-Tests erschlagen.

Behalte die Referenz auf das Label das zu selbst hinzugefügt hast. So kannst du immer sicher sein. Ich persönlich würde mich nicht darauf verlassen dass es immer an Stelle [1] sein wird!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: FMX "Unterkomponente"

  Alt 27. Feb 2018, 14:43
Tipp: Ich hatte oben noch was hinzugefügt.

Zitat:
Ich persönlich würde mich nicht darauf verlassen
Darum auch der softe Cast, denn dann knallt es wenigstens an der richtigen Stelle.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
240 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: FMX "Unterkomponente"

  Alt 28. Feb 2018, 04:56
Hallo,

FMX Komponenten werden oft über die Stile mit allen möglichen Zutaten gefüllt, daher muss man davon ausgehen, dass in einem Control eine Menge andere Sachen sind, je nach gewähltem Stil.

Nebenbei: Das Einfügen einer Unterkomponente klappt ganz gut auch im Designer, hier einfach das Label in der Baumansicht auf den Button ziehen. Das ist besonders praktisch bei Verwendung einer THeaders Komponente.

Grüsse,
Julian
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
sko1

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

AW: FMX "Unterkomponente"

  Alt 28. Feb 2018, 05:59
Zitat:
Behalte die Referenz auf das Label das zu selbst hinzugefügt hast
Das ist der vernünftigste Ansatz, danke!

Ciao
Stefan

Nachtrag:
Habe noch einen besseren Weg gefunden : eine eigene Ableitung von TButton welche dann um das Label erweitert wird, damit ist dann der Zugriff darauf auch abgesichert...

Geändert von sko1 (28. Feb 2018 um 06:36 Uhr)
  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 16:11 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