![]() |
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; |
AW: Label Schriftfarbe ändern
Delphi-Quellcode:
Lass woas hier am besten sofort sein!
procedure TForm1.CheckBox1Click(Sender: TObject);
begin if CheckBox1.Checked then Label1.Font.Color := clRed else Label1.Font.Color := clBlack; end;
Delphi-Quellcode:
Und bevor du das falsch verstehst: CheckBox1Click ist das OnClick-Event von CheckBox1.
If CheckBox1.IsChecked = true then
|
AW: Label Schriftfarbe ändern
Delphi-Quellcode:
Wo habt ihr dieses IsChecked her? Das gibt es bei mir nicht.
if CheckBox1.IsChecked then
|
AW: Label Schriftfarbe ändern
Schon mal die Codevervollständigung probiert? CgeckBox1.Is... und dann gucken, was dir vorgeschlagen wird?
|
AW: Label Schriftfarbe ändern
IsRightToLeft und IsImplementorOf kommen da bei mir. Und ja selbstverständlich verwende ich die Codevervollständigung.
|
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. |
AW: Label Schriftfarbe ändern
Aber es gibt Checked in der VCL oder so ähnlich.
|
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:
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.
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; 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 ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz