Moin
Auch wenn das Problem gelöst scheint, so darf ich dennoch eine kleine Anmerkung machen !?
Wie bereits gesagt, löst das Setzen von Checked immer das Ereignis OnClick aus...soweit, so dumm *gg*
Es gibt aber eine einfache Lösung (sogar mit Delphi-Boardmitteln
). Hierzu ein kleines Beispielmit 3 Checkboxen:
Delphi-Quellcode:
procedure TForm.CheckBox1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
CheckBoxStatus(Sender as TCheckBox);
end;
{zum 'Abfangen' der Leertaste, welche auch den Status setzen kann }
procedure TForm1.CheckBox1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = ORD(#32) then CheckBoxStatus(Sender as TCheckBox);
end;
{ allg. Proc für die Checkboxen}
procedure TForm1.CheckBoxStatus(Sender: TcheckBox);
begin
if Sender.Name = 'CheckBox1' then
begin
Checkbox2.State := cbUnchecked; //--setzen des Status auf unchecked
Checkbox3.State := cbUnchecked;
end;
if Sender.Name = 'CheckBox2' then
begin
Checkbox1.State := cbUnchecked;
Checkbox3.State := cbUnchecked;
end;
if Sender.Name = 'CheckBox3' then
begin
Checkbox1.State := cbUnchecked;
Checkbox2.State := cbUnchecked;
end;
end;
Interessant ist hier
Checkboxe.State, dessen Eigenschaft man durchaus zur Laufzeit setzen kann...entweder im MouseUp- oder wie hier 'weitergeleitet' an die Prozedure CheckBoxStatus. Somit umgeht man das Auslösen des OnClick-Ereignisses..
Eine Checkbos erhält automatisch den Status cbChecked, sobald sie angeklickt oder (sofern per Tab focusiert wurde) die Leertaste gedrückt wurde.
Sollen andere Checkboxen in Abhängigkeit einer bestimmten Checkbox den Status cbChecked erhalten, so löst man das elegant wiederum über
Code:
Checkbox.State := cbChecked
Ob eine Checkbox markiert ist, lässt sich zum einen ja über
Code:
if CheckBox.Checked then..
oder über
Code:
if Checkbox.State=cbChecked
ermitteln; für den häkchenfreien Zustand dann entsprechend so:
Code:
if not CheckBox.Checked then..
bzw
Code:
if Checkbox.State=cbUnChecked
..
Zu diesem Problem gibt es hier
Abhängigkeiten mehrerer Checkboxen noch etwas mehr Codebeispiel.
...