delphi中使用词霸2005的动态库XdictGrb.dll实现屏幕取词
近日来,在网上发现关于屏幕取词技术的捷径,搜索很长时间,发现实现方式以VB出现的居多,但是通过Delphi来实现的却好象没有看到,自己参考着VB的相关代码琢磨了一下通过delphi来实现的方式。
其实也差不多,唯一不同的只有一个地方就是取词对象GrabProxy的AdviseGrab这个方法,该方法的参数是一个IXDictGrabSink 的接口类型,在Vb中是AdviseGrab(Me)就可以了,但是在delphi中则不能简单使用AdviseGrab(self)来,在前面 TForm1 = class(TForm)的这个Form类声明必须在继承一个接口才行,所以应该改成 TForm1 = class(TForm,IXDictGrabSink),然后实现IxDictGrabSink接口的方法QueryWord,该方法就是用来取词的。
function QueryWord(const WordString: WideString; lCursorX: Integer; lCursorY: Integer;
const SentenceString: WideString; var lLoc: Integer; var lStart: Integer): Integer;safecall;
此时你就可以通过类似于Vb中来进行指定了,AdviseGrab(self)就将接口指向了他自己。
但此之前,你必须先得到XDICTGRB_TLB单元,你可以通过delphi的
Project---->Import Type Library..来把该动态库引用进来,然后创建单元,或是简单的,你直接把他创建成一可用的控件。
然后在窗体中调用。
当成控件来使用如下:
直接拖到窗体上,然后将窗体代码中的TForm1 = class(TForm)改成
TForm1 = class(TForm,IXDictGrabSink),并且实现IXDictGrabSink接口中的方法的声明
function QueryWord(const WordString: WideString; lCursorX: Integer; lCursorY: Integer;
const SentenceString: WideString; var lLoc: Integer; var lStart: Integer): Integer;safecall;
然后在指定他的属性
GrabProxy1.GrabInterval := 1;//指定抓取时间间隔
self.GrabProxy1.GrabMode := XDictGrabMouse;//模式(鼠标是否加按键)
self.GrabProxy1.GrabEnabled := true;//是否有效
self.GrabProxy1.AdviseGrab(self);//接口指向自身
然后就是屏幕取词方法的实现
function TForm1.QueryWord(const WordString: WideString; lCursorX,
lCursorY: Integer; const SentenceString: WideString; var lLoc,
lStart: Integer): Integer;
begin
//Label1是当前鼠标的位置,Lcursorx,LCursorY表示鼠标的位置
Label1.Caption := '(' + inttostr(lCursorX) + ',' +inttostr(lCursorY) + ')';
//Label2是当前鼠标指向的位置的字符串,保留在(SentenceString)中
Label2.Caption := '当前语句:' + SentenceString ;
//Lloc鼠标在语句中的位置 ,label3得到当前字符串
Label3.Caption := '当前字符:' + Midstr(SentenceString,lloc+1,1);
end;
方法二:不使用控件,通过使用createOleObject(str)函数来实现动态创建该取词对象
同样引用OleServer, XDICTGRB_TLB两个单元,然后
TForm1 = class(TForm)改成
TForm1 = class(TForm,IXDictGrabSink),并且实现IXDictGrabSink接口中的方法的声明
之后声明变量Gp: variant;
在窗体的Show中写代码如下:
procedure TForm1.FormShow(Sender: TObject);
var
i: IXDictGrabSink;
begin
//声明一个接口变量,然后把自己赋给该变量以便后面的方法调用接口
i := self;
//创建对象
gp := CreateOleObject('XdictGrb.GrabProxy');
//指定属性
gp.GrabEnabled := true;
gp.GrabInterval := 1;
gp.GrabMode := XDictGrabMouse;
gp.AdviseGrab(i);
end;
然后实现接口的取词方法。
注意:在窗体的Close事件中要写上 gp := 0;将创建的取词对象释放掉,否则窗体关闭的时候会出错哦!
分享到:
相关推荐
C#利用 金山词霸 组件XdictGrb.dll 实现屏幕取词
金山词霸中带了一个XdictGrb.dll,利用它可以实现鼠标取词。
C#利用金山词霸的xdictgrb.dll实现鼠标取词
VB 屏幕取词 使用XdictGrb.dll实现 代码来自于东方之珠兄,谢谢!
整理出来一份好用的测试代码跟朋友们分享下下^_^ 简单的利用XdictGrb.dll实现得到鼠标下的文字的功能,有词源的话自己可以写个词霸试试了哦
金山词霸中2005中带了一个XdictGrb.dll,其实是一个COM组件,并且实现了一个取词的插件框架。 http://hi.baidu.com/ykhykh/blog/item/8ebecb119214f112b9127ba5.html 教程。
金山词霸中2005中带了一个XdictGrb.dll,其实是一个COM组件,并且实现了一个取词的插件框架。 http://hi.baidu.com/ykhykh/blog/item/8ebecb119214f112b9127ba5.html 教程。
金山词霸2005桌面跳动最佳答案 你的系统是... 金山词霸2005在xp系统sp2下屏幕取词出现桌面闪烁的现象。现在,只要您点击下载 将下载的文件xdictgrb.dll替换词霸安装目录下的同名文件即可轻松解决这个问题。
金山词霸中2005中带了一个XdictGrb.dll,其实是一个COM组件,并且实现了一个取词的插件框架。 http://hi.baidu.com/ykhykh/blog/item/8ebecb119214f112b9127ba5.html 教程。
金山词霸中2005中带了一个XdictGrb.dll,其实是一个COM组件,并且实现了一个取词的插件框架,是出了名的难找,亲测可用,用于.net中划词翻译的开发.
金山词霸的XdictGrb.dll,可用于屏幕取词
C# 利用金山词霸 取词的例子 自带XdictGrb.dll VS2005可以删掉solution文件,直接打开project文件
如题,金山词霸太差劲,官方网站也不提供这个05的下载了,估计他们是准备抛弃05了,这个词典业绩吧更新。nnd
金山词霸XdictGrb.dll的使用,网上有很多示例,可就是改写VFP不成功。 研究了很久,后面只能借道使用VB封装一下终于可以使用了。 (山不过来,我过去。) 现在用在我的系统中,还不错。
DELPHI调用金山词霸DLL,屏幕取词,适合WIN7及以前系统。
金山词霸闪屏补丁XDictGrb.dll 覆盖安装目录中的同名文件即可解决在XP中闪屏的现像
利用金山的XdictGrb.dll实现屏幕取词。xdictgrb_tlb单元可自行在delphi中生成。
C#写的程序实现鼠标取词/屏幕取词使用金山词霸XdictGrb.dll
你的系统是XP SP2吧,你再装一次金山词霸,完成后不要点立即运行,到金山主页下载xdictgrb.dll替换词霸安装目录下的同名文件即可轻松解决这个问题
利用金山词霸控件XdictGrb.dll实现的屏幕取词软件源码