Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Checkboxen machen mich wahnsinnig! (https://www.delphipraxis.net/75311-checkboxen-machen-mich-wahnsinnig.html)

raiguen 17. Aug 2006 19:37

Re: Checkboxen machen mich wahnsinnig!
 
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.
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 Uhr.
Seite 2 von 2     12   

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