LCL-CustomDrawn: Adds a better identifier for CD injected controls and starts improving the tabbing between controls

git-svn-id: trunk@39447 -
This commit is contained in:
sekelsenmat 2012-12-06 10:50:53 +00:00
parent 8624b78a67
commit 547ebc6bc7
6 changed files with 45 additions and 4 deletions

View File

@ -1899,6 +1899,7 @@ type
FDoubleBuffered: Boolean; FDoubleBuffered: Boolean;
FDockSite: Boolean; FDockSite: Boolean;
FUseDockManager: Boolean; FUseDockManager: Boolean;
FIsCDIntfControl: Boolean;
procedure AlignControl(AControl: TControl); procedure AlignControl(AControl: TControl);
function GetBrush: TBrush; function GetBrush: TBrush;
function GetControl(const Index: Integer): TControl; function GetControl(const Index: Integer): TControl;
@ -2107,6 +2108,7 @@ type
property DoubleBuffered: Boolean read FDoubleBuffered write FDoubleBuffered default False; property DoubleBuffered: Boolean read FDoubleBuffered write FDoubleBuffered default False;
property Handle: HWND read GetHandle write SetHandle; property Handle: HWND read GetHandle write SetHandle;
property IsResizing: Boolean read GetIsResizing; property IsResizing: Boolean read GetIsResizing;
property IsCDIntfControl: Boolean read FIsCDIntfControl write FIsCDIntfControl default False;
property TabOrder: TTabOrder read GetTabOrder write SetTaborder default -1; property TabOrder: TTabOrder read GetTabOrder write SetTaborder default -1;
property TabStop: Boolean read FTabStop write SetTabStop default false; property TabStop: Boolean read FTabStop write SetTabStop default false;
property OnAlignInsertBefore: TAlignInsertBeforeEvent read FOnAlignInsertBefore write FOnAlignInsertBefore; property OnAlignInsertBefore: TAlignInsertBeforeEvent read FOnAlignInsertBefore write FOnAlignInsertBefore;

View File

@ -4600,7 +4600,8 @@ begin
for I := 0 to FTabList.Count - 1 do for I := 0 to FTabList.Count - 1 do
begin begin
lWinControl := TWinControl(FTabList[I]); lWinControl := TWinControl(FTabList[I]);
if lWinControl.CanFocus then // The tab order list should exclude injected LCL-CustomDrawn controls
if lWinControl.CanFocus and (not lWinControl.IsCDIntfControl) then
List.Add(lWinControl); List.Add(lWinControl);
lWinControl.GetTabOrderList(List); lWinControl.GetTabOrderList(List);
end; end;

View File

@ -84,4 +84,5 @@
{.$define VerboseCDClipboard} {.$define VerboseCDClipboard}
{.$define VerboseCDFocus} {.$define VerboseCDFocus}
{.$define VerboseCDKeyInput} {.$define VerboseCDKeyInput}
{.$define VerboseCDInjectedControlNames}

View File

