0

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

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

谢谢

4

2 回答 2

1

启用运行时主题后,无法更改颜色,也许更改字体样式也可能满足您的需求。
如果不是,您可以在代码部分调用自己的 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;
于 2013-01-25T07:31:35.060 回答
0

您可以使用 DBCheckBox 的 OnClick-Event,每次 Checked 属性更改时都会触发此事件。不幸的是,您不能使用 dbcheckbox 的背景颜色,因为在主题窗口中,属性“颜色”无效。您可以在 dbCheckbox 后面放置一个 TPanel,并使用面板的颜色。或者,您可以改为更改 Font.Color。所以事件 OnClick 看起来像这样:

procedure TForm1.DBCheckBox1Click(Sender: TObject);
begin
  if DBCheckBox1.Checked then
    DBCheckBox1.Font.Color := clRed
  else
    DBCheckBox1.Font.Color := clWindowText;
end;
于 2013-01-25T06:27:18.130 回答