关于用delphi开发一个硬盘搜索软件(用Google desktop API)(100分)

  • 主题发起人 主题发起人 happymanfreeman
  • 开始时间 开始时间
H

happymanfreeman

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手: 新年好!

我想用delphi开发一个硬盘搜索软件,用Google desktop API把Google的桌面搜索功能集成到自己的软件中,软件的主要功能如下:


1. 软件能对指定的硬盘文件或全部硬盘文件编制索引(或随时取消索引)。

2. 软件能对硬盘中指定的文件夹中的文件进行全文搜索,或对全部硬盘文件进行全文搜索。

3. 显示搜索结果时,能以文件名列表的形式或以网页形式(文件名加摘要)显示。

4. 结果中以某种颜色显示关键词。

各位高手,关于用delphi进行Google desktop API硬盘搜索开发的示例代码很少,一些示例都没有给出上述问题的具体代码,请个位高手协助!!我把自己所有的分全部给大家,可惜我的总分很少,请大家不要介意。
 
帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯
 
难道无人知道?
 
抱歉,我不懂c++builder~~~~
 
打开后发送一个消息,或取得打开WORD后的句柄...C+B没用过...
 
请大家认真看我上面的code
my_docs.OleFunction("Open", "C://Documents and Settings//wd//桌面//4.doc",false ,false ,false ," " ," " ,true ," " ," " ," " , " " ,true );
为打开显示文档
my_docs.OleFunction("Open", "C://Documents and Settings//wd//桌面//4.doc",false ,false ,false ," " ," " ,true ," " ," " ," " , " " ,false )
为打开不显示文档
当参数设为false时,打开一个文档但不显示?? 还是根本不打开??
 
C的语法都还给老师了:)我用delphi的东东儿给你写两句,你看看罢:)
Server控件面板应该有罢?delphi是自动引入了office的类型库(typelibrary),C++builder也同样,其基本原理COM之类的东东儿就不必讲了
function OpenWordDocument(fName:olevariant):Boolean;//打开文档的全路径名
var wordApp:TWordApplication;
wordDocument:TWordDocument;
pramOption:OleVariant;
begin
pramOption:=EmptyParam;//VBA里面的变量
try
wordApp:=TWordApplication.create();
wordApp.Connect();//获取word的控制权
wordApp.Documents.Open(fName,p,p,p,p...)//Word版本不一致,参数数目不一致,具体可以参考VBA里面的东东儿
wordDocument.Connectto(wordApp.ActiveDocument);//获取当前活动文档的控制权(句柄)
.......//针对该文档的操作
wordApp.visible:=true;//显示word文档,不添加该语句,则word不显示,即为后台操作
Result:=true;
except
Result:=false;
...//error Message
end;
wordApp.DisConnect;

end;
因本机没有安装delphi,所以个别代码可能有些个错误,请包涵了:)
 
c++和Delphi虽然语法不同,
但是如果在C++builder下的话,
可能差不多
两种方法
1:用控件(例如:TWordApplication,)
var
vWord : TWordApplication;
vWordDocument : TWordDocument;
begin
vWord := TWordApplication.Create(App.Owner);
vWord.ConnectKind := ckNewInstance;
vWord.Options.CheckSpellingAsYouType := False;
vWord.Options.CheckGrammarAsYouType := False;
vWord.Visible := False;
vWord.AutoQuit := True;
vWord.Connect;
oleFilePath := filePath;
oleReadOnly := False;
oleIndex := 1;
vWord.Documents.Open(oleFilePath,EmptyParam,oleReadOnly,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam);
vWordDocument := TWordDocument.Create(App.Owner);
vWordDocument.ConnectTo(vWord.Documents.Item(oleIndex));
2:用Ole
var
wrdApp: Variant;
begin
try
picName := '';
intGCount := 0;
wrdApp := GetActiveOleObject('Word.Application');
except
try
wrdApp := CreateOleObject('Word.Application');
except
MessageDlg('Please Install Word', mtInformation, [mbOk], 0);
result := false;
wrdApp := Unassigned;
end;
end;
end;
 
