параметры переопределения стиля c builder

#styles #themes #c builder #vcl

Вопрос:

У меня проблема со стилями vcl, перезаписывающими пользовательские цвета. Есть ли способ отключить стили при использовании OnDrawItem или определить, когда включен стиль и каким будет целевой цвет?

В частности, в данном конкретном случае, если стиль находится в темном режиме, текст становится белым, и в моем случае мне нужно, чтобы фон был белым. Таким образом, белый текст на белом фоне невидим.

Похоже, что цвет пера игнорируется и заменяется цветом стиля, в то время как цвета фона являются правильными.

В идеале, я бы хотел игнорировать элементы стиля во время этой конкретной процедуры рисования и просто использовать свои собственные цвета. (С использованием C Builder 11)

ТИА

Код, о котором идет речь:

 //TCheckListBox *clbxCategory;
void __fastcall TFormATB::clbxCategoryDrawItem(TWinControl* Control, 
                                               int Index, TRect amp;Rect, TOwnerDrawState State)
{
  if(State.Contains(odSelected))  {
    clbxCategory->Canvas->Pen->Color = clBlack;
    clbxCategory->Canvas->Brush->Color = clActiveCaption;
    clbxCategory->Canvas->RoundRect(Rect.Left, Rect.Top , Rect.Right, Rect.Bottom, 0, 50);
  }
  else  {
    clbxCategory->Canvas->Pen->Color = Colours[Index];
    clbxCategory->Canvas->Brush->Color = Colours[Index];
  }
  clbxCategory->Canvas->Rectangle(Rect.Left, Rect.Top - 1, Rect.Right, Rect.Bottom   1);
  clbxCategory->Canvas->TextOut(Rect.Left, Rect.Top,clbxCategory->Items->Strings[Index]);
}
 

Комментарии:

1. Несвязанный: вы могли бы сделать auto ctl = static_cast<TCustomListBox*>(Control); и использовать ctl в функции вместо clbxCategory того, чтобы дать понять, что TCustomListBox вы рисуете потомка. По крайней мере, я так предполагаю. Вы также можете упростить его и использовать Rect как есть в некоторых случаях: clbxCategory->Canvas->RoundRect(Rect, 0, 50); а также clbxCategory->Canvas->Rectangle(Rect);

2. О, я не видел ни малейшей разницы между вашим оригиналом и моими упрощениями. По крайней мере, не для того RoundRect единственного. Другой, где ты -1 и 1 , не уверен.

3. Я добавил комментарий, чтобы показать, что clbxCategory-это поле для проверки. (Удалил мой предыдущий комментарий, так как это был мусор 🙂 )