Delphi-dbcheckbox在读取记录值时更改颜色
我有一个dbcheckbox组件,我需要更改其背景颜色以表示选中或未选中状态。当用户使用dbnavigator组件在记录之间导航时,我需要更新它 数据集位于数据模块上,我无论如何都不想使用它的事件,因此请告知我是否应该覆盖该组件以及如何覆盖Delphi-dbcheckbox在读取记录值时更改颜色,delphi,components,vcl,Delphi,Components,Vcl,我有一个dbcheckbox组件,我需要更改其背景颜色以表示选中或未选中状态。当用户使用dbnavigator组件在记录之间导航时,我需要更新它 数据集位于数据模块上,我无论如何都不想使用它的事件,因此请告知我是否应该覆盖该组件以及如何覆盖 谢谢,您可以使用DBCheckBox的OnClick事件,每次选中的属性更改时都会触发该事件。不幸的是,您不能使用dbcheckbox的背景色,因为在主题化窗口中,“color”属性没有效果。您可以在dbCheckbox后面放置一个TPanel,并使用面板的
谢谢,您可以使用DBCheckBox的OnClick事件,每次选中的属性更改时都会触发该事件。不幸的是,您不能使用dbcheckbox的背景色,因为在主题化窗口中,“color”属性没有效果。您可以在dbCheckbox后面放置一个TPanel,并使用面板的颜色。或者您可以更改字体。颜色。因此,OnClick事件如下所示:
procedure TForm1.DBCheckBox1Click(Sender: TObject);
begin
if DBCheckBox1.Checked then
DBCheckBox1.Font.Color := clRed
else
DBCheckBox1.Font.Color := clWindowText;
end;
启用Runtimethemes后,不可能更改颜色,更改FontStyle也可能适合您的需要。
如果没有,您可以使用
“Message.Msg=BM_SETCHECK”以另一种方式作出反应,例如更改基础形状的颜色
TDBCheckBox=Class(DBCtrls.TDBCheckbox)
procedure WndProc(var Message: TMessage); override;
private
End;
TForm1 = class(TForm)
DBCheckBox1: TDBCheckBox;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TDBCheckBox }
procedure TDBCheckBox.WndProc(var Message: TMessage);
var
fs:TFontStyles;
begin
inherited;
if Message.Msg =BM_SETCHECK then
begin
if checked then Font.Color := clLime else Font.Color := clRed; // Will only work if runtimethemes are disabled
fs := Font.Style;
if checked then Include(fs, fsbold) else Exclude(fs, fsbold);
Font.Style := fs;
end;
end;