⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxbaraccessibility.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 4 页
字号:
{*******************************************************************}
{                                                                   }
{       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 + -