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