2

我有一个框架,颜色为 clSkyBlue,它位于一个应用程序中,其中包含面板和各种颜色为 clSkyBlue 的东西。该程序使用 TStyleManager 将颜色设置为当前样式。(即 windows10、windows10 暗等)。问题是样式管理器中的所有颜色都设置了正确的颜色,但仍然是 clSkyBlue 的框架除外。

如何强制框架遵循当前选择的样式?

//in the main form code
void __fastcall TMainFormUnit::FormCreate(TObject *Sender)
{
...
  for (int i = 0; i < TStyleManager::StyleNames.Length; i++)
    cbxVclStyles->Items->Add(TStyleManager::StyleNames[i]);
    TStyleManager::TrySetStyle(TStyleManager::StyleNames[1]);
...
}

//---------------------------------------------------------------------------
void __fastcall TMainFormUnit::cbxVclStylesChange(TObject *Sender)
{
  TStyleManager::SetStyle(cbxVclStyles->Text);
}
4

1 回答 1

2

如果您需要TFrame在父组件更改时更改外观,请相应地设置其属性:

ParentBackground = True
ParentColor = True

这也将其设置ColorclBtnFace

我还建议不要FormCreate在 C++ 中使用该事件。使用构造函数:

__fastcall TMainFormUnit::TMainFormUnit(TComponent* Owner)
    : TForm(Owner)
{
    cbxVclStyles->Items->AddStrings(TStyleManager::StyleNames);
}
//---------------------------------------------------------------------------
void __fastcall TMainFormUnit::cbxVclStylesChange(TObject *Sender)
{
    TStyleManager::TrySetStyle(static_cast<TComboBox*>(Sender)->Text);
}
于 2021-10-25T21:35:49.437 回答