Delphi - dbcheckbox在读取记录值时更改颜色

时间:2013-01-25 02:58:34

标签: delphi components vcl

我有一个dbcheckbox组件我需要更改其背景颜色以表示已检查或未检查状态。当用户使用dbnavigator组件在记录之间导航时,我需要更新。

数据集在数据模块上,我不想使用它的事件,所以请告知我应该覆盖组件以及如何?

由于

2 个答案:

答案 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;