View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003942 | JEDI VCL | 00 JVCL Components | public | 2006-10-06 15:28 | 2006-12-03 05:47 |
Reporter | Roman Ganz | Assigned To | robert_marquardt | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | Daily / GIT | ||||
Target Version | Fixed in Version | ||||
Summary | 0003942: checkable JvGroupbox | ||||
Description | I often need a Groupbox with a included Checkbox instead of the Caption. I need this for example for optional Filters of Tables or other optional Configurations. When the Checkbox is checked, all Child-Components of the Groupbox should be enabled and when the Checkbox is unchecked then all Child-Components of the Groupbox should be disabled (but not the Checkbox itself). I don't know if someone else could use that, but for me, it would make a lot easier. | ||||
Additional Information | I made a first try, it should be backward compatible... Please check it. | ||||
Tags | No tags attached. | ||||
2006-10-06 15:28
|
JvGroupBox.patch (4,176 bytes)
Index: JvGroupBox.pas =================================================================== --- JvGroupBox.pas (Revision 10965) +++ JvGroupBox.pas (Arbeitskopie) @@ -14,7 +14,8 @@ Portions created by Peter Below are Copyright (C) 2000 Peter Below. All Rights Reserved. -Contributor(s): ______________________________________. +Contributor(s): +Roman Ganz You may retrieve the latest version of this file at the Project JEDI's JVCL home page, located at http://jvcl.sourceforge.net @@ -34,14 +35,24 @@ JclUnitVersioning, {$ENDIF UNITVERSIONING} SysUtils, Classes, Windows, Messages, Graphics, Controls, Forms, StdCtrls, - JvThemes, JvExControls, JvExStdCtrls, JvJCLUtils, JvComponent; + JvThemes, JvExControls, JvExStdCtrls, JvJCLUtils, JvComponent, JvCheckBox; type TJvGroupBox = class(TJvExGroupBox, IJvDenySubClassing) private + FCheckBox: TJvCheckBox; + FOnCheck: TNotifyEvent; FOnHotKey: TNotifyEvent; FPropagateEnable: Boolean; + FCheckable: Boolean; procedure SetPropagateEnable(const Value: Boolean); + procedure SetCheckable(const Value: Boolean); + function GetCaption: TCaption; + procedure SetCaption(const Value: TCaption); + function GetChecked: Boolean; + procedure SetChecked(const Value: Boolean); + function StoredCheckable: Boolean; + procedure SetOnCheck(const Value: TNotifyEvent); protected function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; override; @@ -52,11 +63,15 @@ constructor Create(AOwner: TComponent); override; property Canvas; published + property Caption: TCaption read GetCaption write SetCaption; + property Checkable: Boolean read FCheckable write SetCheckable default False; + property Checked: Boolean read GetChecked write SetChecked stored StoredCheckable; property HintColor; {$IFDEF JVCLThemesEnabledD56} property ParentBackground default True; {$ENDIF JVCLThemesEnabledD56} property PropagateEnable: Boolean read FPropagateEnable write SetPropagateEnable default False; + property OnCheck: TNotifyEvent read FOnCheck write SetOnCheck; property OnMouseEnter; property OnMouseLeave; property OnParentColorChange; @@ -86,6 +101,7 @@ {$IFDEF JVCLThemesEnabledD56} IncludeThemeStyle(Self, [csParentBackground]); {$ENDIF JVCLThemesEnabledD56} + FCheckable := False; end; procedure TJvGroupBox.Paint; @@ -198,12 +214,70 @@ Invalidate; end; +function TJvGroupBox.GetCaption: TCaption; +begin + if FCheckable then + Result := FCheckBox.Caption + else + Result := inherited Caption; +end; + +function TJvGroupBox.GetChecked: Boolean; +begin + if FCheckable then + Result := FCheckBox.Checked + else + Result := False; +end; + procedure TJvGroupBox.DoHotKey; begin if Assigned(FOnHotKey) then FOnHotKey(Self); end; +procedure TJvGroupBox.SetCaption(const Value: TCaption); +begin + if FCheckable then + FCheckBox.Caption := Value + else + inherited Caption := Value; +end; + +procedure TJvGroupBox.SetCheckable(const Value: Boolean); +begin + if FCheckable <> Value then + begin + if Value then begin + FCheckBox := TJvCheckBox.Create(Self); + FCheckBox.Parent := Self; + FCheckBox.Top := 0; + FCheckBox.Left := 8; + FCheckBox.Caption := Caption; + inherited Caption := ''; + end + else + begin + inherited Caption := FCheckBox.Caption; + FCheckBox.Free; + end; + FCheckable := Value; + end; +end; + +procedure TJvGroupBox.SetChecked(const Value: Boolean); +begin + if FCheckable then + FCheckBox.Checked := Value; +end; + +procedure TJvGroupBox.SetOnCheck(const Value: TNotifyEvent); +begin + FOnCheck := Value; + if FCheckable then + FCheckBox.OnClick := FOnCheck; +end; + procedure TJvGroupBox.SetPropagateEnable(const Value: Boolean); var I: Integer; @@ -213,6 +287,11 @@ Controls[I].Enabled := Enabled; end; +function TJvGroupBox.StoredCheckable: Boolean; +begin + Result := FCheckable and Checked; +end; + {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); |
|
Oh, I forgot to say: the feature that all Child-Components were disabled on uncheck, is not implemented in the Patch. I dont know if we should... |
|
Implemented. It needed some tweaks especially to implement nested TJvGroupBoxes. |
Date Modified | Username | Field | Change |
---|---|---|---|
2006-10-06 15:28 | Roman Ganz | New Issue | |
2006-10-06 15:28 | Roman Ganz | File Added: JvGroupBox.patch | |
2006-10-06 15:31 | Roman Ganz | Note Added: 0010326 | |
2006-12-03 05:46 | robert_marquardt | Note Added: 0010449 | |
2006-12-03 05:47 | robert_marquardt | Status | new => resolved |
2006-12-03 05:47 | robert_marquardt | Resolution | open => fixed |
2006-12-03 05:47 | robert_marquardt | Assigned To | => robert_marquardt |