Установка настроек шрифта не работает при создании динамической метки

Я пытаюсь установить цвет и размер шрифта в динамически созданном объекте TLabel, но это не работает.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TLabel *text;
    text = new TLabel(Form1);
    text->Parent = Form1;
    text->Align = TAlignLayout::Center;
    text->Margins->Top = 60;
    text->Font->Size = 13;   // don't works
    text->FontColor = TColorRec::Red;  // don't works
    text->Height = 17;
    text->Width = 120;
    text->TextSettings->HorzAlign = TTextAlign::Center;
    text->TextSettings->VertAlign = TTextAlign::Leading;
    text->StyledSettings.Contains(TStyledSetting::Family);
    text->StyledSettings.Contains(TStyledSetting::Style);
    text->Text = "My Text";
    text->VertTextAlign = TTextAlign::Leading;
    text->Trimming = TTextTrimming::None;
    text->TabStop = false;
    text->SetFocus();
}

Результат:

изображение


person Matrix    schedule 08.05.2020    source источник
comment
Не уверен, что это изменит ситуацию, но попробуйте text->TextSettings->FontColor = ... и text->TextSettings->Font->Size = .... Однако text->StyledSettings.Contains(TStyledSetting::Family); text->StyledSettings.Contains(TStyledSetting::Style); определенно не делает то, что вы думаете, используйте: text->StyledSettings = TStyledSettings() << TStyledSetting::Family << TStyledSetting::Style; или: text->StyledSettings = text->StyledSettings << TStyledSetting::Family << TStyledSetting::Style; Не уверен, что вам нужно также добавить TStyledSetting::FontColor и TStyledSetting::Size.   -  person Remy Lebeau    schedule 08.05.2020
comment
@RemyLebeau я тестировал ваши спецификации, но результат тот же :(   -  person Matrix    schedule 08.05.2020
comment
Можете ли вы установить нужные свойства шрифта для TLabel, созданного в форме во время разработки?   -  person Remy Lebeau    schedule 09.05.2020
comment
в дополнение к уже изложенному ... 1. TColorRec::Red; выглядит подозрительно Я не использую Delphi, но в VCL: C++ Builder вместо этого я бы использовал clRed ... 2. text->Font->Size и text->Font->Height масштабируют друг друга. Размер IIRC — это ширина, а высота — высота шрифта, а пересчитанный параметр будет иметь отрицательное значение. Также IIRC вы не можете использовать любые размеры, которые они округляют до тех, которые поддерживаются используемым шрифтом...   -  person Spektre    schedule 09.05.2020


Ответы (1)


Вы не удаляете элементы из TStyledSettings, чтобы включить свои собственные настройки. См. раздел Программная установка управляющего шрифта Firemonkey в C++

Но тогда вы также используете неправильные цветовые константы. Вместо TColorRec::Red следует использовать TAlphaColor(claRed)

Это работает:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TLabel *text;
    text = new TLabel(Form1);
    text->Parent = Form1;
    text->Position->X = 8;
    text->Position->Y = 50;
    text->Text = "My Text";

    // clear all styled settings to enable your own settings
//  text->StyledSettings = TStyledSettings(NULL);

    // alternatively clear only styled font color setting
    text->StyledSettings = text->StyledSettings >> TStyledSetting::FontColor;

    // and styled size setting
    text->StyledSettings = text->StyledSettings >> TStyledSetting::Size;

    // Firemonkey uses TAlphaColor colors
    text->FontColor = TAlphaColor(claRed);
    // alternatively:
    // text->FontColor = TAlphaColor(TAlphaColorRec::Red);
    // text->FontColor = TAlphaColor(0xFFFF0000); // ARGB

    text->Height = 20;
    text->Font->Size = 15;   // works now
}
person Tom Brunberg    schedule 09.05.2020