我有一个TComboBox
,Style:= csOwnerDrawVariable;
,我想要显示禁用的字体颜色为黑色而不是“灰色”。
这是使用此源代码得到的结果:
procedure TCustomComboBox.WndProc(var Message: TMessage);
begin
case Message.Msg of
CN_CTLCOLORMSGBOX .. CN_CTLCOLORSTATIC, //48434..48440
WM_CTLCOLORMSGBOX .. WM_CTLCOLORSTATIC:
begin
Color:= GetBackgroundColor; // get's the current background state
Brush.Color:= Color;
end;
end;
inherited;
end;
我希望内部的Edit
控件字体颜色为黑色。
如果我在WndProc
或其他地方更改Font.Color:= clBlack
,则没有任何反应。
谷歌搜索给了我一些有关将TEdit
更改为只读的提示,但这并没有帮助我。
更新
在得到@Abelisto的提示后,现在这是我的简短解决方案。
TCustomComboBox = class (TComboBox)
protected
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
end;
procedure TCustomComboBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
if odComboBoxEdit in State then begin // If we are drawing item in the edit part of the Combo
if not Enabled then
Canvas.Font.Color:= clBlack; // Disabled font colors
Canvas.Brush.Color:= GetBackgroundColor; // Get the right background color: normal, mandatory or disabled
end;
inherited DrawItem(Index, Rect, State);
end;
SetTextColor
,但请注意inherited
调用会将其还原。 - TLamaOnDrawItem
事件吗?或者重写DrawItem
方法? - AbelistoStyle := csOwnerDrawVariable;
,并且OnDrawItem
正常工作。不过我是在 D2007 上尝试的。 - Abelisto