[gelöst]Font zur Laufzeit in allen Komponenten ändern

Rund um die LCL und andere Komponenten
hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von hubblec4 »

yupp recht vielen dank für den Code.
So hätte ich es dann auch umgesetzt.

Wie verhält es sich aber mit den VST's die zur Laufzeit erzeugt wurden?
Diese scheinen in der Schleife nicht berücksichtig zu werden. (Beim erzeugen bekommen die VST's auch ein Parent-Control zugewiesen.)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von wp_xyz »

hubblec4 hat geschrieben:Wie verhält es sich aber mit den VST's die zur Laufzeit erzeugt wurden?
Diese scheinen in der Schleife nicht berücksichtig zu werden. (Beim erzeugen bekommen die VST's auch ein Parent-Control zugewiesen.)

Du musst natürlich die VirtualStringTrees schon erzeugt haben, wenn die Schleife aufgerufen wird. Parent spielt keine Rolle, die Schleife sucht sich intern rekursiv alle Komponenten auf dem Formular, egal, in welchem Container diese sich befinden. Und egal auch, ob diese zur Design- oder Laufzeit erzeugt wurden.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von hubblec4 »

wp_xyz hat geschrieben:
hubblec4 hat geschrieben:Wie verhält es sich aber mit den VST's die zur Laufzeit erzeugt wurden?
Diese scheinen in der Schleife nicht berücksichtig zu werden. (Beim erzeugen bekommen die VST's auch ein Parent-Control zugewiesen.)

Du musst natürlich die VirtualStringTrees schon erzeugt haben, wenn die Schleife aufgerufen wird. Parent spielt keine Rolle, die Schleife sucht sich intern rekursiv alle Komponenten auf dem Formular, egal, in welchem Container diese sich befinden. Und egal auch, ob diese zur Design- oder Laufzeit erzeugt wurden.



mmh schon klar das ein VST erzeugt wurden sein muss um es "zu bearbeiten".
Allerdings werden bei meinem Proggi die VST's(welcher zur Laufzeit erzeugt wurden) nicht berücksichtigt.



EDIT:
Bei den LabelEdit(LaE) habe ich noch was entdeckt. Normal steht für das Label die property ParentFont auf true. Wenn man am Label des LaE nichts ändert, wird der Font fürs Label mitgeändert.
Allerdings habe ich auf meinem Formular LaE's wo der ParentFont auf false steht, dort müsste ich dann in der Schleife auf LaE prüfen.
Was mich allerdings noch sehr wundert, dass ich einige LaE's auf der Form habe wo der ParentFont des Label vom LaE auf true steht ABER der Font angepasst wurde, also nicht mehr ´gleich zum Parent ist (normalerweise verschwindet auch der Haken bei ParentFont wenn man am Font der Komponente was ändert.) Zumindestens verhalten sich andere LaE's auf der Form so und der ParentFont:=true wird auf false gesetzt wenn ich am Label-Font was ändere.
Zuletzt geändert von hubblec4 am Mo 2. Jan 2017, 10:54, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von wp_xyz »

Dann machst du etwas falsch. Ich sehe keinen Grund, warum ein VirtualStringTree nicht erkannt werden sollte, selbst wenn er zur Laufzeit erzeugt wird. Oder verwendest du die OnDrawNode oder OnHeaderDraw Events des Trees und veränderst dort den Font nochmals?

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von hubblec4 »

wp_xyz hat geschrieben:Dann machst du etwas falsch. Ich sehe keinen Grund, warum ein VirtualStringTree nicht erkannt werden sollte, selbst wenn er zur Laufzeit erzeugt wird. Oder verwendest du die OnDrawNode oder OnHeaderDraw Events des Trees und veränderst dort den Font nochmals?


Ich denke auch das ich da irgendwo den Wurm drinne habe.
Also extra OnDrawNode oder OnHeaderDraw Events werden nicht verwendet.
Ein VST was zur DesignZeit schon da war wird soweit ja auch erkannt.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von wp_xyz »

Vielleicht zerstörst du den VST und baust ihn neu, nachdem die Font-Änderung durchgeführt worden ist? Setze mal einen Breakpoint im Destructor des VirtualStringTree (Achtung: Erzwinge unter "Hinzufügungen und Beeinflussungen" in den Projekt-Optionen ein Neukompilieren des VST mit Debug-Informationen, indem du dort nach "Hinzufügen" > "Benutzerdefinierte Option" in der Zeile "Gespeichert in der Projektsitzung" den Eintrag "-gw2" machst).
Zuletzt geändert von wp_xyz am Mo 2. Jan 2017, 17:31, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von wp_xyz »

hubblec4 hat geschrieben:Bei den LabelEdit(LaE) habe ich noch was entdeckt. Normal steht für das Label die property ParentFont auf true. Wenn man am Label des LaE nichts ändert, wird der Font fürs Label mitgeändert.
Allerdings habe ich auf meinem Formular LaE's wo der ParentFont auf false steht, dort müsste ich dann in der Schleife auf LaE prüfen.
Was mich allerdings noch sehr wundert, dass ich einige LaE's auf der Form habe wo der ParentFont des Label vom LaE auf true steht ABER der Font angepasst wurde, also nicht mehr ´gleich zum Parent ist (normalerweise verschwindet auch der Haken bei ParentFont wenn man am Font der Komponente was ändert.) Zumindestens verhalten sich andere LaE's auf der Form so und der ParentFont:=true wird auf false gesetzt wenn ich am Label-Font was ändere.

Und wenn das LaE (mit ParentFont = true) in einem Container mit ParentFont=false sitzt und du den Font des Containers änderst, dann ändert sich auch der Font des LaE, obwohl das Häkchen vor ParentFont nicht verschwindet.

Generell: Wenn du die Fonts aller Komponenten verändern willst, warum lässt du dann nicht bei allen Komponenten ParentFont auf true und änderst nur den Font des Formulars?

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von hubblec4 »

wp_xyz hat geschrieben:Vielleicht zerstörst du den VST und baust in neu, nachdem die Font-Änderung durchgeführt worden ist? Setze mal einen Breakpoint im Destructor des VirtualStringTree (Achtung: Erzwinge unter "Hinzufügungen und Beeinflussungen" in den Projekt-Optionen ein Neukompilieren des VST mit Debug-Informationen, indem du dort nach "Hinzufügen" > "Benutzerdefinierte Option" in der Zeile "Gespeichert in der Projektsitzung" den Eintrag "-gw2" machst).


Das VST zerstören und neu bauen finde ich jetzt nicht so dolle, da jede menge Instanzen als Daten hinterlegt sind.
Ich hatte heute wenig Zeit zum testen, werde mir aber diesen Vorschlag auch näher anschauen.
Zuletzt geändert von hubblec4 am Mo 2. Jan 2017, 16:39, insgesamt 1-mal geändert.

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von hubblec4 »

wp_xyz hat geschrieben:Generell: Wenn du die Fonts aller Komponenten verändern willst, warum lässt du dann nicht bei allen Komponenten ParentFont auf true und änderst nur den Font des Formulars?


Ja das wäre eine schöne einfache Lösung, leider klappt das nicht, da ja einzelne Komponeten andere Fonts haben. Also schon ein Bold auf FETT gesetzt und der ParentFont ist nicht mehr true.

schorsch
Beiträge: 46
Registriert: Sa 20. Mär 2010, 23:00
OS, Lazarus, FPC: Win10x64, RaspberryPi, MAC
CPU-Target: so ziemlich alles

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von schorsch »

du könntest ja entsprechen mehrere "parents" machen und jew. entspr. zuweisen ;-)
der feind der erde ist der mensch

hubblec4
Beiträge: 341
Registriert: Sa 25. Jan 2014, 17:50

Re: Font zur Laufzeit in allen Komponenten ändern

Beitrag von hubblec4 »

schorsch hat geschrieben:du könntest ja entsprechen mehrere "parents" machen und jew. entspr. zuweisen ;-)

Ja auch diese Prinzip ging mir bereits durch den Kopf, aber das wird bissl aufwendig. In meinem Proggi werden dann sicher mehr als 300 Controls sein
und da dann kontrollieren wer alles welchen ParentFont auf true hat....
Die Schleifen Variante ist schon recht gut, und für spezielle Controls prüft man eben welches es ist und reagiert dann.
Für die neuen Laufzeit-VST werde ich wohl einen kleinen umweg nehmen müssen, da aber alle VST in einer ObjectList liegen, sollte das nicht schwer sein.

Antworten