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

📄 dxbaraccessibility.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    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;
    GetWindowRect(OwnerObjectWindow, R);
    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;
  GetWindowRect(OwnerObjectWindow, R);
  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;
    GetWindowRect(OwnerObjectWindow, R);
    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

⌨️ 快捷键说明

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