Einzelnen Beitrag anzeigen

Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Label Schriftfarbe ändern

  Alt 17. Feb 2020, 01:25
Ich denke, es ist vom Auto sogar so gemeint, dass die Farbe je nach Checked-State der CheckBox entweder rot oder (standard-)schwarz ist. Anders macht das für mich so keinen Sinn, wenn es nur in eine Richtung gehen soll. Somit wäre folgendes im OnChange-Ereignis sinnvoll:

Delphi-Quellcode:
if CheckBox1.IsChecked then
begin
  Label1.TextSettings.FontColor := TAlphaColors.Red; // Alternativ: TAlphaColorRec.Red
end else
begin
  Label1.TextSettings.FontColor := TAlphaColors.Black; // Alternativ: TAlphaColorRec.Black
end;
Wie du hier sehen kannst, befindet sich die Schriftfarbe, anders als von meinem Vorredner beschrieben, in der TextSettings-Eigenschaft. Zweitens mal benötigst du kein manuelles setzen der StyledSettings-Eigenschaft (was ich so, wie da beschrieben, auch nicht machen würde, da du ja nur die Schriftfarbe und nicht den Rest unbedingt deaktivieren willst). "FontColor" wird automatisch aus den StyledSettings heraus genommen, wenn du diese in den TextSettings manuell setzt.
Auch dürfte aufgefallen sein, dass ich oben vom OnChange-Ereignis anstelle des OnClick-Ereignisses sprach. Das war kein Versprecher, sondern volle Absicht. In FMX wird ein OnClick auch tatsächlich nur bei einem Klick ausgelöst, und nicht bei einem Ändern des IsChecked im Code. Auch ein Doppelklick würde dann zu falschen Ergebnissen führen, da er nur einmal ein OnClick aktiviert. Somit ist OnChange notwendig.



Ein kleiner Hinweis für Leute, die ihre eigene CheckBox schreiben wollen: Leider wird in FMX für das auslösen des OnChange-Ereignisses keine virtuelle DoChange o.ä. angeboten, die man überschreiben kann. Stattdessen wird dieses (wohl wichtigste Ereignis des Controls) direkt im privaten "SetIsChecked" aufgerufen, was nicht nur schlechter Stil ist, sondern auch wirklich die Arbeit beim Ableiten schwer behindern kann. Dafür habe ich einen QP-Eintrag verfasst, den ihr hier finden könnt.
Dennis
  Mit Zitat antworten Zitat