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

📄 dxbaraccessibility.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 4 页
字号:
              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);
var
  ANextItemLink: TdxBarItemLink;
  ANextObject: IdxBarAccessibilityHelper;
  ASelectedLink: TdxBarItemLink;
begin
  ASelectedLink := TdxBarSubMenuControlAccess(BarControl).SelectedLink;
  ANextItemLink := GetNextItemLink(ASelectedLink, not AUpKey);
  if (ANextItemLink <> nil) and (ANextItemLink.Control <> nil) then
  begin
    ANextObject := ANextItemLink.Control.IAccessibilityHelper;
    if ASelectedLink <> nil then
      ASelectedLink.Control.IAccessibilityHelper.Unselect(ANextObject);
    ANextObject.Select(AFocusItemControl);
  end;
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).DoDropDown(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.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -