1 | unit uAccessAPI;
|
---|
2 |
|
---|
3 |
|
---|
4 | interface
|
---|
5 |
|
---|
6 | uses
|
---|
7 | Accessibility_TLB,
|
---|
8 | Controls,
|
---|
9 | ComCtrls,
|
---|
10 | Windows;
|
---|
11 |
|
---|
12 | function GetDefaultObject( Control: TWinControl): IAccessible; overload;
|
---|
13 | function GetDefaultObject( Control: TTreeNode): IAccessible; overload;
|
---|
14 | function GetLResult( wParam: integer; MyInterface: IAccessible): integer;
|
---|
15 |
|
---|
16 | const
|
---|
17 | ROLE_SYSTEM_TITLEBAR = $1;
|
---|
18 | ROLE_SYSTEM_MENUBAR = $2;
|
---|
19 | ROLE_SYSTEM_SCROLLBAR = $3;
|
---|
20 | ROLE_SYSTEM_GRIP = $4;
|
---|
21 | ROLE_SYSTEM_SOUND = $5;
|
---|
22 | ROLE_SYSTEM_CURSOR = $6;
|
---|
23 | ROLE_SYSTEM_CARET = $7;
|
---|
24 | ROLE_SYSTEM_ALERT = $8;
|
---|
25 | ROLE_SYSTEM_WINDOW = $9;
|
---|
26 | ROLE_SYSTEM_CLIENT = $a;
|
---|
27 | ROLE_SYSTEM_MENUPOPUP = $b;
|
---|
28 | ROLE_SYSTEM_MENUITEM = $c;
|
---|
29 | ROLE_SYSTEM_TOOLTIP = $d;
|
---|
30 | ROLE_SYSTEM_APPLICATION = $e;
|
---|
31 | ROLE_SYSTEM_DOCUMENT = $f;
|
---|
32 | ROLE_SYSTEM_PANE = $10;
|
---|
33 | ROLE_SYSTEM_CHART = $11;
|
---|
34 | ROLE_SYSTEM_DIALOG = $12;
|
---|
35 | ROLE_SYSTEM_BORDER = $13;
|
---|
36 | ROLE_SYSTEM_GROUPING = $14;
|
---|
37 | ROLE_SYSTEM_SEPARATOR = $15;
|
---|
38 | ROLE_SYSTEM_TOOLBAR = $16;
|
---|
39 | ROLE_SYSTEM_STATUSBAR = $17;
|
---|
40 | ROLE_SYSTEM_TABLE = $18;
|
---|
41 | ROLE_SYSTEM_COLUMNHEADER = $19;
|
---|
42 | ROLE_SYSTEM_ROWHEADER = $1a;
|
---|
43 | ROLE_SYSTEM_COLUMN = $1b;
|
---|
44 | ROLE_SYSTEM_ROW = $1c;
|
---|
45 | ROLE_SYSTEM_CELL = $1d;
|
---|
46 | ROLE_SYSTEM_LINK = $1e;
|
---|
47 | ROLE_SYSTEM_HELPBALLOON = $1f;
|
---|
48 | ROLE_SYSTEM_CHARACTER = $20;
|
---|
49 | ROLE_SYSTEM_LIST = $21;
|
---|
50 | ROLE_SYSTEM_LISTITEM = $22;
|
---|
51 | ROLE_SYSTEM_OUTLINE = $23;
|
---|
52 | ROLE_SYSTEM_OUTLINEITEM = $24;
|
---|
53 | ROLE_SYSTEM_PAGETAB = $25;
|
---|
54 | ROLE_SYSTEM_PROPERTYPAGE = $26;
|
---|
55 | ROLE_SYSTEM_INDICATOR = $27;
|
---|
56 | ROLE_SYSTEM_GRAPHIC = $28;
|
---|
57 | ROLE_SYSTEM_STATICTEXT = $29;
|
---|
58 | ROLE_SYSTEM_TEXT = $2a;
|
---|
59 | ROLE_SYSTEM_PUSHBUTTON = $2b;
|
---|
60 | ROLE_SYSTEM_CHECKBUTTON = $2c;
|
---|
61 | ROLE_SYSTEM_RADIOBUTTON = $2d;
|
---|
62 | ROLE_SYSTEM_COMBOBOX = $2e;
|
---|
63 | ROLE_SYSTEM_DROPLIST = $2f;
|
---|
64 | ROLE_SYSTEM_PROGRESSBAR = $30;
|
---|
65 | ROLE_SYSTEM_DIAL = $31;
|
---|
66 | ROLE_SYSTEM_HOTKEYFIELD = $32;
|
---|
67 | ROLE_SYSTEM_SLIDER = $33;
|
---|
68 | ROLE_SYSTEM_SPINBUTTON = $34;
|
---|
69 | ROLE_SYSTEM_DIAGRAM = $35;
|
---|
70 | ROLE_SYSTEM_ANIMATION = $36;
|
---|
71 | ROLE_SYSTEM_EQUATION = $37;
|
---|
72 | ROLE_SYSTEM_BUTTONDROPDOWN = $38;
|
---|
73 | ROLE_SYSTEM_BUTTONMENU = $39;
|
---|
74 | ROLE_SYSTEM_BUTTONDROPDOWNGRID = $3a;
|
---|
75 | ROLE_SYSTEM_WHITESPACE = $3b;
|
---|
76 | ROLE_SYSTEM_PAGETABLIST = $3c;
|
---|
77 | ROLE_SYSTEM_CLOCK = $3d;
|
---|
78 |
|
---|
79 |
|
---|
80 | NAVDIR_MIN = 0;
|
---|
81 | NAVDIR_UP = 1;
|
---|
82 | NAVDIR_DOWN = 2;
|
---|
83 | NAVDIR_LEFT = 3;
|
---|
84 | NAVDIR_RIGHT = 4;
|
---|
85 | NAVDIR_NEXT = 5;
|
---|
86 | NAVDIR_PREVIOUS = 6;
|
---|
87 | NAVDIR_FIRSTCHILD = 7;
|
---|
88 | NAVDIR_LASTCHILD = 8;
|
---|
89 | NAVDIR_MAX = 9;
|
---|
90 |
|
---|
91 | implementation
|
---|
92 |
|
---|
93 | uses
|
---|
94 | Classes;
|
---|
95 |
|
---|
96 | type
|
---|
97 | TCreateStdAccessibleObject = function(hwnd: HWND; idObject: DWORD; const riid: TGUID; var Accessible: IAccessible): integer; stdcall;
|
---|
98 | TLresultFromObject = function( const riid: TGUID; wParam: integer; Accessible: Pointer): integer; stdcall;
|
---|
99 |
|
---|
100 | PhysicalInterfaceReference = record
|
---|
101 | P1: pointer;
|
---|
102 | P2: pointer;
|
---|
103 | end;
|
---|
104 |
|
---|
105 | PPhysicalInterfaceReference = ^PhysicalInterfaceReference;
|
---|
106 |
|
---|
107 | var
|
---|
108 | CreateStdAccessibleObject: TCreateStdAccessibleObject;
|
---|
109 | LresultFromObject: TLresultFromObject;
|
---|
110 | var
|
---|
111 |
|
---|
112 | OleAccHandle: THandle;
|
---|
113 |
|
---|
114 | function GetDefaultObject( Control: TWinControl): IAccessible;
|
---|
115 | begin
|
---|
116 | if Assigned(CreateStdAccessibleObject) then
|
---|
117 | begin
|
---|
118 | if CreateStdAccessibleObject(Control.Handle, OBJID_CLIENT, IID_IAccessible, Result) <> S_OK then
|
---|
119 | result := nil;
|
---|
120 | end
|
---|
121 | else
|
---|
122 | result := nil;
|
---|
123 | end;
|
---|
124 |
|
---|
125 | function GetDefaultObject( Control: TTreeNode): IAccessible;
|
---|
126 | begin
|
---|
127 | if Assigned(CreateStdAccessibleObject) then
|
---|
128 | begin
|
---|
129 | if CreateStdAccessibleObject(Control.Handle, OBJID_CLIENT, IID_IAccessible, Result) <> S_OK then
|
---|
130 | result := nil;
|
---|
131 | end
|
---|
132 | else
|
---|
133 | result := nil;
|
---|
134 | end;
|
---|
135 |
|
---|
136 | function GetLResult( wParam: integer; MyInterface: IAccessible): integer;
|
---|
137 | begin
|
---|
138 | if Assigned(LresultFromObject) then
|
---|
139 | begin
|
---|
140 | result := LresultFromObject(IID_IAccessible, wParam, PPhysicalInterfaceReference(@MyInterface)^.P1); // Increments ref count
|
---|
141 | end
|
---|
142 | else
|
---|
143 | result := E_NOINTERFACE;
|
---|
144 | end;
|
---|
145 |
|
---|
146 |
|
---|
147 | initialization
|
---|
148 | OleAccHandle := LoadLibrary('OLEACC.DLL');
|
---|
149 | if OleAccHandle <> 0 then
|
---|
150 | begin
|
---|
151 | @CreateStdAccessibleObject := GetProcAddress(OleAccHandle, 'CreateStdAccessibleObject');
|
---|
152 | @LresultFromObject := GetProcAddress(OleAccHandle, 'LresultFromObject');
|
---|
153 | end
|
---|
154 | else
|
---|
155 | begin
|
---|
156 | @CreateStdAccessibleObject := nil;
|
---|
157 | @LresultFromObject := nil;
|
---|
158 | end;
|
---|
159 |
|
---|
160 | finalization
|
---|
161 | if OleAccHandle <> 0 then
|
---|
162 | FreeLibrary(OleAccHandle);
|
---|
163 |
|
---|
164 | end.
|
---|
165 |
|
---|