TFrame 覆盖样式颜色

TFrame overriding style color

我有一个颜色为 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);
}

如果您需要 TFrame 随着父组件的变化而改变外观,请相应地设置其属性:

ParentBackground = True
ParentColor = True

这也会将其 Color 设置回 clBtnFace

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

__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);
}