私は dbcheckbox コンポーネントを持っています。その背景色を変更して、チェックされているかチェックされていないかを表す必要があります。ユーザーが dbnavigator コンポーネントを使用してレコード間を移動するときに更新する必要があります。
データセットはデータ モジュール上にあり、とにかくそのイベントを使用したくないので、コンポーネントをオーバーライドする必要があるか、どのようにアドバイスしてください。
ありがとう
私は dbcheckbox コンポーネントを持っています。その背景色を変更して、チェックされているかチェックされていないかを表す必要があります。ユーザーが dbnavigator コンポーネントを使用してレコード間を移動するときに更新する必要があります。
データセットはデータ モジュール上にあり、とにかくそのイベントを使用したくないので、コンポーネントをオーバーライドする必要があるか、どのようにアドバイスしてください。
ありがとう
有効なランタイム テーマでは、色の変更はできません。おそらく、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;
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;