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