《Delphi不注册COM直接使用ActiveX控件并绑定事件》由会员分享,可在线阅读,更多相关《Delphi不注册COM直接使用ActiveX控件并绑定事件(12页珍藏版)》请在金锄头文库上搜索。
1、.word可编辑.Delphi不注册COM直接使用ActiveX控件并绑定事件 文笔不行,直接上源码:主窗口:delphi view plaincopyunit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Winapi.ActiveX , System.Win.ComObj
2、, EventSink; type TForm1 = class(TForm) pnlCom: TPanel; Panel2: TPanel; Panel3: TPanel; btnGo: TButton; edt1: TEdit; LblStatus: TLabel; procedure FormCreate(Sender: TObject); procedure btnGoClick(Sender: TObject); private Private declarations EventSink: TEventSink; ActiveXCon: Variant; function Init
3、Atl: Boolean; procedure EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); public Public declarations end; var Form1: TForm1; const CLASS_MsRdpClient: TGUID = 7CACBD7B-0D99-468F-AC33-22E49
4、5C0AFE5;/791FA017-2DE3-492E-ACC5-53C67A2B94D0; type PIUnknown=IUnknown; TAtlAxAttachControl = function(Control:IUnknown; hwind:hwnd;ppUnkContainer:PIUnknown): HRESULT; stdcall; /-此处参考mstscax.dll的接口文件,如果没有,在 Component->Import Component->Import a Type Library /-导入:Microsoft Terminal Services Act
5、ive Client 1.0 Type Library 1.0 IMsTscAxEvents = dispinterface 336D5562-EFA8-482E-8CB3-C5C0FC7A7DB6 procedure OnConnecting; dispid 1; procedure OnConnected; dispid 2; procedure OnLoginComplete; dispid 3; procedure OnDisconnected(discReason: Integer); dispid 4; procedure OnEnterFullScreenMode; dispid
6、 5; procedure OnLeaveFullScreenMode; dispid 6; procedure OnChannelReceivedData(const chanName: WideString; const data: WideString); dispid 7; procedure OnRequestGoFullScreen; dispid 8; procedure OnRequestLeaveFullScreen; dispid 9; procedure OnFatalError(errorCode: Integer); dispid 10; procedure OnWa
7、rning(warningCode: Integer); dispid 11; procedure OnRemoteDesktopSizeChange(width: Integer; height: Integer); dispid 12; procedure OnIdleTimeoutNotification; dispid 13; procedure OnRequestContainerMinimize; dispid 14; function OnConfirmClose: WordBool; dispid 15; function OnReceivedTSPublicKey(const
8、 publicKey: WideString): WordBool; dispid 16; function OnAutoReconnecting(disconnectReason: Integer; attemptCount: Integer): AutoReconnectContinueState; dispid 17; procedure OnAuthenticationWarningDisplayed; dispid 18; procedure OnAuthenticationWarningDismissed; dispid 19; end; implementation $R *.d
9、fm TForm1 function CreateComObjectFromDll(CLSID: TGUID; DllHandle: THandle): IUnknown; var Factory: IClassFactory; DllGetClassObject: function(const CLSID, IID: TGUID; var Obj): HResult; stdcall; hr: HRESULT; begin DllGetClassObject := GetProcAddress(DllHandle, DllGetClassObject); if Assigned(DllGet
10、ClassObject) then begin hr := DllGetClassObject(CLSID, IClassFactory, Factory); if hr = S_OK then try hr := Factory.CreateInstance(nil, IUnknown, Result); if hr <> S_OK then begin ShowMessage(Error); end; except ShowMessage(IntToStr(GetLastError); end; end; end; procedure TForm1.btnGoClick(Sen
11、der: TObject); begin ActiveXCon.Navigate(edt1.Text); end; procedure TForm1.EventSinkInvoke(Sender: TObject; DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; Params: tagDISPPARAMS; VarResult, ExcepInfo, ArgErr: Pointer); begin <p> 这里需要注明Params这个参数, 包含了事件的参数 如: Params.rgvarg0 代
12、表第一个参数 Params.rgvarg1 代表第二个参数 . Params.rgvarg65535 代表第65535个参数 最多65535个参数 具体可以参考 tagDISPPARAMS 的定义</p><p> 这里只列出了怎么扑获相关事件,具体功能具体实现 </p> case dispid of $00000001: LblStatus.Caption := 正在连接; $00000002: LblStatus.Caption := 连接成功; $00000003: LblStatus.Caption := 登陆成功; $00000004: LblStat
13、us.Caption := 断开连接; $00000005: LblStatus.Caption := 进入全屏模式; $00000006: LblStatus.Caption := 离开全屏模式; $00000007: LblStatus.Caption := 通道接收数据; $00000008: LblStatus.Caption := OnRequestGoFullScreen; $00000009: LblStatus.Caption := OnRequestLeaveFullScreen; $00000010: LblStatus.Caption := OnFatalError; $
14、00000011: LblStatus.Caption := OnWarning; $00000012: LblStatus.Caption := OnRemoteDesktopSizeChange; $00000013: LblStatus.Caption := OnIdleTimeoutNotification; $00000014: LblStatus.Caption := OnRequestContainerMinimize; $00000015: LblStatus.Caption := OnConfirmClose; $00000016: LblStatus.Caption := OnReceivedTSPublicKey; $00000017: LblStatus.Caption := OnAutoReconnecting; $00000018: LblStatus.Caption := OnAuthenticationWarningDisplayed; $00000019: LblStatus.Caption := OnAuthenticationWarningDismisse