高分请教:如何不使用TOleContainer控件作为容器,完成WORD的嵌入式显示和控制。(200分)

  • 主题发起人 jiansheyou
  • 开始时间
J

jiansheyou

Unregistered / Unconfirmed
GUEST, unregistred user!
最近一个项目。领导要求制作一个办公自动化软件,其中很重要的一个部分就是对WORD的操控,具体要求如下:Delphi中的一个窗体作为打开或新建WORD文档的容器,要求能够象通过WORD应用程序一样操作WORD文档(即,从外观上看是给WORD加上了Parent或容器,但要具有所有的菜单和工具条等,就象在IE中打开一个WORD文挡一样,不知我说清楚了吗?)。请不要说使用TOleContainer的办法,我试了外观(菜单,工具栏都不行)和功能上不满足,而且有错误。
1、可以介绍一个容器控件,最好能有一点用法;
2、如果能编程实现,那最好有实例和代码;
非常感谢!分数不够可以再加。
 
用WebBrowser也同样可以将Word融入系统中。[8D]WebBrowser.Navigate('c:/a.doc');
WebBrowser.go('c:/a.doc');
由于WebBrowser释放连接文件不太方便,所以建议在程序中动态创建WebBrowser,在需要释放它控制的文件的地方Free,在需要链接文件的地方创建它。我在系统中已经用过了,由于WebBrowser跟OLEContainer一样不好直接控制里面的内容,所以专门用OLE写了个空间来对文件进行读写等操作。
 
用HtmlEdit控件,比较不错,盒子上有,且有源码
 
用 TOleContainer 除了没有word的文件菜单外, 其他和word没有差别啊
 
(一) 加入DDE客户端组件

新建一App工程WordDDE,然后在Component
Palette组件条的System属性页里选择DdeClientConv组件,并把它拖放到窗体上。修改其Name 属性为DDEClient。

(二) 添加同DDE服务进行交互的代码

在工程上添加一个过程RunMacro,用于打开同Word服务器的链接,并通知服务器执行由Macro标识的宏命令,让Word按用户的意图完成响应的动作。完成之后由客户方断开这次连接,完成一次会话。下面是上述过程的实现代码:


procedure TForm1.RunMacro(Macro:pChar);
var pMacro:array[0..80] of Char;
begin
DDEClient.SetLink('Winword','System');{设置连接}
DDEClient.OpenLink;{按设置打开连接}
StrPCopy(pMacro,Macro);
if Not DDEClient.ExecuteMacro(pMacro,false) then{执行宏命令}
ShowMessage('Unable to Execute Macro');
DDEClient.CloseLink;{断开连接}
end;

(三) 宏命令的执行

宏(Macro)是客户程序要服务器完成的一些操作指令,对与特定的Microsoft Word
而言无非是些打开文件、插入分割符、复制粘贴字符等一些字处理方面的宏命令,这些宏命令完成的功能大多在Word的菜单下都能找到与之相匹配的菜单。如"关闭文件"菜单完成的功能就可以通过宏[FileClose]来完成。可以向窗口添加一个按钮或是菜单然后在其处理函数中添加执行宏的代码如下:

procedure TForm1.N2Click(Sender: TObject);
begin
RunMacro('[FileNew]');{让Word创建一个新文件,宏[FileNew]由函数RunMacro通知Word}
end;

Word下有许多可供传送执行的宏命令,现将一些常用的宏罗列如下,以备实际编程时选用:

[FileNew] …… 创建新文件
[FileClose] …… 关闭文件
[FileSave] …… 保存文件
[FilePrint] …… 打印文件
[FileExit] …… 退出Word
[File1] …… 打开最近打开的文件,相应还有[File2]、[File3]等等
[EditCut] …… 剪切操作
[EditCopy] …… 复制操作
[EditPaste] …… 粘贴操作
[EditUndo] …… 恢复上一步
[EditRedo] …… 重做上一步
[EditClear] …… 清除操作
[EditSelectAll] …… 全选操作
[ViewNormal] …… 正常视图
[ViewPage] …… 页面视图
[ViewOutLine] …… 大纲视图
[InsertBreak] …… 插入分割符
[InsertIndex] …… 插入索引
[FormatNumber] …… 格式化项目符号和编号
[ToolsOptions] …… 工具的选项
[TableInsertTable] …… 插入表格
[TableInsertRow] …… 插入行
[TableDeleteRow] …… 删除行
[TableSplit] …… 拆分表格
[TableSelectRow] …… 选择行
[TableSelectColumn] …… 选择列
[TableSelectTable] …… 选择表格
[TableSort] …… 排序
[WindowNewWindow] …… 新建窗口
[Window1] …… 最近打开的窗口,响应还有[Window2]、[Window3]等等
[HelpIndex] …… 帮助的索引
[HelpAbout] …… 帮助的关于
 
问题会很多,江西金格是用TOLEContainer做的,但是他们对这个类改了很多东西。考虑清楚哦。
 
用webbrowser最好 不过你要控制word进程 需要的时候启动 不需要的时候Kill
1.打开用WebBrowser1.navigate...
2.操作word对象
word对象.ConnectTo( Form含有WB那个.WebBrowser1.Document as WORD具体什么名忘了 );
你的操作...
word对象.Disconnect;
3.Kill WORD进程

以上是花费数月得到经验
 
直接用WORD对象 或者 通过OLE容器的 都行不通的
试试你就知道
 

Similar threads

回复
0
查看
520
不得闲
D
回复
0
查看
676
DelphiTeacher的专栏
D
D
回复
0
查看
689
DelphiTeacher的专栏
D
顶部