AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: VCL / WinForms / Controls Delphi Wert einer Checkbox ändern, ohne OnClick Handler auszulösen
Thema durchsuchen
Ansicht
Themen-Optionen

Wert einer Checkbox ändern, ohne OnClick Handler auszulösen

Ein Thema von sakura · begonnen am 31. Mär 2005 · letzter Beitrag vom 1. Apr 2005
 
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#1

Wert einer Checkbox ändern, ohne OnClick Handler auszulösen

  Alt 31. Mär 2005, 16:09
Schon öfter gab es die Frage, wie man den Wert einer Checkbox ändern kann, ohne dabei den asoziierten OnClick Handler auszulösen. Für dieses Problem gibt es verschiedene Ansätze, der folgende nutzt die Möglichkeiten von OOP aus, so dass man an versteckte Eigenschaften heran kommt.

Da das Problem öfter auftritt, lagern wir die Lösung in eine extra Unit aus, welche jederzeit genutzt werden kann, wenn man das Problem in einer Anwendung hat. Diese Unit liefert drei Prozeduren.
Delphi-Quellcode:
procedure ToggleCheckBoxSilent(aCheckBox: TCustomCheckBox);
procedure SetCheckBoxSilent(aCheckBox: TCustomCheckBox; aValue: Boolean);
procedure SetCheckBoxStateSilent(aCheckBox: TCustomCheckBox; aState: TCheckBoxState);
  1. ToggleCheckBoxSilent wechselt den Checked-Wert von True->False und umgekehrt.
  2. SetCheckBoxSilent setzt den Checked-Wert auf den übergebenen Wert (Boolean)
  3. SetCheckBoxStateSilent setzt den State-Wert auf den übergebenen Wert (TCheckBoxState)

Im implementation Teil der Unit deklarieren wir eine neue Klasse THiddenCheckBox, welche keine neuen Eigenschaften/Methoden hat, uns aber über ein Casting Zugriff auf geschützte Eigenschaften und Funktionen einer Checkbox gibt.
Delphi-Quellcode:
type
  THiddenCheckBox = class(TCustomCheckBox)
  end;
TCustomCheckBox besitzt die Eigenschaft ClicksDisabled, welche geschützt ist, also nur von TCustomCheckBox oder abgeleiteten Klassen genutzt werden kann. Wird diese Eigenschaft auf True gesetzt, so wird beim Setzen des Wertes einer CheckBox ein eventuell asoziierter OnClick-Handler nicht aufgerufen. Dieses Verhalten nutzen wir bei der Implementation.

Folgend der gesamte Quellcode der Unit, welche auch als Attachment an diesen Beitrag (inkl. Beispiel-Anwendung) angehängt ist.
Delphi-Quellcode:
unit uSetCheckBoxSilent;

interface

uses
  StdCtrls;

procedure ToggleCheckBoxSilent(aCheckBox: TCustomCheckBox);
procedure SetCheckBoxSilent(aCheckBox: TCustomCheckBox; aValue: Boolean);
procedure SetCheckBoxStateSilent(aCheckBox: TCustomCheckBox; aState: TCheckBoxState);

implementation

type
  THiddenCheckBox = class(TCustomCheckBox)
  end;

procedure ToggleCheckBoxSilent(aCheckBox: TCustomCheckBox);
begin
  SetCheckBoxSilent(aCheckBox, not THiddenCheckBox(aCheckBox).Checked);
end;

procedure SetCheckBoxSilent(aCheckBox: TCustomCheckBox; aValue: Boolean);
var
  OldClick: Boolean;
begin
  OldClick := THiddenCheckBox(aCheckBox).ClicksDisabled;
  THiddenCheckBox(aCheckBox).ClicksDisabled := True;
  THiddenCheckBox(aCheckBox).Checked := aValue;
  THiddenCheckBox(aCheckBox).ClicksDisabled := OldClick;
end;

procedure SetCheckBoxStateSilent(aCheckBox: TCustomCheckBox; aState: TCheckBoxState);
var
  OldClick: Boolean;
begin
  OldClick := THiddenCheckBox(aCheckBox).ClicksDisabled;
  THiddenCheckBox(aCheckBox).ClicksDisabled := True;
  THiddenCheckBox(aCheckBox).State := aState;
  THiddenCheckBox(aCheckBox).ClicksDisabled := OldClick;
end;

end.
......
Angehängte Dateien
Dateityp: zip sample_und_source_392.zip (2,4 KB, 46x aufgerufen)
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz