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