vWord.Documents.Open(oleFilePath,EmptyParam,oleReadOnly,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,false);
最后一个参数为false表示什么意思?我试过了,如果为true则正常打开文档,如果是
false则以隐藏的方式打开文档??隐藏的方式??我试过了,根本没有打开,spy++
根本找不到什么相应的窗口句柄,大家试试!!
那么,到底这样才能以隐藏不显示的方式打开word文档(不是先打开然后隐藏!!)???
 
晕,那句visible:=true不加上就不显示了,显示与否跟documents集合对象有什么关系?
 
wolf1860:
visible:=true不加上,那么就是visible:=false,此时确实不显示,但根本没有打开word文档,spy++根本找不到相应的word文档的窗口及其句柄,大家试试!
请你认真看看我提出的问题吗!
此时
vWord.Documents.Open(oleFilePath,EmptyParam,oleReadOnly,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam, EmptyParam,EmptyParam,false);
oleFilePath为word文档的全名。
这种情况我试过了,根本没有打开,spy++根本找不到相应的word文档的窗口及其句柄,大家试试!!如果为true则正常打开文档。到底这样才能以隐藏不显示的方式打开word文档(不是先打开然后隐藏!!)???
 
To happymanfreeman,
我的QQ:82780254
你的QQ ?
 
偶装的是Word2000,测试木有问题。弹出ShowMessage消息框时word文件已经被打开了

uses Word2000, OleServer;

procedure TForm1.Button1Click(Sender: TObject);
var
vWord : TWordApplication;
vWordDocument : TWordDocument;
vFileName,
vReadOnly,
vIndex: OleVariant;
begin
if not OpenDialog1.Execute then Exit;
vWord := TWordApplication.Create(Self);
vWordDocument := TWordDocument.Create(Self);
try
vWord.ConnectKind := ckNewInstance;
vWord.Options.CheckSpellingAsYouType := False;
vWord.Options.CheckGrammarAsYouType := False;
vWord.Visible := False;
vWord.AutoQuit := True;
vWord.Connect;
vFileName := OpenDialog1.FileName;
vReadOnly := False;
vIndex := 1;
vWord.Documents.Open(vFileName,EmptyParam,vReadOnly,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam);
vWordDocument.ConnectTo(vWord.Documents.Item(vIndex));
ShowMessage(vWordDocument.Path + ': OK');
finally
vWord.Free;
vWordDocument.Free;
end;
end;
 
lichengbin:
你说的是对的,但你误解我意思了!!我想开发的软件是这样的,用户已经用普通方法打开了几个word文档,再在我的软件的按钮上按一下,打开一个对话框,再打开硬盘上另外一个word文档,这个打开过程必须先隐藏,然后获取打开的文档窗口句柄,再把此隐藏文档移动到我软件界面的特定位置显示出来,并且要求此过程不影响原先用户用普通方法打开的几个文档。
lichengbin,你的方法不行啊! 因为你先设置vWord.Visible := False;这样用户原先用普通方法打开的几个文档都隐藏了,假如等一下你又设置 vWord.Visible := true 用户原先用普通方法打开的几个文档又显示出来,这样开发出来的软件就不象样了!!
 
老人家:你好!
真抱歉,我从来没有聊过天,还是在此交流吧,我想看看你的高见!!
 
To happymanfreeman,
这和Word版本,也就是VBA版本有关系,不知道你的VBA版本(也就是Word版本)是多少?
 
用隐藏的方式打开一个word文档,并且不影响原先打开的几个word文档,怎么办啊!!!
 
老人家:word2000
 
这是word2003 的帮助,我没有word2000 你看看你的 VBAWD*.CHM吧

Open 方法
参阅应用于示例特性应用于 Documents 对象的 Open 方法。

打开指定的文档并将其添加至 Documents 集合。返回一个 Document 对象。

