Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Label Schriftfarbe ändern (https://www.delphipraxis.net/203435-label-schriftfarbe-aendern.html)

Niklas 16. Feb 2020 20:55

Delphi-Version: 10.3 Rio

Label Schriftfarbe ändern
 
Guten Tag,
Ich habe ein Problem mit Delphi. Ich möchte die Farbe des Textes auf rot ändern, wenn eine Checkbox aktiviert ist.

Delphi-Quellcode:
If CheckBox1.IsChecked = true then
           begin
             Label1.Text:='Rot';
             ...
           end;

DieDolly 16. Feb 2020 20:59

AW: Label Schriftfarbe ändern
 
Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if CheckBox1.Checked then
  Label1.Font.Color := clRed
 else
  Label1.Font.Color := clBlack;
end;
Lass woas hier am besten sofort sein!
Delphi-Quellcode:
If CheckBox1.IsChecked = true then
Und bevor du das falsch verstehst: CheckBox1Click ist das OnClick-Event von CheckBox1.

DieDolly 16. Feb 2020 21:46

AW: Label Schriftfarbe ändern
 
Delphi-Quellcode:
if CheckBox1.IsChecked then
Wo habt ihr dieses IsChecked her? Das gibt es bei mir nicht.

Luckie 16. Feb 2020 21:50

AW: Label Schriftfarbe ändern
 
Schon mal die Codevervollständigung probiert? CgeckBox1.Is... und dann gucken, was dir vorgeschlagen wird?

DieDolly 16. Feb 2020 21:52

AW: Label Schriftfarbe ändern
 
IsRightToLeft und IsImplementorOf kommen da bei mir. Und ja selbstverständlich verwende ich die Codevervollständigung.

DieDolly 16. Feb 2020 21:54

AW: Label Schriftfarbe ändern
 
Das hätte eingangs vielleicht vom TE erwähnt werden sollen.
Bei so einer banalen Frage denkt man direkt an einen Anfänger, der mit dem normalen Delphi nicht klar kommt. Und so liest es sich auch.

Luckie 16. Feb 2020 23:24

AW: Label Schriftfarbe ändern
 
Aber es gibt Checked in der VCL oder so ähnlich.

Dennis07 17. Feb 2020 01:25

AW: Label Schriftfarbe ändern
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 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