0

私は dbcheckbox コンポーネントを持っています。その背景色を変更して、チェックされているかチェックされていないかを表す必要があります。ユーザーが dbnavigator コンポーネントを使用してレコード間を移動するときに更新する必要があります。

データセットはデータ モジュール上にあり、とにかくそのイベントを使用したくないので、コンポーネントをオーバーライドする必要があるか、どのようにアドバイスしてください。

ありがとう

4

2 に答える 2

1

有効なランタイム テーマでは、色の変更はできません。おそらく、FontStyle の変更もニーズに合うかもしれません。
そうでない場合は、
"Message.Msg =BM_SETCHECK" を使用してコードの一部で独自の Notifyevent を呼び出して、別の方法で反応させることができます。たとえば、下にある図形の色を変更するなどです。

  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 の background-color を使用することはできません。これは、テーマ ウィンドウではプロパティ「color」が無効であるためです。代わりに 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 に答える