unit uDASelectDataTablesForm; interface uses Windows, Messages, SysUtils, Variants, Classes {$IFDEF WIN32} ,Graphics, Controls, Forms, Dialogs, StdCtrls, CheckLst, Buttons; {$ENDIF} {$IFDEF LINUX} , QForms, QStdCtrls, QControls, QCheckLst, QButtons; {$ENDIF} type TDASelectDataTablesForm = class(TForm) btn_Ok: TBitBtn; btn_Cancel: TBitBtn; lb_DataTables: TCheckListBox; cb_SelectAll: TCheckBox; procedure cb_SelectAllClick(Sender: TObject); procedure lb_DataTablesClick(Sender: TObject); private fChanging: boolean; procedure SetOkButtonCaption(const Value: string); public procedure UpdateCheckBoxState; property OkButtonCaption: string write SetOkButtonCaption; end; var DASelectDataTablesForm: TDASelectDataTablesForm; implementation {$R *.dfm} procedure TDASelectDataTablesForm.cb_SelectAllClick(Sender: TObject); var i: integer; begin if fChanging then exit; fChanging := true; try for i := 0 to lb_DataTables.Items.Count-1 do lb_DataTables.Checked[i] := cb_SelectAll.Checked; finally fChanging := false; end; end; procedure TDASelectDataTablesForm.lb_DataTablesClick(Sender: TObject); var lNone, lAll: boolean; i: integer; begin if fChanging then exit; fChanging := true; try lNone := true; lAll := true; for i := 0 to lb_DataTables.Items.Count-1 do if lb_DataTables.Checked[i] then lNone := false else lAll := false; if lNone then cb_SelectAll.State := cbUnchecked else if lAll then cb_SelectAll.State := cbChecked else cb_SelectAll.State := cbGrayed; finally fChanging := false; end; end; procedure TDASelectDataTablesForm.SetOkButtonCaption(const Value: string); begin btn_Ok.Caption := Value; end; procedure TDASelectDataTablesForm.UpdateCheckBoxState; begin lb_DataTablesClick(nil); end; end.