1586 lines
53 KiB
ObjectPascal
1586 lines
53 KiB
ObjectPascal
{*******************************************************************}
|
|
{ }
|
|
{ Developer Express Visual Component Library }
|
|
{ ExpressBars components }
|
|
{ }
|
|
{ Copyright (c) 1998-2009 Developer Express Inc. }
|
|
{ ALL RIGHTS RESERVED }
|
|
{ }
|
|
{ The entire contents of this file is protected by U.S. and }
|
|
{ International Copyright Laws. Unauthorized reproduction, }
|
|
{ reverse-engineering, and distribution of all or any portion of }
|
|
{ the code contained in this file is strictly prohibited and may }
|
|
{ result in severe civil and criminal penalties and will be }
|
|
{ prosecuted to the maximum extent possible under the law. }
|
|
{ }
|
|
{ RESTRICTIONS }
|
|
{ }
|
|
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
|
|
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
|
|
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
|
|
{ LICENSED TO DISTRIBUTE THE EXPRESSBARS AND ALL ACCOMPANYING VCL }
|
|
{ CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
|
|
{ }
|
|
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
|
|
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
|
|
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
|
|
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
|
|
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
|
|
{ }
|
|
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
|
|
{ ADDITIONAL RESTRICTIONS. }
|
|
{ }
|
|
{*******************************************************************}
|
|
|
|
unit dxBarAccessibility;
|
|
|
|
{$I cxVer.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF DELPHI6}
|
|
Types,
|
|
{$ENDIF}
|
|
Windows, Classes, SysUtils, dxCore, cxAccessibility, cxClasses, dxBar;
|
|
|
|
type
|
|
{ TdxDockControlAccessibilityHelper }
|
|
|
|
TdxDockControlAccessibilityHelper = class(TdxBarAccessibilityHelper)
|
|
private
|
|
function GetDockControl: TdxDockControl;
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function GetBarManager: TdxBarManager; override;
|
|
|
|
function GetChild(AIndex: Integer): TcxAccessibilityHelper; override;
|
|
function GetChildCount: Integer; override;
|
|
function GetChildIndex(AChild: TcxAccessibilityHelper): Integer; override;
|
|
function GetOwnerObjectWindow: HWND; override;
|
|
function GetScreenBounds(AChildID: TcxAccessibleSimpleChildElementID): TRect; override;
|
|
function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
|
|
property DockControl: TdxDockControl read GetDockControl;
|
|
end;
|
|
|
|
{ TCustomdxBarControlAccessibilityHelper }
|
|
|
|
TCustomdxBarControlAccessibilityHelper = class(TdxBarAccessibilityHelper)
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function CanNavigateToChildren(AKey: Word): Boolean; override;
|
|
|
|
function GetChild(AIndex: Integer): TcxAccessibilityHelper; override;
|
|
function GetChildCount: Integer; override;
|
|
function GetChildIndex(AChild: TcxAccessibilityHelper): Integer; override;
|
|
function GetOwnerObjectWindow: HWND; override;
|
|
function GetScreenBounds(AChildID: TcxAccessibleSimpleChildElementID): TRect; override;
|
|
function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
|
|
function Expand: TCustomdxBarControlAccessibilityHelper; virtual;
|
|
function GetBarControlInstance: TCustomdxBarControl; virtual; abstract;
|
|
procedure GetItemControlKeyTipPosition(AItemControl: TdxBarItemControl;
|
|
out ABasePoint: TPoint; out AHorzAlign: TAlignment; out AVertAlign: TcxAlignmentVert); virtual;
|
|
function GetItemControlScreenBounds(AItemControl: TdxBarItemControl): TRect;
|
|
function GetNextAccessibleObject(AItemControl: TdxBarItemControl;
|
|
ADirection: TcxAccessibilityNavigationDirection): IdxBarAccessibilityHelper; overload; virtual;
|
|
function IsCollapsed: Boolean; virtual;
|
|
procedure UnselectSelectedItemControl; virtual;
|
|
|
|
property BarControl: TCustomdxBarControl read GetBarControlInstance; // TODO remove
|
|
property BarControlInstance: TCustomdxBarControl read GetBarControlInstance;
|
|
end;
|
|
|
|
{ TdxBarControlAccessibilityHelper }
|
|
|
|
TdxBarControlAccessibilityHelper = class(TCustomdxBarControlAccessibilityHelper)
|
|
private
|
|
function GetBar: TdxBar;
|
|
function GetBarControl: TdxBarControl;
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function GetBarManager: TdxBarManager; override;
|
|
function GetDefaultAccessibleObject: IdxBarAccessibilityHelper; override;
|
|
function HandleNavigationKey(var AKey: Word): Boolean; override;
|
|
procedure Select(ASetFocus: Boolean); override;
|
|
procedure Unselect(ANextSelectedObject: IdxBarAccessibilityHelper); override;
|
|
|
|
function GetChild(AIndex: Integer): TcxAccessibilityHelper; override;
|
|
function GetChildCount: Integer; override;
|
|
function GetChildIndex(AChild: TcxAccessibilityHelper): Integer; override;
|
|
function GetParent: TcxAccessibilityHelper; override;
|
|
|
|
// function ChildIsSimpleElement(AIndex: Integer): Boolean; override;
|
|
// function GetChildIndex(AChild: TcxAccessibilityHelper): Integer; override;
|
|
// function GetHitTest(AScreenX, AScreenY: Integer; out AChildIndex: Integer): TcxAccessibleObjectHitTest; override;
|
|
// function GetName(AChildID: TcxAccessibleSimpleChildElementID): string; override;
|
|
// function GetSupportedProperties(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): TcxAccessibleObjectProperties; override;
|
|
// function NavigateToChild(ACurrentChildIndex: Integer; ADirection: TcxAccessibilityNavigationDirection): Integer; override;
|
|
|
|
function GetBarControlInstance: TCustomdxBarControl; override;
|
|
procedure GetCaptionButtonKeyTipPosition(ACaptionButton: TdxBarCaptionButton;
|
|
out ABasePointY: Integer; out AVertAlign: TcxAlignmentVert); virtual;
|
|
function GetNextAccessibleObject(AItemControl: TdxBarItemControl;
|
|
ADirection: TcxAccessibilityNavigationDirection): IdxBarAccessibilityHelper; override;
|
|
|
|
property Bar: TdxBar read GetBar;
|
|
property BarControl: TdxBarControl read GetBarControl;
|
|
end;
|
|
|
|
{ TdxBarControlMarkAccessibilityHelper }
|
|
|
|
TdxBarControlMarkAccessibilityHelper = class(TdxBarAccessibilityHelper)
|
|
private
|
|
function GetBarControl: TdxBarControl;
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function GetBarManager: TdxBarManager; override;
|
|
function HandleNavigationKey(var AKey: Word): Boolean; override;
|
|
function IsNavigationKey(AKey: Word): Boolean; override;
|
|
procedure Select(ASetFocus: Boolean); override;
|
|
procedure Unselect(ANextSelectedObject: IdxBarAccessibilityHelper); override;
|
|
|
|
function GetOwnerObjectWindow: HWND; override;
|
|
function GetParent: TcxAccessibilityHelper; override;
|
|
function GetScreenBounds(AChildID: TcxAccessibleSimpleChildElementID): TRect; override;
|
|
function GetSelectable: Boolean; override;
|
|
function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
|
|
procedure DropDown;
|
|
procedure UpdateMarkState;
|
|
|
|
property BarControl: TdxBarControl read GetBarControl;
|
|
public
|
|
procedure CloseUpHandler(AClosedByEscape: Boolean);
|
|
end;
|
|
|
|
{ TdxBarCaptionButtonsAccessibilityHelper }
|
|
|
|
TdxBarCaptionButtonsAccessibilityHelper = class(TdxBarAccessibilityHelper)
|
|
private
|
|
function GetCaptionButtons: TdxBarCaptionButtons;
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function GetBarManager: TdxBarManager; override;
|
|
procedure Unselect(ANextSelectedObject: IdxBarAccessibilityHelper); override;
|
|
|
|
function GetChild(AIndex: Integer): TcxAccessibilityHelper; override;
|
|
function GetChildCount: Integer; override;
|
|
function GetChildIndex(AChild: TcxAccessibilityHelper): Integer; override;
|
|
function GetOwnerObjectWindow: HWND; override;
|
|
function GetParent: TcxAccessibilityHelper; override;
|
|
function GetScreenBounds(AChildID: TcxAccessibleSimpleChildElementID): TRect; override;
|
|
function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
|
|
procedure UpdateCaptionButtons;
|
|
|
|
property CaptionButtons: TdxBarCaptionButtons read GetCaptionButtons;
|
|
end;
|
|
|
|
{ TdxBarCaptionButtonAccessibilityHelper }
|
|
|
|
TdxBarCaptionButtonAccessibilityHelper = class(TdxBarAccessibilityHelper)
|
|
private
|
|
procedure DoButtonClick;
|
|
function GetCaptionButton: TdxBarCaptionButton;
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function GetBarManager: TdxBarManager; override;
|
|
function HandleNavigationKey(var AKey: Word): Boolean; override;
|
|
function IsNavigationKey(AKey: Word): Boolean; override;
|
|
procedure Select(ASetFocus: Boolean); override;
|
|
procedure Unselect(ANextSelectedObject: IdxBarAccessibilityHelper); override;
|
|
|
|
function GetOwnerObjectWindow: HWND; override;
|
|
function GetParent: TcxAccessibilityHelper; override;
|
|
function GetScreenBounds(AChildID: TcxAccessibleSimpleChildElementID): TRect; override;
|
|
function GetSelectable: Boolean; override;
|
|
function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
|
|
function GetAssignedKeyTip: string; override;
|
|
function GetDefaultKeyTip: string; override;
|
|
procedure GetKeyTipInfo(out AKeyTipInfo: TdxBarKeyTipInfo); override;
|
|
procedure KeyTipHandler(Sender: TObject); override;
|
|
|
|
property CaptionButton: TdxBarCaptionButton read GetCaptionButton;
|
|
end;
|
|
|
|
{ TdxBarSubMenuControlAccessibilityHelper }
|
|
|
|
TdxBarSubMenuControlAccessibilityHelper = class(TCustomdxBarControlAccessibilityHelper)
|
|
private
|
|
function GetBarControl: TdxBarSubMenuControl;
|
|
function GetItemLinks: TdxBarItemLinks;
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function GetBarManager: TdxBarManager; override;
|
|
function HandleNavigationKey(var AKey: Word): Boolean; override;
|
|
|
|
function GetBarControlInstance: TCustomdxBarControl; override;
|
|
procedure GetItemControlKeyTipPosition(AItemControl: TdxBarItemControl;
|
|
out ABasePoint: TPoint; out AHorzAlign: TAlignment;
|
|
out AVertAlign: TcxAlignmentVert); override;
|
|
function GetNextItemLink(AItemLink: TdxBarItemLink;
|
|
AGoForward: Boolean): TdxBarItemLink; virtual;
|
|
function GetParentForKeyTip: TdxBarAccessibilityHelper; override;
|
|
procedure HandleHorzNavigationKey(ALeftKey: Boolean); virtual;
|
|
procedure HandleVertNavigationKey(AUpKey, AFocusItemControl: Boolean); virtual;
|
|
function IsKeyTipContainer: Boolean; override;
|
|
procedure KeyTipsEscapeHandler; override;
|
|
procedure UnselectSelectedItemControl; override;
|
|
|
|
property BarControl: TdxBarSubMenuControl read GetBarControl;
|
|
property ItemLinks: TdxBarItemLinks read GetItemLinks;
|
|
end;
|
|
|
|
{ TdxBarItemControlAccessibilityHelper }
|
|
|
|
TdxBarItemControlAccessibilityHelper = class(TdxBarAccessibilityHelper)
|
|
private
|
|
function GetItemControl: TdxBarItemControl;
|
|
procedure InvisibleKeyTipHandler(Sender: TObject);
|
|
protected
|
|
// IdxBarAccessibilityHelper
|
|
function GetBarManager: TdxBarManager; override;
|
|
function GetNextAccessibleObject(
|
|
ADirection: TcxAccessibilityNavigationDirection): IdxBarAccessibilityHelper; override;
|
|
function HandleNavigationKey(var AKey: Word): Boolean; override;
|
|
procedure Select(ASetFocus: Boolean); override;
|
|
procedure Unselect(ANextSelectedObject: IdxBarAccessibilityHelper); override;
|
|
|
|
function GetOwnerObjectWindow: HWND; override;
|
|
function GetParent: TcxAccessibilityHelper; override;
|
|
function GetScreenBounds(AChildID: TcxAccessibleSimpleChildElementID): TRect; override;
|
|
function GetSelectable: Boolean; override;
|
|
function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
|
|
// function GetDescription(AChildID: TcxAccessibleSimpleChildElementID): string; override;
|
|
// procedure GetKeyboardAccessParameters(AChildID: TcxAccessibleSimpleChildElementID;
|
|
// out AShortCut: TShortCut; out ACaptionWithAccelChars: string); override;
|
|
// function GetName(AChildID: TcxAccessibleSimpleChildElementID): string; override;
|
|
// function GetSupportedProperties(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): TcxAccessibleObjectProperties; override;
|
|
|
|
function CanSelect: Boolean;
|
|
function GetAssignedKeyTip: string; override;
|
|
function GetDefaultKeyTip: string; override;
|
|
procedure GetKeyTipInfo(out AKeyTipInfo: TdxBarKeyTipInfo); override;
|
|
function NeedsVisibilityForKeyTipHandling: Boolean; virtual;
|
|
|
|
property ItemControl: TdxBarItemControl read GetItemControl;
|
|
end;
|
|
|
|
{ TdxBarButtonLikeControlAccessibilityHelper }
|
|
|
|
TdxBarButtonLikeControlAccessibilityHelper = class(TdxBarItemControlAccessibilityHelper)
|
|
private
|
|
function GetItemControl: TdxBarButtonLikeControl;
|
|
protected
|
|
procedure DoClick; virtual;
|
|
procedure DoDropDown;
|
|
function IsDropDownControl: Boolean; virtual;
|
|
procedure KeyTipHandler(Sender: TObject); override;
|
|
function NeedsVisibilityForKeyTipHandling: Boolean; override;
|
|
function ShowDropDownWindow: Boolean; virtual; abstract;
|
|
|
|
property ItemControl: TdxBarButtonLikeControl read GetItemControl;
|
|
end;
|
|
|
|
{ TdxBarButtonControlAccessibilityHelper }
|
|
|
|
TdxBarButtonControlAccessibilityHelper = class(TdxBarButtonLikeControlAccessibilityHelper)
|
|
private
|
|
function GetItemControl: TdxBarButtonControl;
|
|
protected
|
|
// procedure DoDefaultAction(AChildID: TcxAccessibleSimpleChildElementID); override;
|
|
// function GetDefaultActionDescription(AChildID: TcxAccessibleSimpleChildElementID): string; override;
|
|
// function GetRole(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
// function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; override;
|
|
// function GetSupportedProperties(AChildID: TcxAccessibleSimpleChildElementID): TcxAccessibleObjectProperties; override;
|
|
|
|
function IsDropDownControl: Boolean; override;
|
|
function ShowDropDownWindow: Boolean; override;
|
|
|
|
property ItemControl: TdxBarButtonControl read GetItemControl;
|
|
end;
|
|
|
|
{ TdxBarSubItemControlAccessibilityHelper }
|
|
|
|
TdxBarSubItemControlAccessibilityHelper = class(TdxBarButtonLikeControlAccessibilityHelper)
|
|
protected
|
|
function IsDropDownControl: Boolean; override;
|
|
function ShowDropDownWindow: Boolean; override;
|
|
end;
|
|
|
|
{ TdxBarWinControlAccessibilityHelper }
|
|
|
|
TdxBarWinControlAccessibilityHelper = class(TdxBarItemControlAccessibilityHelper)
|
|
protected
|
|
procedure KeyTipHandler(Sender: TObject); override;
|
|
function NeedsVisibilityForKeyTipHandling: Boolean; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
Messages, Controls, cxContainer, cxControls, cxGeometry, cxGraphics, Menus,
|
|
dxBarStrs;
|
|
|
|
type
|
|
TCustomdxBarControlAccess = class(TCustomdxBarControl);
|
|
TdxBarButtonControlAccess = class(TdxBarButtonControl);
|
|
TdxBarControlAccess = class(TdxBarControl);
|
|
TdxBarItemControlAccess = class(TdxBarItemControl);
|
|
TdxBarItemLinksAccess = class(TdxBarItemLinks);
|
|
TdxBarManagerAccess = class(TdxBarManager);
|
|
TdxBarSubItemAccess = class(TdxBarSubItem);
|
|
TdxBarSubItemControlAccess = class(TdxBarSubItemControl);
|
|
TdxBarSubMenuControlAccess = class(TdxBarSubMenuControl);
|
|
|
|
{ TdxDockControlAccessibilityHelper }
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TdxDockControlAccessibilityHelper.GetBarManager: TdxBarManager;
|
|
begin
|
|
Result := DockControl.BarManager;
|
|
end;
|
|
|
|
function TdxDockControlAccessibilityHelper.GetChild(
|
|
AIndex: Integer): TcxAccessibilityHelper;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
I := 0;
|
|
while AIndex >= DockControl.Rows[I].ColCount do
|
|
begin
|
|
Dec(AIndex, DockControl.Rows[I].ColCount);
|
|
Inc(I);
|
|
end;
|
|
Result := DockControl.Rows[I].Cols[AIndex].BarControl.IAccessibilityHelper.GetHelper;
|
|
end;
|
|
|
|
function TdxDockControlAccessibilityHelper.GetChildCount: Integer;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := 0;
|
|
for I := 0 to DockControl.RowCount - 1 do
|
|
Inc(Result, DockControl.Rows[I].ColCount);
|
|
end;
|
|
|
|
function TdxDockControlAccessibilityHelper.GetChildIndex(
|
|
AChild: TcxAccessibilityHelper): Integer;
|
|
var
|
|
AIndex, I, J: Integer;
|
|
begin
|
|
Result := -1;
|
|
AIndex := 0;
|
|
for I := 0 to DockControl.RowCount - 1 do
|
|
for J := 0 to DockControl.Rows[I].ColCount - 1 do
|
|
if DockControl.Rows[I].Cols[J].BarControl.IAccessibilityHelper.GetHelper = AChild then
|
|
begin
|
|
Result := AIndex;
|
|
Break;
|
|
end
|
|
else
|
|
Inc(AIndex);
|
|
end;
|
|
|
|
function TdxDockControlAccessibilityHelper.GetOwnerObjectWindow: HWND;
|
|
begin
|
|
if DockControl.HandleAllocated then
|
|
Result := DockControl.Handle
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TdxDockControlAccessibilityHelper.GetScreenBounds(
|
|
AChildID: TcxAccessibleSimpleChildElementID): TRect;
|
|
begin
|
|
if Visible then
|
|
Result := cxGetWindowRect(GetOwnerObjectWindow)
|
|
else
|
|
Result := cxEmptyRect;
|
|
end;
|
|
|
|
function TdxDockControlAccessibilityHelper.GetState(
|
|
AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
var
|
|
AHandle: HWND;
|
|
begin
|
|
Result := cxSTATE_SYSTEM_NORMAL;
|
|
AHandle := GetOwnerObjectWindow;
|
|
if (AHandle = 0) or not IsWindowVisible(AHandle) then
|
|
Result := Result or cxSTATE_SYSTEM_INVISIBLE;
|
|
end;
|
|
|
|
function TdxDockControlAccessibilityHelper.GetDockControl: TdxDockControl;
|
|
begin
|
|
Result := TdxDockControl(FOwnerObject);
|
|
end;
|
|
|
|
{ TCustomdxBarControlAccessibilityHelper }
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TCustomdxBarControlAccessibilityHelper.CanNavigateToChildren(AKey: Word): Boolean;
|
|
var
|
|
ABarControlInstance: TCustomdxBarControlAccess;
|
|
begin
|
|
ABarControlInstance := TCustomdxBarControlAccess(BarControlInstance);
|
|
Result := not (ABarControlInstance.SelectedControl is TdxBarWinControl and
|
|
TdxBarWinControl(ABarControlInstance.SelectedControl).Focused);
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetChild(
|
|
AIndex: Integer): TcxAccessibilityHelper;
|
|
begin
|
|
Result := BarControlInstance.ViewInfo.ItemControlViewInfos[AIndex].Control.IAccessibilityHelper.GetHelper;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetChildCount: Integer;
|
|
begin
|
|
Result := BarControlInstance.ViewInfo.ItemControlCount;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetChildIndex(
|
|
AChild: TcxAccessibilityHelper): Integer;
|
|
begin
|
|
if AChild is TdxBarItemControlAccessibilityHelper then
|
|
Result := BarControlInstance.ViewInfo.GetItemControlIndex(TdxBarItemControlAccessibilityHelper(AChild).ItemControl)
|
|
else
|
|
Result := -1;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetOwnerObjectWindow: HWND;
|
|
begin
|
|
if BarControlInstance.HandleAllocated then
|
|
Result := BarControlInstance.Handle
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetScreenBounds(
|
|
AChildID: TcxAccessibleSimpleChildElementID): TRect;
|
|
begin
|
|
if Visible then
|
|
Result := cxGetWindowRect(GetOwnerObjectWindow)
|
|
else
|
|
Result := cxEmptyRect;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetState(
|
|
AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
var
|
|
AHandle: HWND;
|
|
begin
|
|
Result := cxSTATE_SYSTEM_NORMAL;
|
|
AHandle := GetOwnerObjectWindow;
|
|
if (AHandle = 0) or not IsWindowVisible(AHandle) then
|
|
Result := Result or cxSTATE_SYSTEM_INVISIBLE;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.Expand: TCustomdxBarControlAccessibilityHelper;
|
|
begin
|
|
raise EdxException.Create('');
|
|
end;
|
|
|
|
procedure TCustomdxBarControlAccessibilityHelper.GetItemControlKeyTipPosition(
|
|
AItemControl: TdxBarItemControl; out ABasePoint: TPoint;
|
|
out AHorzAlign: TAlignment; out AVertAlign: TcxAlignmentVert);
|
|
begin
|
|
ABasePoint := cxRectCenter(GetItemControlScreenBounds(AItemControl));
|
|
AHorzAlign := taCenter;
|
|
AVertAlign := vaCenter;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetItemControlScreenBounds(
|
|
AItemControl: TdxBarItemControl): TRect;
|
|
begin
|
|
Result := TdxBarItemControlAccessibilityHelper(
|
|
AItemControl.IAccessibilityHelper.GetHelper).GetScreenBounds(cxAccessibleObjectSelfID);
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.GetNextAccessibleObject(
|
|
AItemControl: TdxBarItemControl;
|
|
ADirection: TcxAccessibilityNavigationDirection): IdxBarAccessibilityHelper;
|
|
var
|
|
AObjects: TList;
|
|
begin
|
|
AObjects := TList.Create;
|
|
try
|
|
GetChildrenForNavigation(AItemControl.IAccessibilityHelper.GetBarHelper,
|
|
Self, GetItemControlScreenBounds(AItemControl), ADirection, True, AObjects);
|
|
Result := dxBar.GetNextAccessibleObject(
|
|
AItemControl.IAccessibilityHelper.GetBarHelper, AObjects, ADirection, False);
|
|
finally
|
|
AObjects.Free;
|
|
end;
|
|
end;
|
|
|
|
function TCustomdxBarControlAccessibilityHelper.IsCollapsed: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
procedure TCustomdxBarControlAccessibilityHelper.UnselectSelectedItemControl;
|
|
begin
|
|
if TdxBarManagerAccess(BarControlInstance.BarManager).FocusedBarControl = BarControlInstance then
|
|
BarControlInstance.BarLostFocus
|
|
else
|
|
TCustomdxBarControlAccess(BarControlInstance).SetKeySelectedItem(nil);
|
|
end;
|
|
|
|
{ TdxBarControlAccessibilityHelper }
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TdxBarControlAccessibilityHelper.GetBarManager: TdxBarManager;
|
|
begin
|
|
Result := Bar.BarManager;
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetDefaultAccessibleObject: IdxBarAccessibilityHelper;
|
|
begin
|
|
Result := Self;
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.HandleNavigationKey(var AKey: Word): Boolean;
|
|
var
|
|
ATempKey: Word;
|
|
begin
|
|
Result := inherited HandleNavigationKey(AKey);
|
|
if Result then
|
|
Exit;
|
|
|
|
ATempKey := AKey;
|
|
if BarControl.IsRealVertical then
|
|
begin
|
|
case ATempKey of
|
|
VK_LEFT:
|
|
ATempKey := VK_UP;
|
|
VK_RIGHT:
|
|
ATempKey := VK_DOWN;
|
|
VK_UP:
|
|
ATempKey := VK_LEFT;
|
|
VK_DOWN:
|
|
ATempKey := VK_RIGHT;
|
|
end;
|
|
end;
|
|
Result := TdxBarControlAccess(BarControl).SelectedItemWantsKey(ATempKey);
|
|
end;
|
|
|
|
procedure TdxBarControlAccessibilityHelper.Select(ASetFocus: Boolean);
|
|
begin
|
|
BarControl.BarGetFocus(nil);
|
|
end;
|
|
|
|
procedure TdxBarControlAccessibilityHelper.Unselect(
|
|
ANextSelectedObject: IdxBarAccessibilityHelper);
|
|
begin
|
|
inherited Unselect(ANextSelectedObject);
|
|
BarControl.HideAll;
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetChild(
|
|
AIndex: Integer): TcxAccessibilityHelper;
|
|
begin
|
|
if AIndex = BarControl.ViewInfo.ItemControlCount then
|
|
Result := BarControl.Bar.CaptionButtons.IAccessibilityHelper.GetHelper
|
|
else
|
|
Result := inherited GetChild(AIndex);
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetChildCount: Integer;
|
|
begin
|
|
Result := inherited GetChildCount + 1;
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetChildIndex(
|
|
AChild: TcxAccessibilityHelper): Integer;
|
|
begin
|
|
if AChild = BarControl.Bar.CaptionButtons.IAccessibilityHelper.GetHelper then
|
|
Result := inherited GetChildCount
|
|
else
|
|
Result := inherited GetChildIndex(AChild);
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetParent: TcxAccessibilityHelper;
|
|
begin
|
|
if BarControl.DockControl <> nil then
|
|
Result := BarControl.DockControl.IAccessibilityHelper.GetHelper
|
|
else
|
|
Result := inherited GetParent;
|
|
end;
|
|
|
|
//function TdxBarControlAccessibilityHelper.ChildIsSimpleElement(
|
|
// AIndex: Integer): Boolean;
|
|
//begin
|
|
// Result := False;
|
|
//end;
|
|
//
|
|
//function TdxBarControlAccessibilityHelper.GetChildIndex(
|
|
// AChild: TcxAccessibilityHelper): Integer;
|
|
//begin
|
|
// Result := BarControl.ViewInfo.GetItemControlIndex(
|
|
// TdxBarItemControlAccessibilityHelper(AChild).ItemControl);
|
|
//end;
|
|
//
|
|
//function TdxBarControlAccessibilityHelper.GetHitTest(AScreenX, AScreenY: Integer;
|
|
// out AChildIndex: Integer): TcxAccessibleObjectHitTest;
|
|
//var
|
|
// AItemControl: TdxBarItemControl;
|
|
//begin
|
|
// AItemControl := BarControl.ItemAtPos(BarControl.ScreenToClient(Point(AScreenX, AScreenY)));
|
|
// if AItemControl <> nil then
|
|
// begin
|
|
// AChildIndex := BarControl.ViewInfo.GetItemControlIndex(AItemControl);
|
|
// Result := aohtChild;
|
|
// end
|
|
// else
|
|
// Result := aohtSelf;
|
|
//end;
|
|
//
|
|
//function TdxBarControlAccessibilityHelper.GetName(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): string;
|
|
//begin
|
|
// Result := BarControl.Bar.Caption;
|
|
//end;
|
|
//
|
|
//function TdxBarControlAccessibilityHelper.GetSupportedProperties(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): TcxAccessibleObjectProperties;
|
|
//begin
|
|
// Result := [aopLocation];
|
|
//end;
|
|
//
|
|
//function TdxBarControlAccessibilityHelper.NavigateToChild(
|
|
// ACurrentChildIndex: Integer; ADirection: TcxAccessibilityNavigationDirection): Integer;
|
|
//begin
|
|
// Result := ACurrentChildIndex;
|
|
// case ADirection of
|
|
// andLeft:
|
|
// if ACurrentChildIndex > 0 then
|
|
// Dec(Result);
|
|
// andRight:
|
|
// if ACurrentChildIndex + 1 < GetChildCount then
|
|
// Inc(Result);
|
|
// end;
|
|
//end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetBarControlInstance: TCustomdxBarControl;
|
|
begin
|
|
Result := Bar.Control;
|
|
end;
|
|
|
|
procedure TdxBarControlAccessibilityHelper.GetCaptionButtonKeyTipPosition(
|
|
ACaptionButton: TdxBarCaptionButton; out ABasePointY: Integer;
|
|
out AVertAlign: TcxAlignmentVert);
|
|
begin
|
|
raise EdxException.Create('');
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetNextAccessibleObject(
|
|
AItemControl: TdxBarItemControl;
|
|
ADirection: TcxAccessibilityNavigationDirection): IdxBarAccessibilityHelper;
|
|
var
|
|
AItemLink: TdxBarItemLink;
|
|
ARelativeDirection: TcxAccessibilityNavigationDirection;
|
|
begin
|
|
ARelativeDirection := ADirection;
|
|
if BarControl.IsRealVertical then
|
|
case ADirection of
|
|
andLeft:
|
|
ARelativeDirection := andUp;
|
|
andRight:
|
|
ARelativeDirection := andDown;
|
|
andUp:
|
|
ARelativeDirection := andLeft;
|
|
andDown:
|
|
ARelativeDirection := andRight;
|
|
end;
|
|
|
|
if ARelativeDirection in [andUp, andDown] then
|
|
Result := inherited GetNextAccessibleObject(AItemControl, ADirection)
|
|
else
|
|
begin
|
|
if ARelativeDirection = andLeft then
|
|
AItemLink := TdxBarItemLinksAccess(BarControl.ItemLinks).Prev(AItemControl.ItemLink)
|
|
else
|
|
AItemLink := TdxBarItemLinksAccess(BarControl.ItemLinks).Next(AItemControl.ItemLink);
|
|
if (AItemLink <> nil) and (AItemLink.Control <> nil) then
|
|
Result := AItemLink.Control.IAccessibilityHelper
|
|
else
|
|
Result := nil;
|
|
end;
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetBar: TdxBar;
|
|
begin
|
|
Result := BarControl.Bar;//TdxBar(FOwnerObject);
|
|
end;
|
|
|
|
function TdxBarControlAccessibilityHelper.GetBarControl: TdxBarControl;
|
|
begin
|
|
Result := TdxBarControl(FOwnerObject);
|
|
end;
|
|
|
|
{ TdxBarControlMarkAccessibilityHelper }
|
|
|
|
procedure TdxBarControlMarkAccessibilityHelper.CloseUpHandler(
|
|
AClosedByEscape: Boolean);
|
|
begin
|
|
if AClosedByEscape and BarNavigationController.NavigationMode then
|
|
BarControl.MarkIAccessibilityHelper.Select(False);
|
|
end;
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TdxBarControlMarkAccessibilityHelper.GetBarManager: TdxBarManager;
|
|
begin
|
|
Result := BarControl.BarManager;
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.HandleNavigationKey(var AKey: Word): Boolean;
|
|
begin
|
|
Result := inherited HandleNavigationKey(AKey);
|
|
if not Result then
|
|
begin
|
|
Result := AKey in [VK_RETURN, VK_SPACE];
|
|
if Result then
|
|
DropDown;
|
|
end;
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.IsNavigationKey(
|
|
AKey: Word): Boolean;
|
|
begin
|
|
Result := inherited IsNavigationKey(AKey) or
|
|
(AKey in [VK_ESCAPE, VK_RETURN, VK_SPACE]);
|
|
end;
|
|
|
|
procedure TdxBarControlMarkAccessibilityHelper.Select(ASetFocus: Boolean);
|
|
begin
|
|
inherited Select(ASetFocus);
|
|
TdxBarControlAccess(BarControl).InvalidateMark;
|
|
end;
|
|
|
|
procedure TdxBarControlMarkAccessibilityHelper.Unselect(
|
|
ANextSelectedObject: IdxBarAccessibilityHelper);
|
|
begin
|
|
inherited Unselect(ANextSelectedObject);
|
|
TdxBarControlAccess(BarControl).InvalidateMark;
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.GetOwnerObjectWindow: HWND;
|
|
begin
|
|
Result := Parent.OwnerObjectWindow;
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.GetParent: TcxAccessibilityHelper;
|
|
begin
|
|
Result := BarControl.IAccessibilityHelper.GetHelper;
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.GetScreenBounds(
|
|
AChildID: TcxAccessibleSimpleChildElementID): TRect;
|
|
begin
|
|
if Visible then
|
|
begin
|
|
Result := TCustomdxBarControlAccess(BarControl).MarkRect;
|
|
Result.TopLeft := BarControl.ClientToScreen(Result.TopLeft);
|
|
Result.BottomRight := BarControl.ClientToScreen(Result.BottomRight);
|
|
end
|
|
else
|
|
Result := cxEmptyRect;
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.GetSelectable: Boolean;
|
|
begin
|
|
Result := Visible;
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.GetState(
|
|
AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
begin
|
|
Result := Parent.States[cxAccessibleObjectSelfID];
|
|
if not TCustomdxBarControlAccess(BarControl).MarkExists or
|
|
IsRectEmpty(TCustomdxBarControlAccess(BarControl).MarkRect) then
|
|
Result := Result or STATE_SYSTEM_INVISIBLE;
|
|
end;
|
|
|
|
procedure TdxBarControlMarkAccessibilityHelper.DropDown;
|
|
begin
|
|
Unselect(nil);
|
|
TdxBarControlAccess(BarControl).MarkState := msPressed;
|
|
end;
|
|
|
|
procedure TdxBarControlMarkAccessibilityHelper.UpdateMarkState;
|
|
begin
|
|
TdxBarControlAccess(BarControl).CheckMarkState(
|
|
BarControl.ScreenToClient(GetMouseCursorPos));
|
|
end;
|
|
|
|
function TdxBarControlMarkAccessibilityHelper.GetBarControl: TdxBarControl;
|
|
begin
|
|
Result := TdxBarControl(FOwnerObject);
|
|
end;
|
|
|
|
{ TdxBarCaptionButtonsAccessibilityHelper }
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetBarManager: TdxBarManager;
|
|
begin
|
|
Result := CaptionButtons.Bar.BarManager;
|
|
end;
|
|
|
|
procedure TdxBarCaptionButtonsAccessibilityHelper.Unselect(
|
|
ANextSelectedObject: IdxBarAccessibilityHelper);
|
|
begin
|
|
inherited Unselect(ANextSelectedObject);
|
|
UpdateCaptionButtons;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetChild(
|
|
AIndex: Integer): TcxAccessibilityHelper;
|
|
begin
|
|
Result := CaptionButtons[CaptionButtons.Count - 1 - AIndex].IAccessibilityHelper.GetHelper;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetChildCount: Integer;
|
|
begin
|
|
Result := CaptionButtons.Count;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetChildIndex(
|
|
AChild: TcxAccessibilityHelper): Integer;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := -1;
|
|
for I := 0 to ChildCount - 1 do
|
|
if CaptionButtons[I].IAccessibilityHelper.GetHelper = AChild then
|
|
begin
|
|
Result := ChildCount - 1 - I;
|
|
end;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetOwnerObjectWindow: HWND;
|
|
begin
|
|
Result := Parent.OwnerObjectWindow;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetParent: TcxAccessibilityHelper;
|
|
begin
|
|
Result := CaptionButtons.Bar.Control.IAccessibilityHelper.GetHelper;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetScreenBounds(
|
|
AChildID: TcxAccessibleSimpleChildElementID): TRect;
|
|
var
|
|
R: TRect;
|
|
begin
|
|
if Visible then
|
|
begin
|
|
Result := CaptionButtons.Rect;
|
|
R := cxGetWindowRect(OwnerObjectWindow);
|
|
OffsetRect(Result, R.Left, R.Top);
|
|
end
|
|
else
|
|
Result := cxEmptyRect;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetState(
|
|
AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
begin
|
|
Result := Parent.States[cxAccessibleObjectSelfID];
|
|
if (Result and cxSTATE_SYSTEM_INVISIBLE = 0) and (IsRectEmpty(CaptionButtons.Rect) or
|
|
TCustomdxBarControlAccessibilityHelper(Parent).IsCollapsed) then
|
|
Result := Result or cxSTATE_SYSTEM_INVISIBLE;
|
|
end;
|
|
|
|
procedure TdxBarCaptionButtonsAccessibilityHelper.UpdateCaptionButtons;
|
|
var
|
|
P: TPoint;
|
|
R: TRect;
|
|
begin
|
|
P := GetMouseCursorPos;
|
|
R := cxGetWindowRect(OwnerObjectWindow);
|
|
CaptionButtons.UpdateButtonStates(cxPointOffset(P, -R.Left, -R.Top));
|
|
end;
|
|
|
|
function TdxBarCaptionButtonsAccessibilityHelper.GetCaptionButtons: TdxBarCaptionButtons;
|
|
begin
|
|
Result := TdxBarCaptionButtons(FOwnerObject);
|
|
end;
|
|
|
|
{ TdxBarCaptionButtonAccessibilityHelper }
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetBarManager: TdxBarManager;
|
|
begin
|
|
Result := Parent.BarManager;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.HandleNavigationKey(
|
|
var AKey: Word): Boolean;
|
|
begin
|
|
Result := inherited HandleNavigationKey(AKey);
|
|
if Result then
|
|
Exit;
|
|
|
|
Result := True;
|
|
case AKey of
|
|
VK_ESCAPE:
|
|
begin
|
|
Unselect(nil);
|
|
TdxBarControlAccess(CaptionButton.Collection.Bar.Control).HideAllByEscape;
|
|
end;
|
|
VK_RETURN, VK_SPACE:
|
|
begin
|
|
Unselect(nil);
|
|
DoButtonClick;
|
|
end
|
|
else
|
|
Result := False;
|
|
end;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.IsNavigationKey(
|
|
AKey: Word): Boolean;
|
|
begin
|
|
Result := inherited IsNavigationKey(AKey) or (AKey in [VK_ESCAPE, VK_RETURN, VK_SPACE]);
|
|
end;
|
|
|
|
procedure TdxBarCaptionButtonAccessibilityHelper.Select(ASetFocus: Boolean);
|
|
begin
|
|
inherited Select(ASetFocus);
|
|
TdxBarCaptionButtonsAccessibilityHelper(Parent).UpdateCaptionButtons;
|
|
end;
|
|
|
|
procedure TdxBarCaptionButtonAccessibilityHelper.Unselect(
|
|
ANextSelectedObject: IdxBarAccessibilityHelper);
|
|
begin
|
|
inherited Unselect(ANextSelectedObject);
|
|
TdxBarCaptionButtonsAccessibilityHelper(Parent).UpdateCaptionButtons;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetOwnerObjectWindow: HWND;
|
|
begin
|
|
Result := Parent.OwnerObjectWindow;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetParent: TcxAccessibilityHelper;
|
|
begin
|
|
Result := TdxBarCaptionButtons(CaptionButton.Collection).IAccessibilityHelper.GetHelper;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetScreenBounds(
|
|
AChildID: TcxAccessibleSimpleChildElementID): TRect;
|
|
var
|
|
R: TRect;
|
|
begin
|
|
if Visible then
|
|
begin
|
|
Result := CaptionButton.Rect;
|
|
R := cxGetWindowRect(OwnerObjectWindow);
|
|
OffsetRect(Result, R.Left, R.Top);
|
|
end
|
|
else
|
|
Result := cxEmptyRect;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetSelectable: Boolean;
|
|
begin
|
|
Result := Visible;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetState(
|
|
AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
begin
|
|
Result := Parent.States[cxAccessibleObjectSelfID];
|
|
if (Result and cxSTATE_SYSTEM_INVISIBLE = 0) and IsRectEmpty(CaptionButton.Rect) then
|
|
Result := Result or cxSTATE_SYSTEM_INVISIBLE;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetAssignedKeyTip: string;
|
|
begin
|
|
Result := CaptionButton.KeyTip;
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetDefaultKeyTip: string;
|
|
begin
|
|
Result := 'Y';
|
|
end;
|
|
|
|
procedure TdxBarCaptionButtonAccessibilityHelper.GetKeyTipInfo(out AKeyTipInfo: TdxBarKeyTipInfo);
|
|
var
|
|
ABasePoint: TPoint;
|
|
begin
|
|
inherited;
|
|
if Visible then
|
|
begin
|
|
with GetScreenBounds(cxAccessibleObjectSelfID) do
|
|
ABasePoint.X := (Left + Right) div 2;
|
|
TdxBarControlAccessibilityHelper(Parent.Parent).GetCaptionButtonKeyTipPosition(
|
|
CaptionButton, ABasePoint.Y, AKeyTipInfo.VertAlign);
|
|
AKeyTipInfo.BasePoint := ABasePoint;
|
|
AKeyTipInfo.HorzAlign := taCenter;
|
|
end;
|
|
AKeyTipInfo.Enabled := CaptionButton.Enabled;
|
|
end;
|
|
|
|
procedure TdxBarCaptionButtonAccessibilityHelper.KeyTipHandler(Sender: TObject);
|
|
begin
|
|
BarNavigationController.StopKeyboardHandling;
|
|
DoButtonClick;
|
|
end;
|
|
|
|
procedure TdxBarCaptionButtonAccessibilityHelper.DoButtonClick;
|
|
begin
|
|
TdxBarControlAccess(CaptionButton.Collection.Bar.Control).CaptionButtonClick(CaptionButton.Index);
|
|
end;
|
|
|
|
function TdxBarCaptionButtonAccessibilityHelper.GetCaptionButton: TdxBarCaptionButton;
|
|
begin
|
|
Result := TdxBarCaptionButton(FOwnerObject);
|
|
end;
|
|
|
|
{ TdxBarSubMenuControlAccessibilityHelper }
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TdxBarSubMenuControlAccessibilityHelper.GetBarManager: TdxBarManager;
|
|
begin
|
|
Result := ItemLinks.BarManager;
|
|
end;
|
|
|
|
function TdxBarSubMenuControlAccessibilityHelper.HandleNavigationKey(
|
|
var AKey: Word): Boolean;
|
|
var
|
|
ABarControl: TdxBarSubMenuControlAccess;
|
|
AFocusItemControl: Boolean;
|
|
AItemLink: TdxBarItemLink;
|
|
AShift: TShiftState;
|
|
ATempKey: Word;
|
|
begin
|
|
Result := inherited HandleNavigationKey(AKey);
|
|
if Result then
|
|
Exit;
|
|
|
|
Result := True;
|
|
AShift := InternalGetShiftState;
|
|
ABarControl := TdxBarSubMenuControlAccess(BarControl);
|
|
ABarControl.TerminateAnimation;
|
|
|
|
if ABarControl.MarkExists then
|
|
begin
|
|
if (AKey = VK_DOWN) and (AShift = [ssCtrl]) then
|
|
begin
|
|
ABarControl.MarkState := msPressed;
|
|
Exit;
|
|
end
|
|
else
|
|
if ((AKey = VK_DOWN) or (AKey = VK_TAB) and (AShift = [])) and (ABarControl.SelectedControl <> nil) then
|
|
begin
|
|
AItemLink := ABarControl.SelectedControl.ItemLink;
|
|
if AItemLink.VisibleIndex = AItemLink.Owner.VisibleItemCount - 1 then
|
|
begin
|
|
ABarControl.MarkState := msPressed;
|
|
ATempKey := VK_DOWN;
|
|
HandleNavigationKey(ATempKey);
|
|
Exit;
|
|
end;
|
|
end;
|
|
end;
|
|
AFocusItemControl := AKey = VK_TAB;
|
|
if AFocusItemControl then
|
|
if AShift = [] then
|
|
AKey := VK_DOWN
|
|
else
|
|
AKey := VK_UP;
|
|
|
|
if ABarControl.SelectedItemWantsKey(AKey) then
|
|
Exit;
|
|
case AKey of
|
|
VK_LEFT, VK_RIGHT:
|
|
HandleHorzNavigationKey(AKey = VK_LEFT);
|
|
VK_UP, VK_DOWN:
|
|
HandleVertNavigationKey(AKey = VK_UP, AFocusItemControl);
|
|
end;
|
|
end;
|
|
|
|
function TdxBarSubMenuControlAccessibilityHelper.GetBarControlInstance: TCustomdxBarControl;
|
|
begin
|
|
Result := ItemLinks.BarControl;
|
|
end;
|
|
|
|
procedure TdxBarSubMenuControlAccessibilityHelper.GetItemControlKeyTipPosition(
|
|
AItemControl: TdxBarItemControl; out ABasePoint: TPoint;
|
|
out AHorzAlign: TAlignment; out AVertAlign: TcxAlignmentVert);
|
|
begin
|
|
with TdxBarSubMenuControlAccess(BarControl) do
|
|
ABasePoint.X := ClientOrigin.X + BarRect.Right + BandSize div 2;
|
|
with GetItemControlScreenBounds(AItemControl) do
|
|
ABasePoint.Y := (Top + Bottom) div 2;
|
|
AHorzAlign := taRightJustify;
|
|
AVertAlign := vaBottom;
|
|
end;
|
|
|
|
function TdxBarSubMenuControlAccessibilityHelper.GetNextItemLink(
|
|
AItemLink: TdxBarItemLink; AGoForward: Boolean): TdxBarItemLink;
|
|
begin
|
|
if AItemLink = nil then
|
|
begin
|
|
if TdxBarItemLinksAccess(ItemLinks).RealVisibleItemCount > 0 then
|
|
Result := TdxBarItemLinksAccess(ItemLinks).First
|
|
else
|
|
Result := nil;
|
|
end
|
|
else
|
|
if AGoForward then
|
|
Result := TdxBarItemLinksAccess(ItemLinks).Next(AItemLink)
|
|
else
|
|
Result := TdxBarItemLinksAccess(ItemLinks).Prev(AItemLink);
|
|
end;
|
|
|
|
function TdxBarSubMenuControlAccessibilityHelper.GetParentForKeyTip: TdxBarAccessibilityHelper;
|
|
begin
|
|
if BarControl.ParentBar <> nil then
|
|
Result := TCustomdxBarControlAccess(BarControl.ParentBar).SelectedControl.IAccessibilityHelper.GetBarHelper
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TdxBarSubMenuControlAccessibilityHelper.HandleHorzNavigationKey(
|
|
ALeftKey: Boolean);
|
|
const
|
|
ANavigationDirectionMap: array[Boolean] of TcxAccessibilityNavigationDirection =
|
|
(andRight, andLeft);
|
|
var
|
|
ABarControl: TdxBarSubMenuControlAccess;
|
|
ANextObject, ASelectedObject: IdxBarAccessibilityHelper;
|
|
AParentBarControl: TCustomdxBarControlAccess;
|
|
begin
|
|
ABarControl := TdxBarSubMenuControlAccess(BarControl);
|
|
if ABarControl.SelectedLink <> nil then
|
|
begin
|
|
ASelectedObject := ABarControl.SelectedLink.Control.IAccessibilityHelper;
|
|
ANextObject := ASelectedObject.GetNextAccessibleObject(
|
|
ANavigationDirectionMap[ALeftKey]);
|
|
if (ANextObject <> nil) and (ANextObject.GetBarHelper <> ASelectedObject.GetBarHelper) then
|
|
begin
|
|
ASelectedObject.Unselect(ANextObject);
|
|
ANextObject.Select(False);
|
|
Exit;
|
|
end;
|
|
end;
|
|
if ALeftKey then
|
|
begin
|
|
AParentBarControl := TCustomdxBarControlAccess(ABarControl.ParentBar);
|
|
if (AParentBarControl <> nil) and (AParentBarControl.SelectedControl <> nil) then
|
|
if ABarControl.ParentBar is TdxBarSubMenuControl then
|
|
TdxBarItemControlAccess(AParentBarControl.SelectedControl).ControlInactivate(True)
|
|
else
|
|
begin
|
|
AParentBarControl := TCustomdxBarControlAccess(GetParentBarForBar(ABarControl));
|
|
if AParentBarControl <> nil then
|
|
if AParentBarControl.IsRealVertical then
|
|
SendMessage(ABarControl.Handle, WM_KEYDOWN, VK_ESCAPE, 0)
|
|
else
|
|
if not (bboMouseCantUnselectNavigationItem in AParentBarControl.BehaviorOptions) then
|
|
BarNavigationController.HandleKey(VK_LEFT, [], AParentBarControl.IAccessibilityHelper, AParentBarControl.SelectedControl.IAccessibilityHelper);
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
AParentBarControl := TCustomdxBarControlAccess(GetParentBarForBar(ABarControl));
|
|
if (AParentBarControl <> nil) and not (bboMouseCantUnselectNavigationItem in AParentBarControl.BehaviorOptions) then
|
|
BarNavigationController.HandleKey(VK_RIGHT, [], AParentBarControl.IAccessibilityHelper, AParentBarControl.SelectedControl.IAccessibilityHelper);
|
|
end;
|
|
end;
|
|
|
|
procedure TdxBarSubMenuControlAccessibilityHelper.HandleVertNavigationKey(
|
|
AUpKey, AFocusItemControl: Boolean);
|
|
|
|
function GetHelper(ALink: TdxBarItemLink): IdxBarAccessibilityHelper;
|
|
begin
|
|
if (ALink <> nil) and (ALink.Control <> nil) then
|
|
Result := ALink.Control.IAccessibilityHelper
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
var
|
|
ANextItemLink, APrevSelectedLink: TdxBarItemLink;
|
|
ANextSelectedObject, APrevSelectedObject: IdxBarAccessibilityHelper;
|
|
begin
|
|
APrevSelectedLink := TdxBarSubMenuControlAccess(BarControl).SelectedLink;
|
|
APrevSelectedObject := GetHelper(APrevSelectedLink);
|
|
ANextItemLink := GetNextItemLink(APrevSelectedLink, not AUpKey);
|
|
ANextSelectedObject := GetHelper(ANextItemLink);
|
|
if ANextSelectedObject <> nil then
|
|
BarNavigationController.ChangeSelectedObject(AFocusItemControl, ANextSelectedObject, APrevSelectedObject);
|
|
end;
|
|
|
|
function TdxBarSubMenuControlAccessibilityHelper.IsKeyTipContainer: Boolean;
|
|
begin
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TdxBarSubMenuControlAccessibilityHelper.KeyTipsEscapeHandler;
|
|
var
|
|
ANewKeyTipContainer: IdxBarAccessibilityHelper;
|
|
begin
|
|
ANewKeyTipContainer := GetKeyTipContainerParent(ParentForKeyTip);
|
|
if ANewKeyTipContainer = nil then
|
|
ANewKeyTipContainer := ParentForKeyTip;
|
|
SendMessage(BarControl.Handle, WM_KEYDOWN, VK_ESCAPE, 0);
|
|
BarNavigationController.SetKeyTipsShowingState(ANewKeyTipContainer, '');
|
|
end;
|
|
|
|
procedure TdxBarSubMenuControlAccessibilityHelper.UnselectSelectedItemControl;
|
|
begin
|
|
TdxBarSubMenuControlAccess(BarControl).SetKeySelectedItem(nil);
|
|
end;
|
|
|
|
function TdxBarSubMenuControlAccessibilityHelper.GetBarControl: TdxBarSubMenuControl;
|
|
begin
|
|
Result := TdxBarSubMenuControl(FOwnerObject);
|
|
end;
|
|
|
|
function TdxBarSubMenuControlAccessibilityHelper.GetItemLinks: TdxBarItemLinks;
|
|
begin
|
|
Result := BarControl.ItemLinks;
|
|
end;
|
|
|
|
{ TdxBarItemControlAccessibilityHelper }
|
|
|
|
// IdxBarAccessibilityHelper
|
|
function TdxBarItemControlAccessibilityHelper.GetBarManager: TdxBarManager;
|
|
begin
|
|
Result := ItemControl.BarManager;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetNextAccessibleObject(
|
|
ADirection: TcxAccessibilityNavigationDirection): IdxBarAccessibilityHelper;
|
|
begin
|
|
Result := TCustomdxBarControlAccessibilityHelper(Parent).GetNextAccessibleObject(ItemControl, ADirection);
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.HandleNavigationKey(
|
|
var AKey: Word): Boolean;
|
|
begin
|
|
Result := inherited HandleNavigationKey(AKey) or
|
|
TCustomdxBarControlAccessibilityHelper(Parent).HandleNavigationKey(AKey);
|
|
end;
|
|
|
|
procedure TdxBarItemControlAccessibilityHelper.Select(ASetFocus: Boolean);
|
|
begin
|
|
if ItemControl.Parent.IsActive then
|
|
TCustomdxBarControlAccess(ItemControl.Parent).SetKeySelectedItem(ItemControl)
|
|
else
|
|
ItemControl.Parent.BarGetFocus(ItemControl);
|
|
if ItemControl.HasWindow and (ASetFocus or not (bboAllowSelectWindowItemsWithoutFocusing in ItemControl.Parent.BehaviorOptions)) then
|
|
TdxBarItemControlAccess(ItemControl).Click(False);
|
|
end;
|
|
|
|
procedure TdxBarItemControlAccessibilityHelper.Unselect(
|
|
ANextSelectedObject: IdxBarAccessibilityHelper);
|
|
begin
|
|
inherited Unselect(ANextSelectedObject);
|
|
if not ((ANextSelectedObject <> nil) and
|
|
(ANextSelectedObject.GetHelper is TdxBarItemControlAccessibilityHelper) and
|
|
(ANextSelectedObject.GetHelper.Parent = Parent)) then
|
|
TCustomdxBarControlAccessibilityHelper(Parent).UnselectSelectedItemControl;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetOwnerObjectWindow: HWND;
|
|
begin
|
|
if ItemControl.Parent.HandleAllocated then
|
|
Result := ItemControl.Parent.Handle
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetParent: TcxAccessibilityHelper;
|
|
begin
|
|
if ItemControl.Parent.IAccessibilityHelper <> nil then
|
|
Result := ItemControl.Parent.IAccessibilityHelper.GetHelper
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetScreenBounds(
|
|
AChildID: TcxAccessibleSimpleChildElementID): TRect;
|
|
begin
|
|
if Visible then
|
|
begin
|
|
Result := ItemControl.ViewInfo.Bounds;
|
|
with ItemControl.Parent do
|
|
begin
|
|
Result.TopLeft := ClientToScreen(Result.TopLeft);
|
|
Result.BottomRight := ClientToScreen(Result.BottomRight);
|
|
end;
|
|
end
|
|
else
|
|
Result := cxEmptyRect;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetSelectable: Boolean;
|
|
begin
|
|
Result := Visible and CanSelect;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetState(
|
|
AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
var
|
|
AHandle: HWND;
|
|
begin
|
|
Result := cxSTATE_SYSTEM_NORMAL;
|
|
AHandle := GetOwnerObjectWindow;
|
|
if (AHandle = 0) or not IsWindowVisible(AHandle) or TCustomdxBarControlAccessibilityHelper(Parent).IsCollapsed then
|
|
Result := Result or cxSTATE_SYSTEM_INVISIBLE;
|
|
end;
|
|
|
|
//function TdxBarItemControlAccessibilityHelper.GetDescription(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): string;
|
|
//begin
|
|
// Result := ItemControl.Item.Description;
|
|
//end;
|
|
//
|
|
//procedure TdxBarItemControlAccessibilityHelper.GetKeyboardAccessParameters(
|
|
// AChildID: TcxAccessibleSimpleChildElementID; out AShortCut: TShortCut;
|
|
// out ACaptionWithAccelChars: string);
|
|
//begin
|
|
// AShortCut := ItemControl.Item.ShortCut;
|
|
// ACaptionWithAccelChars := ItemControl.ItemLink.Caption;
|
|
//end;
|
|
//
|
|
//function TdxBarItemControlAccessibilityHelper.GetName(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): string;
|
|
//begin
|
|
// Result := ItemControl.ItemLink.Caption;
|
|
//end;
|
|
//
|
|
//function TdxBarItemControlAccessibilityHelper.GetSupportedProperties(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): TcxAccessibleObjectProperties;
|
|
//begin
|
|
// Result := [aopLocation, aopShortcut];
|
|
// if GetDescription(AChildID) <> '' then
|
|
// Include(Result, aopDescription);
|
|
//end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.CanSelect: Boolean;
|
|
begin
|
|
Result := TdxBarItemControlAccess(ItemControl).CanSelect;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetAssignedKeyTip: string;
|
|
begin
|
|
Result := ItemControl.Item.KeyTip;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetDefaultKeyTip: string;
|
|
|
|
function IsShortCutAcceptible(AShortCut: TShortCut): Boolean;
|
|
begin
|
|
Result := (AShortCut >= 16449{Ctrl+A}) and (AShortCut <= 16474{Ctrl+Z})
|
|
end;
|
|
|
|
function GetKeyTipByShortCut(AShortCut: TShortCut): string;
|
|
var
|
|
AShortCutText: string;
|
|
begin
|
|
AShortCutText := ShortCutToText(AShortCut);
|
|
if AShortCutText <> '' then
|
|
Result := AShortCutText[Length(AShortCutText)]
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
var
|
|
AnAccelPos: Integer;
|
|
ACaption: string;
|
|
AShortCut: TShortCut;
|
|
begin
|
|
AShortCut := TdxBarItemControlAccess(ItemControl).ShortCut;
|
|
if IsShortCutAcceptible(AShortCut) then
|
|
Result := GetKeyTipByShortCut(AShortCut)
|
|
else
|
|
begin
|
|
ACaption := ItemControl.Item.Caption;
|
|
AnAccelPos := GetAccelPos(ACaption);
|
|
if AnAccelPos <> 0 then
|
|
Result := AnsiUpperCase(ACaption[AnAccelPos])
|
|
else
|
|
Result := 'Y';
|
|
end;
|
|
end;
|
|
|
|
procedure TdxBarItemControlAccessibilityHelper.GetKeyTipInfo(out AKeyTipInfo: TdxBarKeyTipInfo);
|
|
begin
|
|
inherited GetKeyTipInfo(AKeyTipInfo);
|
|
if Visible then
|
|
begin
|
|
TCustomdxBarControlAccessibilityHelper(Parent).GetItemControlKeyTipPosition(
|
|
ItemControl, AKeyTipInfo.BasePoint, AKeyTipInfo.HorzAlign, AKeyTipInfo.VertAlign);
|
|
end
|
|
else
|
|
AKeyTipInfo.OnExecute := InvisibleKeyTipHandler;
|
|
AKeyTipInfo.Enabled := ItemControl.Enabled;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.NeedsVisibilityForKeyTipHandling: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TdxBarItemControlAccessibilityHelper.GetItemControl: TdxBarItemControl;
|
|
begin
|
|
Result := TdxBarItemControl(FOwnerObject);
|
|
end;
|
|
|
|
procedure TdxBarItemControlAccessibilityHelper.InvisibleKeyTipHandler(
|
|
Sender: TObject);
|
|
var
|
|
AExpandedBarControlObject: TCustomdxBarControlAccessibilityHelper;
|
|
AIndex: Integer;
|
|
begin
|
|
if NeedsVisibilityForKeyTipHandling then
|
|
begin
|
|
AExpandedBarControlObject := TCustomdxBarControlAccessibilityHelper(Parent).Expand;
|
|
AIndex := ItemControl.Parent.ViewInfo.GetItemControlIndex(ItemControl);
|
|
TdxBarItemControlAccessibilityHelper(AExpandedBarControlObject.BarControl.ViewInfo.ItemControlViewInfos[AIndex].Control.IAccessibilityHelper.GetHelper).KeyTipHandler(Sender);
|
|
end
|
|
else
|
|
KeyTipHandler(Sender);
|
|
end;
|
|
|
|
{ TdxBarButtonLikeControlAccessibilityHelper }
|
|
|
|
procedure TdxBarButtonLikeControlAccessibilityHelper.DoClick;
|
|
var
|
|
AItem: TdxBarItem;
|
|
APrevUnclickAfterDoing: Boolean;
|
|
begin
|
|
BarNavigationController.StopKeyboardHandling;
|
|
AItem := ItemControl.Item;
|
|
APrevUnclickAfterDoing := AItem.UnclickAfterDoing;
|
|
try
|
|
AItem.UnclickAfterDoing := False;
|
|
TdxBarItemControlAccess(ItemControl).ControlUnclick(False);
|
|
finally
|
|
AItem.UnclickAfterDoing := APrevUnclickAfterDoing;
|
|
end;
|
|
end;
|
|
|
|
procedure TdxBarButtonLikeControlAccessibilityHelper.DoDropDown;
|
|
begin
|
|
BarNavigationController.ChangeSelectedObject(True, ItemControl.IAccessibilityHelper);
|
|
if ShowDropDownWindow then
|
|
begin
|
|
BarNavigationController.SetKeyTipsShowingState(nil, '');
|
|
BarNavigationController.SetKeyTipsShowingState(ActiveBarControl.IAccessibilityHelper, '');
|
|
end;
|
|
end;
|
|
|
|
function TdxBarButtonLikeControlAccessibilityHelper.IsDropDownControl: Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
procedure TdxBarButtonLikeControlAccessibilityHelper.KeyTipHandler(Sender: TObject);
|
|
begin
|
|
if IsDropDownControl then
|
|
DoDropDown
|
|
else
|
|
DoClick;
|
|
end;
|
|
|
|
function TdxBarButtonLikeControlAccessibilityHelper.NeedsVisibilityForKeyTipHandling: Boolean;
|
|
begin
|
|
Result := IsDropDownControl;
|
|
end;
|
|
|
|
function TdxBarButtonLikeControlAccessibilityHelper.GetItemControl: TdxBarButtonLikeControl;
|
|
begin
|
|
Result := TdxBarButtonLikeControl(FOwnerObject);
|
|
end;
|
|
|
|
{ TdxBarButtonControlAccessibilityHelper }
|
|
|
|
//procedure TdxBarButtonControlAccessibilityHelper.DoDefaultAction(
|
|
// AChildID: TcxAccessibleSimpleChildElementID);
|
|
//begin
|
|
// ButtonControl.Item.Click;
|
|
//end;
|
|
//
|
|
//function TdxBarButtonControlAccessibilityHelper.GetDefaultActionDescription(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): string;
|
|
//begin
|
|
// Result := cxGetResourceString(@dxSBAR_BUTTONDEFAULTACTIONDESCRIPTION);
|
|
//end;
|
|
//
|
|
//function TdxBarButtonControlAccessibilityHelper.GetRole(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
//begin
|
|
// Result := cxROLE_SYSTEM_PUSHBUTTON;
|
|
//end;
|
|
//
|
|
//function TdxBarButtonControlAccessibilityHelper.GetState(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): Integer;
|
|
//begin
|
|
// Result := cxSTATE_SYSTEM_NORMAL;
|
|
//end;
|
|
//
|
|
//function TdxBarButtonControlAccessibilityHelper.GetSupportedProperties(
|
|
// AChildID: TcxAccessibleSimpleChildElementID): TcxAccessibleObjectProperties;
|
|
//begin
|
|
// Result := inherited GetSupportedProperties(AChildID);
|
|
// if ButtonControl.Item.Enabled then
|
|
// Include(Result, aopDefaultAction);
|
|
//end;
|
|
|
|
function TdxBarButtonControlAccessibilityHelper.IsDropDownControl: Boolean;
|
|
begin
|
|
Result := ItemControl.ButtonItem.ButtonStyle in [bsDropDown, bsCheckedDropDown];
|
|
end;
|
|
|
|
function TdxBarButtonControlAccessibilityHelper.ShowDropDownWindow: Boolean;
|
|
begin
|
|
TdxBarButtonControlAccess(ItemControl).DropDown(False);
|
|
Result := ItemControl.IsDroppedDown;
|
|
end;
|
|
|
|
function TdxBarButtonControlAccessibilityHelper.GetItemControl: TdxBarButtonControl;
|
|
begin
|
|
Result := TdxBarButtonControl(FOwnerObject);
|
|
end;
|
|
|
|
{ TdxBarSubItemControlAccessibilityHelper }
|
|
|
|
function TdxBarSubItemControlAccessibilityHelper.IsDropDownControl: Boolean;
|
|
begin
|
|
Result := True;
|
|
end;
|
|
|
|
function TdxBarSubItemControlAccessibilityHelper.ShowDropDownWindow: Boolean;
|
|
begin
|
|
TdxBarSubItemControlAccess(ItemControl).DropDown(True);
|
|
Result := ItemControl.IsDroppedDown;
|
|
end;
|
|
|
|
{ TdxBarWinControlAccessibilityHelper }
|
|
|
|
procedure TdxBarWinControlAccessibilityHelper.KeyTipHandler(
|
|
Sender: TObject);
|
|
begin
|
|
BarNavigationController.StopKeyboardHandling;
|
|
BarNavigationController.ChangeSelectedObject(True, Self);
|
|
end;
|
|
|
|
function TdxBarWinControlAccessibilityHelper.NeedsVisibilityForKeyTipHandling: Boolean;
|
|
begin
|
|
Result := True;
|
|
end;
|
|
|
|
end.
|