[456] | 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 |
|
---|