IDE: Assign a mouse wheel handler to "all compiler options" ScrollBox and to controls inside it. Based on code by Sandro Cumerlato.

git-svn-id: trunk@46349 -
This commit is contained in:
juha 2014-09-29 18:22:38 +00:00
parent b67e8a8c92
commit 396d19a9a0

View File

@ -5,8 +5,9 @@ unit AllCompilerOptions;
interface interface
uses uses
Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, ButtonPanel, EditBtn, Classes, SysUtils, math, contnrs,
Dialogs, contnrs, LCLProc, ComCtrls, ExtCtrls, Compiler, LazarusIDEStrConsts; Forms, Controls, StdCtrls, Buttons, ButtonPanel, EditBtn, ExtCtrls,
LCLProc, Compiler, LazarusIDEStrConsts;
type type
@ -22,6 +23,8 @@ type
sbAllOptions: TScrollBox; sbAllOptions: TScrollBox;
procedure btnResetOptionsFilterClick(Sender: TObject); procedure btnResetOptionsFilterClick(Sender: TObject);
procedure cbShowModifiedClick(Sender: TObject); procedure cbShowModifiedClick(Sender: TObject);
procedure sbMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
procedure edOptionsFilterChange(Sender: TObject); procedure edOptionsFilterChange(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
private private
@ -62,6 +65,7 @@ constructor TfrmAllCompilerOptions.Create(TheOwner: TComponent);
begin begin
inherited Create(TheOwner); inherited Create(TheOwner);
FGeneratedControls := TComponentList.Create; FGeneratedControls := TComponentList.Create;
sbAllOptions.OnMouseWheel := @sbMouseWheel;
end; end;
destructor TfrmAllCompilerOptions.Destroy; destructor TfrmAllCompilerOptions.Destroy;
@ -154,6 +158,14 @@ begin
FRenderedOnce := True; FRenderedOnce := True;
end; end;
procedure TfrmAllCompilerOptions.sbMouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
with sbAllOptions.VertScrollBar do
Position := Position - Sign(WheelDelta) * Increment;
Handled := True;
end;
procedure TfrmAllCompilerOptions.CheckBoxClick(Sender: TObject); procedure TfrmAllCompilerOptions.CheckBoxClick(Sender: TObject);
var var
cb: TCheckBox; cb: TCheckBox;
@ -205,6 +217,7 @@ var
function MakeOptionCntrl(aCntrlClass: TControlClass; aCaption: string; function MakeOptionCntrl(aCntrlClass: TControlClass; aCaption: string;
aTopOffs: integer=0): TControl; aTopOffs: integer=0): TControl;
// Header Label or TCheckBox
begin begin
Result := aCntrlClass.Create(Nil); Result := aCntrlClass.Create(Nil);
Result.Parent := Container; Result.Parent := Container;
@ -232,7 +245,7 @@ var
procedure MakeDescrLabel(aCntrl: TControl; aLeft: integer); procedure MakeDescrLabel(aCntrl: TControl; aLeft: integer);
// Description label after CheckBox / Edit control // Description label after CheckBox / Edit control
var var
Lbl: TControl; Lbl: TLabel;
begin begin
Lbl := TLabel.Create(Nil); Lbl := TLabel.Create(Nil);
Lbl.Parent := Container; Lbl.Parent := Container;
@ -241,6 +254,7 @@ var
Lbl.AnchorSide[akTop].Side := asrCenter; Lbl.AnchorSide[akTop].Side := asrCenter;
Lbl.Left := aLeft; // Now use Left instead of anchors Lbl.Left := aLeft; // Now use Left instead of anchors
Lbl.Anchors := [akLeft,akTop]; Lbl.Anchors := [akLeft,akTop];
Lbl.OnMouseWheel := @sbMouseWheel;
FGeneratedControls.Add(Lbl); FGeneratedControls.Add(Lbl);
end; end;
@ -256,12 +270,14 @@ var
case Opt.EditKind of case Opt.EditKind of
oeGroup, oeSet: begin // Label for group or set oeGroup, oeSet: begin // Label for group or set
Cntrl := MakeOptionCntrl(TLabel, Opt.Option+Opt.Suffix); Cntrl := MakeOptionCntrl(TLabel, Opt.Option+Opt.Suffix);
TLabel(Cntrl).OnMouseWheel := @sbMouseWheel;
MakeDescrLabel(Cntrl, Opt.CalcLeft(LeftDescrGroup, 7)); MakeDescrLabel(Cntrl, Opt.CalcLeft(LeftDescrGroup, 7));
end; end;
oeBoolean: begin // CheckBox oeBoolean: begin // CheckBox
Cntrl := MakeOptionCntrl(TCheckBox, Opt.Option); Cntrl := MakeOptionCntrl(TCheckBox, Opt.Option);
Assert((Opt.Value='') or (Opt.Value='True'), 'Wrong value in Boolean option '+Opt.Option); Assert((Opt.Value='') or (Opt.Value='True'), 'Wrong value in Boolean option '+Opt.Option);
TCheckBox(Cntrl).Checked := Opt.Value<>''; TCheckBox(Cntrl).Checked := Opt.Value<>'';
TCheckBox(Cntrl).OnMouseWheel := @sbMouseWheel;
Cntrl.OnClick := @CheckBoxClick; Cntrl.OnClick := @CheckBoxClick;
MakeDescrLabel(Cntrl, Opt.CalcLeft(LeftDescrBoolean, 11)); MakeDescrLabel(Cntrl, Opt.CalcLeft(LeftDescrBoolean, 11));
end; end;
@ -269,19 +285,23 @@ var
Cntrl := MakeOptionCntrl(TCheckBox, Opt.Option+Opt.Description); Cntrl := MakeOptionCntrl(TCheckBox, Opt.Option+Opt.Description);
Assert((Opt.Value='') or (Opt.Value='True'), 'Wrong value in Boolean option '+Opt.Option); Assert((Opt.Value='') or (Opt.Value='True'), 'Wrong value in Boolean option '+Opt.Option);
TCheckBox(Cntrl).Checked := Opt.Value<>''; TCheckBox(Cntrl).Checked := Opt.Value<>'';
TCheckBox(Cntrl).OnMouseWheel := @sbMouseWheel;
Cntrl.OnClick := @CheckBoxClick; Cntrl.OnClick := @CheckBoxClick;
end; end;
oeNumber, oeText, oeSetNumber: begin // Edit oeNumber, oeText, oeSetNumber: begin // Edit
Lbl := MakeOptionCntrl(TLabel, Opt.Option+Opt.Suffix, 3); Lbl := MakeOptionCntrl(TLabel, Opt.Option+Opt.Suffix, 3);
TLabel(Lbl).OnMouseWheel := @sbMouseWheel;
Cntrl := MakeEditCntrl(Lbl, TEdit); Cntrl := MakeEditCntrl(Lbl, TEdit);
if Opt.EditKind <> oeText then if Opt.EditKind <> oeText then
TCustomEdit(Cntrl).Width := 80; TEdit(Cntrl).Width := 80;
TCustomEdit(Cntrl).Text := Opt.Value; TEdit(Cntrl).Text := Opt.Value;
TCustomEdit(Cntrl).OnChange := @EditChange; TEdit(Cntrl).OnChange := @EditChange;
TEdit(Cntrl).OnMouseWheel := @sbMouseWheel;
MakeDescrLabel(Cntrl, LeftDescrEdit); MakeDescrLabel(Cntrl, LeftDescrEdit);
end; end;
oeList: begin // ComboBox oeList: begin // ComboBox
Lbl := MakeOptionCntrl(TLabel, Opt.Option+Opt.Suffix, 3); Lbl := MakeOptionCntrl(TLabel, Opt.Option+Opt.Suffix, 3);
TLabel(Lbl).OnMouseWheel := @sbMouseWheel;
Cntrl := MakeEditCntrl(Lbl, TComboBox); Cntrl := MakeEditCntrl(Lbl, TComboBox);
cb := TComboBox(Cntrl); cb := TComboBox(Cntrl);
cb.Style := csDropDownList; cb.Style := csDropDownList;