cxaccessibility.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,048 行 · 第 1/3 页
PAS
1,048 行
{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ Express Cross Platform Library graphics classes }
{ }
{ Copyright (c) 2000-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 EXPRESSCROSSPLATFORMLIBRARY 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 cxAccessibility;
interface
{$I cxVer.inc}
uses
Windows, ActiveX, Classes, OleServer, Messages, cxClasses;
(*$HPPEMIT '#include <OleIdl.h>*)
const
cxAccessibleObjectSelfID = 0;
SID_IcxAccessible = '{618736E0-3C3D-11CF-810C-00AA00389B71}';
IID_IcxAccessible: TGUID = SID_IcxAccessible;
type
TcxAccessibilityHelper = class;
TcxAccessibleSimpleChildElementID = 0..MaxInt;
TcxAccessibleObjectProperty = (aopDefaultAction, aopDescription, aopFocus,
aopLocation, aopShortcut, aopValue);
TcxAccessibleObjectProperties = set of TcxAccessibleObjectProperty;
TcxAccessibleObjectHitTest = (aohtNone, aohtSelf, aohtChild);
TcxAccessibilityNavigationDirection = (andLeft, andUp, andRight, andDown,
andPrev, andNext);
{ IcxAccessible }
IcxAccessible = interface(IDispatch)
[SID_IcxAccessible]
function Get_accParent(out ppdispParent: IDispatch): HResult; stdcall;
function Get_accChildCount(out pcountChildren: Integer): HResult; stdcall;
function Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; stdcall;
function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall;
function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall;
function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall;
function Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; stdcall;
function Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; stdcall;
function Get_accHelp(varChild: OleVariant; out pszHelp: WideString): HResult; stdcall;
function Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant;
out pidTopic: Integer): HResult; stdcall;
function Get_accKeyboardShortcut(varChild: OleVariant; out pszKeyboardShortcut: WideString): HResult; stdcall;
function Get_accFocus(out pvarChild: OleVariant): HResult; stdcall;
function Get_accSelection(out pvarChildren: OleVariant): HResult; stdcall;
function Get_accDefaultAction(varChild: OleVariant; out pszDefaultAction: WideString): HResult; stdcall;
function accSelect(flagsSelect: Integer; varChild: OleVariant): HResult; stdcall;
function accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer;
out pcyHeight: Integer; varChild: OleVariant): HResult; stdcall;
function accNavigate(navDir: Integer; varStart: OleVariant; out pvarEndUpAt: OleVariant): HResult; stdcall;
function accHitTest(xLeft: Integer; yTop: Integer; out pvarChild: OleVariant): HResult; stdcall;
function accDoDefaultAction(varChild: OleVariant): HResult; stdcall;
function Set_accName(varChild: OleVariant; const pszName: WideString): HResult; stdcall;
function Set_accValue(varChild: OleVariant; const pszValue: WideString): HResult; stdcall;
end;
IcxAccessibilityHelper = interface
['{D4890860-09B2-4648-BD9E-DFFBD140E5F1}']
function GetHelper: TcxAccessibilityHelper;
procedure OwnerObjectDestroyed;
end;
TcxAccessibilityHelper = class(TInterfacedObject, IDispatch, IOleWindow,
IcxAccessible, IcxAccessibilityHelper)
private
FIsOwnerObjectLive: Boolean;
// IDispatch
function GetIDsOfNames(const IID: TGUID; Names: Pointer;
NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
// IOleWindow
function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall;
function GetWindow(out wnd: HWnd): HResult; stdcall;
// IcxAccessible
function accDoDefaultAction(varChild: OleVariant): HResult; stdcall;
function accHitTest(xLeft: Integer; yTop: Integer; out pvarChild: OleVariant): HResult; stdcall;
function accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer;
out pcyHeight: Integer; varChild: OleVariant): HResult; stdcall;
function accNavigate(navDir: Integer; varStart: OleVariant; out pvarEndUpAt: OleVariant): HResult; stdcall;
function accSelect(flagsSelect: Integer; varChild: OleVariant): HResult; stdcall;
function Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; stdcall;
function Get_accChildCount(out pcountChildren: Integer): HResult; stdcall;
function Get_accDefaultAction(varChild: OleVariant; out pszDefaultAction: WideString): HResult; stdcall;
function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall;
function Get_accFocus(out pvarChild: OleVariant): HResult; stdcall;
function Get_accHelp(varChild: OleVariant; out pszHelp: WideString): HResult; stdcall;
function Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant;
out pidTopic: Integer): HResult; stdcall;
function Get_accKeyboardShortcut(varChild: OleVariant; out pszKeyboardShortcut: WideString): HResult; stdcall;
function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall;
function Get_accParent(out ppdispParent: IDispatch): HResult; stdcall;
function Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; stdcall;
function Get_accSelection(out pvarChildren: OleVariant): HResult; stdcall;
function Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; stdcall;
function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall;
function Set_accName(varChild: OleVariant; const pszName: WideString): HResult; stdcall;
function Set_accValue(varChild: OleVariant; const pszValue: WideString): HResult; stdcall;
function CheckIsOwnerObjectLive(out AErrorCode: HResult): Boolean;
procedure CheckSimpleChildElementToBeReturned(var AVarChild: OleVariant);
procedure CheckStringToBeReturned(const AStr: WideString; out AResult: HResult);
function GetSimpleChildElementID(AChildID: OleVariant;
out ASimpleChildElementID: TcxAccessibleSimpleChildElementID;
out AErrorCode: HResult): Boolean;
function GetVisible: Boolean;
protected
FOwnerObject: TObject;
// IcxAccessibilityHelper
function GetHelper: TcxAccessibilityHelper;
procedure OwnerObjectDestroyed; virtual;
function ChildIsSimpleElement(AIndex: Integer): Boolean; virtual;
procedure DoDefaultAction(AChildID: TcxAccessibleSimpleChildElementID); virtual;
function Focused(out AIsChildFocused: Boolean;
out AFocusedChildIndex: Integer): Boolean; virtual;
function GetChild(AIndex: Integer): TcxAccessibilityHelper; virtual;
function GetChildCount: Integer; virtual;
function GetChildIndex(AChild: TcxAccessibilityHelper): Integer; virtual;
function GetDefaultActionDescription(AChildID: TcxAccessibleSimpleChildElementID): string; virtual;
function GetDescription(AChildID: TcxAccessibleSimpleChildElementID): string; virtual;
function GetHitTest(AScreenX, AScreenY: Integer; out AChildIndex: Integer): TcxAccessibleObjectHitTest; virtual;
procedure GetKeyboardAccessParameters(AChildID: TcxAccessibleSimpleChildElementID;
out AShortCut: TShortCut; out ACaptionWithAccelChars: string); virtual;
function GetName(AChildID: TcxAccessibleSimpleChildElementID): string; virtual;
function GetOwnerObjectWindow: HWND; virtual;
function GetParent: TcxAccessibilityHelper; virtual;
function GetRole(AChildID: TcxAccessibleSimpleChildElementID): Integer; virtual;
function GetScreenBounds(AChildID: TcxAccessibleSimpleChildElementID): TRect; virtual;
function GetSelectable: Boolean; virtual;
function GetState(AChildID: TcxAccessibleSimpleChildElementID): Integer; virtual;
function GetSupportedProperties(AChildID: TcxAccessibleSimpleChildElementID): TcxAccessibleObjectProperties; virtual;
function GetValue(AChildID: TcxAccessibleSimpleChildElementID): string; virtual;
function NavigateToChild(ACurrentChildIndex: Integer; ADirection: TcxAccessibilityNavigationDirection): Integer; virtual; // andPrev, andNext must prevent looping
procedure SetValue(AChildID: TcxAccessibleSimpleChildElementID; const Value: string); virtual;
function GetRootHelper: TcxAccessibilityHelper;
public
constructor Create(AOwnerObject: TObject); virtual;
function GetNextSelectableChildIndex(AStartIndex: Integer;
AGoForward: Boolean): Integer;
property Childs[AIndex: Integer]: TcxAccessibilityHelper read GetChild;
property ChildCount: Integer read GetChildCount;
property IsOwnerObjectLive: Boolean read FIsOwnerObjectLive;
property OwnerObject: TObject read FOwnerObject;
property OwnerObjectWindow: HWND read GetOwnerObjectWindow;
property Parent: TcxAccessibilityHelper read GetParent;
property Selectable: Boolean read GetSelectable;
property States[AChildID: TcxAccessibleSimpleChildElementID]: Integer read GetState;
property Visible: Boolean read GetVisible;
end;
TcxAccessibilityHelperClass = class of TcxAccessibilityHelper;
const
cxROLE_SYSTEM_TITLEBAR = $1;
cxROLE_SYSTEM_MENUBAR = $2;
cxROLE_SYSTEM_SCROLLBAR = $3;
cxROLE_SYSTEM_GRIP = $4;
cxROLE_SYSTEM_SOUND = $5;
cxROLE_SYSTEM_CURSOR = $6;
cxROLE_SYSTEM_CARET = $7;
cxROLE_SYSTEM_ALERT = $8;
cxROLE_SYSTEM_WINDOW = $9;
cxROLE_SYSTEM_CLIENT = $a;
cxROLE_SYSTEM_MENUPOPUP = $b;
cxROLE_SYSTEM_MENUITEM = $c;
cxROLE_SYSTEM_TOOLTIP = $d;
cxROLE_SYSTEM_APPLICATION = $e;
cxROLE_SYSTEM_DOCUMENT = $f;
cxROLE_SYSTEM_PANE = $10;
cxROLE_SYSTEM_CHART = $11;
cxROLE_SYSTEM_DIALOG = $12;
cxROLE_SYSTEM_BORDER = $13;
cxROLE_SYSTEM_GROUPING = $14;
cxROLE_SYSTEM_SEPARATOR = $15;
cxROLE_SYSTEM_TOOLBAR = $16;
cxROLE_SYSTEM_STATUSBAR = $17;
cxROLE_SYSTEM_TABLE = $18;
cxROLE_SYSTEM_COLUMNHEADER = $19;
cxROLE_SYSTEM_ROWHEADER = $1a;
cxROLE_SYSTEM_COLUMN = $1b;
cxROLE_SYSTEM_ROW = $1c;
cxROLE_SYSTEM_CELL = $1d;
cxROLE_SYSTEM_LINK = $1e;
cxROLE_SYSTEM_HELPBALLOON = $1f;
cxROLE_SYSTEM_CHARACTER = $20;
cxROLE_SYSTEM_LIST = $21;
cxROLE_SYSTEM_LISTITEM = $22;
cxROLE_SYSTEM_OUTLINE = $23;
cxROLE_SYSTEM_OUTLINEITEM = $24;
cxROLE_SYSTEM_PAGETAB = $25;
cxROLE_SYSTEM_PROPERTYPAGE = $26;
cxROLE_SYSTEM_INDICATOR = $27;
cxROLE_SYSTEM_GRAPHIC = $28;
cxROLE_SYSTEM_STATICTEXT = $29;
cxROLE_SYSTEM_TEXT = $2a;
cxROLE_SYSTEM_PUSHBUTTON = $2b;
cxROLE_SYSTEM_CHECKBUTTON = $2c;
cxROLE_SYSTEM_RADIOBUTTON = $2d;
cxROLE_SYSTEM_COMBOBOX = $2e;
cxROLE_SYSTEM_DROPLIST = $2f;
cxROLE_SYSTEM_PROGRESSBAR = $30;
cxROLE_SYSTEM_DIAL = $31;
cxROLE_SYSTEM_HOTKEYFIELD = $32;
cxROLE_SYSTEM_SLIDER = $33;
cxROLE_SYSTEM_SPINBUTTON = $34;
cxROLE_SYSTEM_DIAGRAM = $35;
cxROLE_SYSTEM_ANIMATION = $36;
cxROLE_SYSTEM_EQUATION = $37;
cxROLE_SYSTEM_BUTTONDROPDOWN = $38;
cxROLE_SYSTEM_BUTTONMENU = $39;
cxROLE_SYSTEM_BUTTONDROPDOWNGRID = $3a;
cxROLE_SYSTEM_WHITESPACE = $3b;
cxROLE_SYSTEM_PAGETABLIST = $3c;
cxROLE_SYSTEM_CLOCK = $3d;
cxROLE_SYSTEM_SPLITBUTTON = $3e;
cxROLE_SYSTEM_IPADDRESS = $3f;
cxROLE_SYSTEM_OUTLINEBUTTON = $40;
cxSTATE_SYSTEM_NORMAL = $0;
cxSTATE_SYSTEM_UNAVAILABLE = $1;
cxSTATE_SYSTEM_SELECTED = $2;
cxSTATE_SYSTEM_FOCUSED = $4;
cxSTATE_SYSTEM_PRESSED = $8;
cxSTATE_SYSTEM_CHECKED = $10;
cxSTATE_SYSTEM_MIXED = $20;
cxSTATE_SYSTEM_INDETERMINATE = cxSTATE_SYSTEM_MIXED;
cxSTATE_SYSTEM_READONLY = $40;
cxSTATE_SYSTEM_HOTTRACKED = $80;
cxSTATE_SYSTEM_DEFAULT = $100;
cxSTATE_SYSTEM_EXPANDED = $200;
cxSTATE_SYSTEM_COLLAPSED = $400;
cxSTATE_SYSTEM_BUSY = $800;
cxSTATE_SYSTEM_FLOATING = $1000;
cxSTATE_SYSTEM_MARQUEED = $2000;
cxSTATE_SYSTEM_ANIMATED = $4000;
cxSTATE_SYSTEM_INVISIBLE = $8000;
cxSTATE_SYSTEM_OFFSCREEN = $10000;
cxSTATE_SYSTEM_SIZEABLE = $20000;
cxSTATE_SYSTEM_MOVEABLE = $40000;
cxSTATE_SYSTEM_SELFVOICING = $80000;
cxSTATE_SYSTEM_FOCUSABLE = $100000;
cxSTATE_SYSTEM_SELECTABLE = $200000;
cxSTATE_SYSTEM_LINKED = $400000;
cxSTATE_SYSTEM_TRAVERSED = $800000;
cxSTATE_SYSTEM_MULTISELECTABLE = $1000000;
cxSTATE_SYSTEM_EXTSELECTABLE = $2000000;
cxSTATE_SYSTEM_ALERT_LOW = $4000000;
cxSTATE_SYSTEM_ALERT_MEDIUM = $8000000;
cxSTATE_SYSTEM_ALERT_HIGH = $10000000;
cxSTATE_SYSTEM_PROTECTED = $20000000;
cxSTATE_SYSTEM_VALID = $7fffffff;
cxSTATE_SYSTEM_HASPOPUP = $40000000;
function WMGetObjectResultFromIAccessibilityHelper(
const AWMGetObjectMessage: TMessage; AIHelper: IcxAccessibilityHelper): LRESULT;
function CanReturnAccessibleObject(const AWMGetObjectMessage: TMessage): Boolean;
function IsAccessibilitySupported: Boolean;
implementation
uses
Menus, SysUtils, cxControls;
const
NAVDIR_UP = $1 ;
NAVDIR_DOWN = $2 ;
NAVDIR_LEFT = $3 ;
NAVDIR_RIGHT = $4 ;
NAVDIR_NEXT = $5 ;
NAVDIR_PREVIOUS = $6 ;
NAVDIR_FIRSTCHILD = $7 ;
NAVDIR_LASTCHILD = $8 ;
CO_E_OBJECTNOTCONNECTED = 0; // TODO
OleaccLibraryName = 'oleacc.dll';
var
FcxAccessibleObjectFromWindow: function(hwnd: THandle; dwId: DWORD;
const riid: TGUID; out ppvObject): HRESULT; stdcall = nil;
FcxLResultFromObject: function(const riid: TGUID;
wParam: WPARAM; punk: IUnknown): LRESULT; stdcall = nil;
FOleaccLibrary: HMODULE;
function WMGetObjectResultFromIAccessibilityHelper(
const AWMGetObjectMessage: TMessage; AIHelper: IcxAccessibilityHelper): LRESULT;
begin
Result := FcxLResultFromObject(IID_IcxAccessible, AWMGetObjectMessage.WParam,
AIHelper as IcxAccessible);
end;
function CanReturnAccessibleObject(const AWMGetObjectMessage: TMessage): Boolean;
begin
Result := IsAccessibilitySupported and
(Cardinal(AWMGetObjectMessage.LParam) = OBJID_CLIENT);
end;
function IsAccessibilitySupported: Boolean;
begin
Result := Assigned(FcxLResultFromObject);
end;
function cxGetAccessibleObjectFromWindow(hwnd: THandle; dwId: DWORD;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?