📄 dxbaraccessibility.pas
字号:
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 + -