1

我的环境:Windows 10 v1903

使用TTrackBar,当我更改组件所在位置的颜色时TPanelTTrackBar颜色保持为以前的颜色。

例如,当我将TPanelfrom的颜色更改为clBtnFaceto时,剩余clWhite部分的颜色TTrackBarclBtnFace

在改变颜色之前TPanel在此处输入图像描述

改变颜色后TPanel在此处输入图像描述

我尝试了以下代码,但没有成功。

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Panel1->ParentBackground = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Panel1->Color = clWhite;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Panel1->Color = clWhite;

    Panel1->Repaint();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
    Panel1->Color = clWhite;

    Panel1->Invalidate();
}

有什么想法可以解决这个问题吗?

4

1 回答 1

1

如果没有明确的解决方案,我可能会执行以下操作。

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Panel1->ParentBackground = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Panel1->Color = clWhite;

    // Move focus to all of the TTrackBar
    //    Reason: Changing TPanel color does not change TTrackBar BGcolors
    for(int idx=0; idx < this->ComponentCount; idx++) {
        TComponent *cmpPtr = this->Components[idx];
        if (dynamic_cast<TTrackBar *>(cmpPtr) != NULL) {
            TTrackBar *trkPtr = (TTrackBar *)cmpPtr;
            trkPtr->SetFocus();
        }
    }

    // Set focus to myself (Button)
    if (Sender !=NULL) {
        TButton *btn = (TButton *)Sender;
        btn->SetFocus();
    }
}
于 2019-07-22T09:49:29.827 回答