@ -216,6 +216,7 @@ var
lTarget: TWinControl; lTarget: TWinControl;
lIsTab, lTabDirForward: Boolean; lIsTab, lTabDirForward: Boolean;
lTabNextControl: TWinControl; lTabNextControl: TWinControl;
i: Integer;
begin begin
lTarget := AWindowHandle.GetFocusedControl(); lTarget := AWindowHandle.GetFocusedControl();
{$ifdef VerboseCDEvents} {$ifdef VerboseCDEvents}
@ -242,6 +243,20 @@ begin
begin begin
lTabDirForward := LCLIntf.GetKeyState(VK_SHIFT) = 0; lTabDirForward := LCLIntf.GetKeyState(VK_SHIFT) = 0;
lTarget.Parent.SelectNext(lTarget, lTabDirForward, True); lTarget.Parent.SelectNext(lTarget, lTabDirForward, True);
end
// slightly different code when the currently selected item is the form itself
else if lIsTab then
begin
// find the first TWinControl and select it
lTabNextControl := nil;
for i := 0 to lTarget.ControlCount - 1 do
if lTarget.Controls[i] is TWinControl then
begin
lTabNextControl := TWinControl(lTarget.Controls[i]);
Break;
end;
if lTabNextControl <> nil then lTabNextControl.SetFocus();
end; end;
end; end;
@ -292,15 +307,15 @@ end;
function IsIntfControl(AControl: TWinControl): Boolean; function IsIntfControl(AControl: TWinControl): Boolean;
begin begin
Result := (AControl <> nil) and (AControl.Parent <> nil); Result := (AControl <> nil) and (AControl.Parent <> nil) and AControl.IsCDIntfControl;
if Result then Result := {if Result then Result :=
// Standard Tab // Standard Tab
(AControl is TCDIntfButton) or (AControl is TCDIntfEdit) or (AControl is TCDIntfCheckBox) or (AControl is TCDIntfButton) or (AControl is TCDIntfEdit) or (AControl is TCDIntfCheckBox) or
// Additional Tab // Additional Tab
(AControl is TCDIntfStaticText) or (AControl is TCDIntfStaticText) or
// Common Controls Tab // Common Controls Tab
(AControl is TCDIntfProgressBar) or (AControl is TCDIntfTrackBar) or (AControl is TCDIntfProgressBar) or (AControl is TCDIntfTrackBar) or
(AControl is TCDIntfPageControl); (AControl is TCDIntfPageControl);}
end; end;
end. end.

View File

@ -290,6 +290,8 @@ begin
TCDIntfPageControl(ACDControlField).LCLControl := TCustomTabControl(AWinControl); TCDIntfPageControl(ACDControlField).LCLControl := TCustomTabControl(AWinControl);
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
class function TCDWSCustomTabControl.CreateHandle( class function TCDWSCustomTabControl.CreateHandle(
@ -426,6 +428,8 @@ begin
TCDIntfTrackBar(ACDControlField).LCLControl := TCustomTrackBar(AWinControl); TCDIntfTrackBar(ACDControlField).LCLControl := TCustomTrackBar(AWinControl);
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
class function TCDWSTrackBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; class function TCDWSTrackBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;
@ -565,6 +569,8 @@ begin
TCDIntfProgressBar(ACDControlField).LCLControl := TCustomProgressBar(AWinControl); TCDIntfProgressBar(ACDControlField).LCLControl := TCustomProgressBar(AWinControl);
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
class function TCDWSProgressBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; class function TCDWSProgressBar.CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle;

View File

@ -355,6 +355,8 @@ begin
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
class function TCDWSCustomMemo.CreateHandle(const AWinControl: TWinControl; class function TCDWSCustomMemo.CreateHandle(const AWinControl: TWinControl;
@ -420,6 +422,8 @@ begin
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
class function TCDWSScrollBar.CreateHandle(const AWinControl: TWinControl; class function TCDWSScrollBar.CreateHandle(const AWinControl: TWinControl;
@ -820,6 +824,8 @@ begin
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
class function TCDWSCustomComboBox.CreateHandle(const AWinControl: TWinControl; class function TCDWSCustomComboBox.CreateHandle(const AWinControl: TWinControl;
@ -1302,6 +1308,8 @@ begin
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
TCDIntfEdit(ACDControlField).ReadOnly := TCustomEdit(AWinControl).ReadOnly; TCDIntfEdit(ACDControlField).ReadOnly := TCustomEdit(AWinControl).ReadOnly;
end; end;
@ -1568,6 +1576,8 @@ begin
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
@ -1637,6 +1647,8 @@ begin
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
@ -1726,6 +1738,8 @@ begin
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
@ -1796,6 +1810,8 @@ begin
ACDControlField.Parent := AWinControl; ACDControlField.Parent := AWinControl;
ACDControlField.Caption := AWinControl.Caption; ACDControlField.Caption := AWinControl.Caption;
ACDControlField.Align := alClient; ACDControlField.Align := alClient;
ACDControlField.IsCDIntfControl := True;
{$ifdef VerboseCDInjectedControlNames}ACDControlField.Name := 'CustomDrawnInternal_' + AWinControl.Name;{$endif}
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------