我有一个dbcheckbox组件我需要更改其背景颜色以表示已检查或未检查状态。当用户使用dbnavigator组件在记录之间导航时,我需要更新。
数据集在数据模块上,我不想使用它的事件,所以请告知我应该覆盖组件以及如何?
由于
答案 0 :(得分:1)
启用运行时主题后,无法更改颜色,也许更改FontStyle也可能符合您的需求。
如果没有,你可以用代码在代码部分调用自己的Notifyevent
“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;
答案 1 :(得分:0)
您可以使用DBCheckBox的OnClick-Event,每次Checked属性更改时都会触发此事件。不幸的是,您不能使用dbcheckbox的背景颜色,因为在主题窗口中,属性“color”无效。您可以将TPanel放在dbCheckbox后面,然后使用Panel的Color。或者你可以改为改变Font.Color。所以OnClick事件看起来像这样:
procedure TForm1.DBCheckBox1Click(Sender: TObject);
begin
if DBCheckBox1.Checked then
DBCheckBox1.Font.Color := clRed
else
DBCheckBox1.Font.Color := clWindowText;
end;