首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

在 Delphi 中怎么使用,金山词霸中的XdictGrb.dll

2012-03-16 
在 Delphi 中如何使用,金山词霸中的XdictGrb.dll声明:  本贴只为个人研究,如有侵犯他人权力的嫌疑,请版主

在 Delphi 中如何使用,金山词霸中的XdictGrb.dll
声明:
  本贴只为个人研究,如有侵犯他人权力的嫌疑,请版主指正。

问题描述:
  想实现简单的屏幕取词的功能,查到可以通过金山词霸中的   XdictGrb.dll   来实现。

  网上有一些   VB   的代码:
   http://www.chenoe.com/blog/article.asp?id=2047
   http://blog.csdn.net/cnzx219/archive/2005/09/29/482399.aspx
   http://tongxiaofeng.spaces.live.com/Blog/cns!1pR_PsQz7rPcW32aavcleDGQ!361.entry

  但本人对   VB   和   COM   的使用都不是很熟,所以希望有哪位可以将其翻成   Delphi   的代码。

  谢谢。


[解决办法]
用Delphi打开XdictGrb.dll,浏览类型库(类/接口/属性/方法/枚举等等)。
可以用Component菜单下面的“Import Component”来导入其声明(Import Type Library-> Next-> Select "XdictGrb 1.0 Type Library "-> Next...)。接下来的代码类似于:

// uses XDictGrb_TLB;

procedure TryIt;
var
grab: GrabProxy;
begin
grap := CoGrabProxy.Create;
grap.GrabInternal := 1;
grap.GrabMode := XDictGrabMouse;
grap.GrabEnabled := True;
//...
end;

[解决办法]
p.s.
// 编译时绑定
var
grab: IGrabProxy;
begin
grab := CoGrabProxy.Create;
grab.GrabInternal := 1;
//...
end;

// 运行时绑定
var
grab: Variant;
begin
grab := CreateOleObject( 'XdictGrb.GrabProxy ');
grab.GrabInternal := 1;
//...
end;

[解决办法]
收藏,学习。

[解决办法]
学习了..
[解决办法]
关键代码哪去了?
[解决办法]
搞定,查到C的源代码

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleServer, XDICTGRB_TLB, StdCtrls;

type
TForm1 = class(TForm, IXDictGrabSink)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
GP: IGrabProxy;
public
{ Public declarations }
function QueryWord(const WordString: WideString; lCursorX: Integer;
lCursorY: Integer;
const SentenceString: WideString; var lLoc: Integer; var lStart: Integer):
Integer; safecall;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
gp := CoGrabProxy.Create;
gp.GrabInterval := 1;
gp.GrabMode := XDictGrabMouse;
gp.GrabEnabled := true;
gp.AdviseGrab(self);
end;

function TForm1.QueryWord(const WordString: WideString; lCursorX,
lCursorY: Integer; const SentenceString: WideString; var lLoc,
lStart: Integer): Integer;
begin
memo1.Text := memo1.text + SentenceString + #13#10;
end;

end.


[解决办法]
原来引用了IXDictGrabSink接口.
然后重写function QueryWord就可以了.

接分!
[解决办法]
关注
[解决办法]
关注。。。。

热点排行