| 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 |  | 
|---|