source: cprs/branches/tmg-cprs/CPRS-Chart/TMG_Extra/HTMLEdit/EwbEvents.pas@ 656

Last change on this file since 656 was 541, checked in by Kevin Toppenberg, 15 years ago

TMG Ver 1.1 Added HTML Support, better demographics editing

File size: 11.1 KB
Line 
1//*************************************************************
2// EwbEvents *
3// *
4// Freeware Unit *
5// For Delphi *
6// by *
7// Serge Voloshenyuk *
8// Developing Team: *
9// Serge Voloshenyuk (SergeV@bsalsa.com) *
10// Eran Bodankin (bsalsa) -(bsalsa@gmail.com) *
11// *
12// Documentation and updated versions: *
13// *
14// http://www.bsalsa.com *
15//*************************************************************
16{LICENSE:
17THIS SOFTWARE IS PROVIDED TO YOU "AS IS" WITHOUT WARRANTY OF ANY KIND,
18EITHER EXPRESSED OR IMPLIED INCLUDING BUT NOT LIMITED TO THE APPLIED
19WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
20YOU ASSUME THE ENTIRE RISK AS TO THE ACCURACY AND THE USE OF THE SOFTWARE
21AND ALL OTHER RISK ARISING OUT OF THE USE OR PERFORMANCE OF THIS SOFTWARE
22AND DOCUMENTATION. BSALSA PRODUCTIONS DOES NOT WARRANT THAT THE SOFTWARE IS ERROR-FREE
23OR WILL OPERATE WITHOUT INTERRUPTION. THE SOFTWARE IS NOT DESIGNED, INTENDED
24OR LICENSED FOR USE IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE CONTROLS,
25INCLUDING WITHOUT LIMITATION, THE DESIGN, CONSTRUCTION, MAINTENANCE OR
26OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS,
27AIR TRAFFIC CONTROL, AND LIFE SUPPORT OR WEAPONS SYSTEMS. BSALSA PRODUCTIONS SPECIFICALLY
28DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR SUCH PURPOSE.
29
30You may use/ change/ modify the component under 3 conditions:
311. In your website, add a link to "http://www.bsalsa.com"
322. In your application, add credits to "Embedded Web Browser"
333. Mail me (bsalsa@gmail.com) any code change in the unit for the benefit
34 of the other users.
354. Please, consider donation in our web site!
36{*******************************************************************************}
37//$Id: EwbEvents.pas,v 1.1.2.1 2006/11/29 22:13:01 sergev Exp $
38
39unit EwbEvents;
40
41interface
42
43{$I EWB.inc}
44
45uses
46
47 Windows, Classes, ActiveX, Mshtml_Ewb, EwbClasses, wbhFixes;
48
49type
50 TSinkKind = (
51 skElement,
52 skLink,
53 skForm,
54 skControl,
55 skTextContainer,
56 skImg,
57 skAnchor,
58 skLabel,
59 skSelect,
60 skButton,
61 skInputText,
62 skOptionButton,
63 skInputFile,
64 skInputImage,
65 skMarquee,
66 skWindow,
67 skDocument,
68 skMap,
69 skArea,
70 skTable,
71 skScript,
72 skObject,
73 skFrameSite,
74 skStyle,
75 skNamespace
76 );
77
78 TEventID = Integer;
79const
80 heOnAbort = 1000;
81 heOnChange = 1001; //f
82 heOnError = 1002;
83 // HTMLWindowEvents2.onerror(const description: WideString; const url: WideString; line: Integer); dispid 1002;
84 heOnLoad = 1003;
85 heOnSelect = 1006;
86 heOnSubmit = 1007; //f
87 heOnUnload = 1008;
88 heOnBounce = 1009;
89 heOnFinish = 1010;
90 heOnStart = 1011;
91 heOnScroll = 1014;
92 heOnReset = 1015; //f
93 heOnresize = 1016;
94 heOnBeforeUnload = 1017;
95 heOncontextmenu = 1023; //f
96 heOnBeforePrint = 1024;
97 heOnAfterPrint = 1025;
98 heOnStop = 1026; //f
99 heOnBeforeEditFocus = 1027;
100 heOnlayoutcomplete = 1030;
101 heOnPage = 1031;
102 heOnMousewheel = 1033; //f
103 heOnBeforeDeactivate = 1034; //f
104 heOnMove = 1035;
105 heOnControlSelect = 1036; //f
106 heOnSelectionChange = 1037;
107 heOnMoveStart = 1038; //f
108 heOnMoveEnd = 1039;
109 heOnResizeStart = 1040; //f
110 heOnResizeEnd = 1041;
111 heOnMouseEnter = 1042;
112 heOnMouseLeave = 1043;
113 heOnActivate = 1044;
114 heOnDeactivate = 1045;
115 heOnBeforeActivate = 1047; //f
116 heOnfocusIn = 1048;
117 heOnfocusOut = 1049;
118
119 heOnClick = -600; //f
120 heOnDblClick = -601; //f
121 heOnKeyDown = -602;
122 heOnKeyPress = -603; //f
123 heOnKeyUp = -604;
124 heOnMouseDown = -605;
125 heOnMouseMove = -606;
126 heOnMouseUp = -607;
127 heOnReadyStateChange = -609;
128
129 heOnCellChange = -2147418078;
130 heOnRowsInserted = -2147418079;
131 heOnRowsDelete = -2147418080;
132 heOnBeforePaste = -2147418081; //f
133 heOnBeforeCopy = -2147418082; //f
134 heOnBeforeCut = -2147418083; //f
135 heOnPaste = -2147418084; //f
136 heOnCopy = -2147418085; //f
137 heOnCut = -2147418086; //f
138 heOnDrop = -2147418087; //f
139 heOnDragLeave = -2147418088;
140 heOnDragOver = -2147418089; //f
141 heOnDragEnter = -2147418090; //f
142 heOnDragEnd = -2147418091;
143 heOnDrag = -2147418092; //f
144 // heOnObjReadyStateChange = -2147418092; //HTMLObjectElementEvents2
145 heOnPropertyChange = -2147418093;
146 // heOnObjError = -2147418093; //f HTMLObjectElementEvents2
147 heOnLoseCapture = -2147418094;
148 heOnFilterChange = -2147418095;
149 heOnDatasetComplete = -2147418096;
150 heOnDataAvailable = -2147418097;
151 heOnDatasetChanged = -2147418098;
152 heOnErrorUpdate = -2147418099; //f
153 heOnSelectStart = -2147418100; //f
154 heOnDragStart = -2147418101; //f
155 heOnHelp = -2147418102; //f
156 heOnMouseOut = -2147418103;
157 heOnMouseOver = -2147418104;
158 heOnRowEnter = -2147418105;
159 heOnRowExit = -2147418106; //f
160 heOnAfterUpdate = -2147418107;
161 heOnBeforeUpdate = -2147418108; //f
162 heOnFocus = -2147418111;
163 heOnBlur = -2147418112;
164
165type
166 IHubLink = interface
167 ['{EC22D916-CC24-4D88-A7ED-20C5E9AE0852}']
168 procedure Disconnect;
169 end;
170
171 TMshtmlHandler = function(Sender: IUnknown): Boolean of object;
172
173 TMSHTMLEventHandler = class(TInterfacedDispatchObject, IDispatchEx)
174 private
175 FHandler: TMshtmlHandler;
176 protected
177 function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
178 Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
179 override; stdcall;
180 {IDispatchEx}
181 function GetDispID(const bstrName: TBSTR; const grfdex: DWORD;
182 out id: TDispID): HResult; stdcall;
183 function InvokeEx(const id: TDispID; const lcid: LCID; const wflags:
184 WORD; const pdp: PDispParams; out varRes: OleVariant; out pei:
185 TExcepInfo; const pspCaller: PServiceProvider): HResult; stdcall;
186 function DeleteMemberByName(const bstr: TBSTR;
187 const grfdex: DWORD): HResult; stdcall;
188 function DeleteMemberByDispID(const id: TDispID): HResult; stdcall;
189 function GetMemberProperties(const id: TDispID; const grfdexFetch:
190 DWORD; out grfdex: DWORD): HResult; stdcall;
191 function GetMemberName(const id: TDispID; out bstrName: TBSTR):
192 HResult; stdcall;
193 function GetNextDispID(const grfdex: DWORD; const id: TDispID;
194 out nid: TDispID): HResult; stdcall;
195 function GetNameSpaceParent(out unk: IUnknown): HResult; stdcall;
196 public
197 constructor Create(Handler: TMshtmlHandler);
198 destructor Destroy; override;
199 end;
200
201function MSHTMLEventHandler(Handler: TMshtmlHandler): IDispatchEx;
202const
203 mshtmlEventGUIDs: array[TSinkKind] of PGUID = (
204 @DIID_HTMLElementEvents2, //IHTMLElement
205 @DIID_HTMLLinkElementEvents2, //IHTMLLinkElement
206 @DIID_HTMLFormElementEvents2, //IHTMLFormElement
207 @DIID_HTMLControlElementEvents2, //IHTMLControlElement
208 @DIID_HTMLTextContainerEvents2, //IHTMLTextContainer
209 @DIID_HTMLImgEvents2, //IHTMLImgElement
210 @DIID_HTMLAnchorEvents2, //IHTMLAnchorElement
211 @DIID_HTMLLabelEvents2, //IHTMLLabelElement
212 @DIID_HTMLSelectElementEvents2, //IHTMLSelectElement
213 @DIID_HTMLButtonElementEvents2, //IHTMLButtonElement
214 @DIID_HTMLInputTextElementEvents2, //IHTMLInputTextElement
215 @DIID_HTMLOptionButtonElementEvents2, //IHTMLOptionButtonElement
216 @DIID_HTMLInputFileElementEvents2, //IHTMLInputFileElement
217 @DIID_HTMLInputImageEvents2, //IHTMLInputImage
218 @DIID_HTMLMarqueeElementEvents2, //IHTMLMarqueeElement
219 @DIID_HTMLWindowEvents2, //IHTMLWindow2
220 @DIID_HTMLDocumentEvents2, //IHTMLDocument
221 @DIID_HTMLMapEvents2, //IHTMLMapElement
222 @DIID_HTMLAreaEvents2, //IHTMLAreaElement
223 @DIID_HTMLTableEvents2, //IHTMLTable
224 @DIID_HTMLScriptEvents2, //IHTMLScriptElement
225 @DIID_HTMLObjectElementEvents2, //IHTMLObjectElement
226 @DIID_HTMLFrameSiteEvents2,
227 @DIID_HTMLStyleElementEvents2, //IHTMLStyleElement
228 @DIID_HTMLNamespaceEvents //IHTMLNamespace
229 );
230
231implementation
232uses SysUtils;
233
234{ TMSHTMLEventHandler }
235
236function MSHTMLEventHandler(Handler: TMshtmlHandler): IDispatchEx;
237begin
238 Result := TMSHTMLEventHandler.Create(Handler) as IDispatchEx;
239end;
240
241constructor TMSHTMLEventHandler.Create(Handler: TMshtmlHandler);
242begin
243 inherited Create;
244 FHandler := Handler;
245end;
246
247destructor TMSHTMLEventHandler.Destroy;
248begin
249 inherited;
250end;
251
252function TMSHTMLEventHandler.DeleteMemberByDispID(const id: TDispID): HResult;
253begin
254 Result := S_FALSE;
255end;
256
257function TMSHTMLEventHandler.DeleteMemberByName(const bstr: TBSTR;
258 const grfdex: DWORD): HResult;
259begin
260 Result := S_FALSE;
261end;
262
263function TMSHTMLEventHandler.GetDispID(const bstrName: TBSTR;
264 const grfdex: DWORD; out id: TDispID): HResult;
265begin
266 Result := DISP_E_UNKNOWNNAME;
267end;
268
269function TMSHTMLEventHandler.GetMemberName(const id: TDispID;
270 out bstrName: TBSTR): HResult;
271begin
272 Result := DISP_E_UNKNOWNNAME;
273end;
274
275function TMSHTMLEventHandler.GetMemberProperties(const id: TDispID;
276 const grfdexFetch: DWORD; out grfdex: DWORD): HResult;
277begin
278 Result := DISP_E_UNKNOWNNAME;
279end;
280
281function TMSHTMLEventHandler.GetNameSpaceParent(
282 out unk: IUnknown): HResult;
283begin
284 Result := E_NOTIMPL;
285end;
286
287function TMSHTMLEventHandler.GetNextDispID(const grfdex: DWORD;
288 const id: TDispID; out nid: TDispID): HResult;
289begin
290 Result := S_FALSE;
291end;
292
293function TMSHTMLEventHandler.Invoke(DispID: Integer; const IID: TGUID;
294 LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
295 ArgErr: Pointer): HResult;
296var
297 Instance: IUnknown;
298 R: Boolean;
299begin
300 Result := S_OK;
301 if (Flags and DISPATCH_METHOD = 0) then Exit;
302 try
303 Instance := POleVariant(TDispParams(Params).rgvarg)^;
304 R := FHandler(Instance);
305 if VarResult <> nil then
306 POleVariant(VarResult)^ := R;
307 except
308 on E: Exception do
309 begin
310 Result := DISP_E_EXCEPTION;
311 with PExcepInfo(ExcepInfo)^ do
312 begin
313 wCode := 9999;
314 bstrDescription := E.Message;
315 bstrSource := E.ClassName;
316 dwHelpContext := E.HelpContext;
317 end;
318 end;
319 end;
320end;
321
322
323function TMSHTMLEventHandler.InvokeEx(const id: TDispID; const lcid: LCID;
324 const wflags: WORD; const pdp: PDispParams; out varRes: OleVariant;
325 out pei: TExcepInfo; const pspCaller: PServiceProvider): HResult;
326var
327 Instance: IUnknown;
328begin
329 Result := S_OK;
330 if (wflags and DISPATCH_METHOD = 0) then Exit;
331 try
332 Instance := POleVariant(pdp.rgvarg)^;
333 varRes := FHandler(Instance);
334 except
335 on E: Exception do
336 begin
337 Result := DISP_E_EXCEPTION;
338 with pei do
339 begin
340 wCode := 9999;
341 bstrDescription := E.Message;
342 bstrSource := E.ClassName;
343 dwHelpContext := E.HelpContext;
344 end;
345 end;
346 end;
347end;
348
349end.
Note: See TracBrowser for help on using the repository browser.