安全性 请避免在应用程序中使用硬编码的密码。如果过程中要求输入密码,请从用户处请求密码,并将密码作为变量存储起来,然后在代码中使用该变量。有关如何做到这一点的建议最佳操作,请参阅 Microsoft Office 解决方案开发人员安全注意事项。

expression.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible, OpenConflictDocument, OpenAndRepair, DocumentDirection, NoEncodingDialog)
expression 必需。该表达式返回一个 Documents 对象。

FileName Variant 类型,必需。文档名(可包含路径)。

ConfirmConversions Variant 类型,可选。该属性为 True 时,如果文件不是 Microsoft Word 格式,则显示“文件转换”对话框。

ReadOnly Variant 类型,可选。如果为 True,则以只读方式打开文档。注意 本参数不会覆盖保存的文档的只读建议设置。例如,如果文档在启用只读建议设置情况下保存,将 ReadOnly 参数设为 False,也不会导致以可读写方式打开文件。

AddToRecentFiles Variant 类型,可选。如果为 True,则会将文件名添加至“文件”菜单底部的最近使用过的文件列表中。

PasswordDocument Variant 类型,可选。打开此文档时所需的密码。

PasswordTemplate Variant 类型,可选。打开此模板时所需的密码。

Revert Variant 类型,可选。当 FileName 是一个已打开的文档的文件名时,控制相应的操作。如果为 True,则放弃对已打开文档进行的所有尚未保存的改动,并将重新打开该文档。如果为 False,则激活已打开的文档。

WritePasswordDocument Variant 类型,可选。保存对文档进行的更改时所需的密码。

WritePasswordTemplate Variant 类型,可选。保存对模板进行的更改时所需的密码。

Format Variant 类型,可选。打开文档时使用的文件转换器。可以是下列 WdOpenFormat 常量之一。

WdOpenFormat 可以是下列 WdOpenFormat 常量之一:
wdOpenFormatAllWord
wdOpenFormatAuto 默认值。
wdOpenFormatDocument
wdOpenFormatEncodedText
wdOpenFormatRTF
wdOpenFormatTemplate
wdOpenFormatText
wdOpenFormatUnicodeText
wdOpenFormatWebPages

若要指定外部文件格式,请将 OpenFormat 属性应用于 FileConverter 对象,以便确定要用于此参数的值。

Encoding Variant 类型,可选。在查看保存的文档时,Microsoft Word 所使用的文档编码(代码页或字符集)。可以是任何有效的 MsoEncoding 常量。有关有效的 MsoEncoding 常量的列表的详细信息,请参阅“Visual Basic 编辑器”的“对象浏览器”。默认值是系统代码页。

Visible Variant 类型,可选。如果为 True,则在可见窗口中打开文档。默认值为 True。

OpenConflictDocument Variant 类型,可选。指定是否脱机操作打开文档的冲突文件。

OpenAndRepair Variant 类型,可选。如果为 True,则修复文档,以防止文档毁坏。

DocumentDirection WdDocumentDirection,可选。代表文档中的横排文字。

WdDocumentDirection 可以是下列 WdDocumentDirection 常量之一:
wdLeftToRight 默认值
wdRightToLeft

NoEncodingDialog Variant 类型,可选。如果为 True,则跳过显示“编码”对话框,如果文字编码不能识别,Word 就会显示该对话框。默认值是 False。
 
问题在于:
vWord.Documents.Open(vFileName,EmptyParam,vReadOnly,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
false);
最后一个参数设为false代表什么意思?是以隐藏的方式打开文档吗??隐藏的方式??我试过了,根本没有打开,此时spy++根本找不到什么相应的窗口句柄,大家试试!!如果为true则正常打开文档,word2000的VBA帮助文档说明是这样的:
expression.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible)

其中Visible Variant 类型,可选。如果此值为 True,则在可见窗口中打开文档。
默认值为 True。
如果此值为 false呢? 没有说明!!!大家可以试试。我试过了,根本没有打开什么(没有执行什么),此时spy++根本找不到什么相应的窗口句柄,大家试试!!如果为true则正常打开文档。
 
后退
顶部