Стили csParentBackground
и csOpaque
требуют взаимодействия с другими частями кода элемента управления. Простая установка их не будет иметь большого эффекта; в противном случае элемент управления, вероятно, уже имеет общедоступное свойство Transparent
.
Вы можете посмотреть на TCustomLabel.Paint
, чтобы увидеть, как он уважает стиль csOpaque
Он проверяет этот стиль, читая его свойство Transparent
, прежде чем раскрашивает фон:
if not Transparent then
begin
Canvas.Brush.Color := Self.Color;
Canvas.Brush.Style := bsSolid;
FillRect(ClientRect);
end;
Стиль csParentBackground
не влияет на TCustomLabel
, поскольку этот стиль влияет только на оконные элементы управления; TCustomLabel
происходит от TGraphicControl
, а не TWinControl
.
У меня нет TLinkLabel
, поэтому я не могу взглянуть на его исходный код, чтобы выяснить, что ему нужно изменить. Если это потомок TGraphicControl
, то он должен включать код, как я показал выше из TCustomLabel
. Если он спустится с TWinControl
, я бы вместо этого адаптировал код с TCustomStaticText
. Это немного сложнее; он вызывает DrawParentBackground
в ответ на уведомление cn_CtlColorStatic
. Это также не рисует себя в коде Delphi. Элемент управления является оберткой для Win32 «статического» типа элемента управления.
TLinkLabel
явно рисует фон безоговорочно. Чтобы это исправить, вам нужно переопределить метод Paint
. Удаление функциональности (в данном случае рисование фона) трудно сделать с традиционным способом переопределения виртуальных методов, потому что вы не сможете вызвать унаследованный метод, чтобы получить весь окрашенный текст. Вместо этого вам, вероятно, придется скопировать и вставить реализацию базового класса, а затем добавить где-то условные части в середину.