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