📄 dxbaraccessibility.pas
字号:
{*******************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressBars components }
{ }
{ Copyright (c) 1998-2008 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, 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -