一、Delphi程序启动Word
采用CreateOleObjects的方法来启动Word,调用VBA代码,具体实现过程为:
首先使用GetActiveOleObject( 'Word.Application ')判断当前内存中是否存在Word程序,如果存在,
则直接连接,如果没有Word程序,则使用CreateOleObject( 'Word.Application ')启动Word
二、Delphi程序新建Word文稿
格式:WordDocuments.Add(Template,NewTemplate,DocumentType,Visible)
Template: 使用模板的名称,
NewTemplate: 新建文档的类型,True表示为模板,False表示为文档
DocumentType: 文档类型,默认为空白文档
Visible: 打捞的窗口是否可见
举例:Doc_Handle:=Word_Ole.Documents.Add(Template:= 'C:\Temlate.dot ',NewTemplate:=False);
三、Delphi程序打开Word文稿
格式:WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemplate,
Format,Encoding,Visible)
FileName: 文档名(包含路径)
Confirmconversions: 是否显示文件转换对话框
ReadOnly: 是否以只读方式打开文档
AddToRecentFiles: 是否将文件添加到 "文件 "菜单底部的最近使用文件列表中
PassWordDocument: 打开此文档时所需要的密码
PasswordTemplate: 打开此模板时所需要的密码
Revert: 如果文档已经,是否重新打开文档
WritePasswordDocument: 保存对文档更改时所需要的密码
WritePasswordTemplate: 保存对模板进行更改时所需要的密码
Format: 打开文档时所需使用的文件转换器
Encoding: 所使用的文档代码页
Visible: 打开文档的窗口是否可见
举例:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=False);
四、Delphi程序保存Word文稿
格式:WordDocuments.SaveAs(FileName, FileFormat, LockComments, Password, AddToRecentFiles, WritePassword, ReadOnlyRecommended,
EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData,
SaveAsAOCELetter)
FileName: 文件名。默认为当前文件夹和文件名。 FileFormat 文档保存的格式。
LockComments 如果为 True,则此文档只允许进行批注。
Password 打开文档时的口令。
AddToRecentFiles 如果为True,则将
SendMessage(对方句柄,消息,消息附带短变量,消息附带长变量)
七、Delphi程序接收消息的方法<
Delphi接收消息有两种,一是重载特定消息,二是重载WndProc函数,在里面选择相应消息进行处理。
法一,每次只能处理一条消息,而法二能够同时处理多条消息。
对于法二,声明如下:
procedure WndProc(var Message: TMessage);override
必须注意,使用时需要在处理完自己消息处理后继承WndProc(Message)函数,否则系统会崩溃!
八、Word中Combo对话框的动态生成以及Change事件
建立类模块Combohander,在内部定义事件
Public WithEvents ComboBoxEvent As Office.CommandBarComboBox
定义Combo控件产生事件的模块
Dim ctlComboBoxHandler As New ComboBoxHandler
产生Combo对话框
Set Cbo_ChooseDoc = CommandBars( "添加的菜单 ").Controls.Add(Type:=msoControlComboBox, Temporary:=True)
进行文件句柄设置,以产生Combo_Change事件
Set ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc
产生事件后,在类模块Combohander内选择ComboBoxEvent的Change事件,即可书写事件代码
Sub ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)
九、一些Word的事件
VBA代码中处理的Word事件有:Document_Close
Application事件中需要处理的有:DocumentBeforeClose,DocumentChange。
Document_Close:事件在文档关闭时产生事件
DocumentBeforeClose:在文档被关闭以前先于Word判断文档是否保存,给出相应提示并进行相应处理。
DocumentChange:文档切换,在文档从自己修改的文稿和其他人修改的文稿之间切换产生事件,
主要处理设置文档权限等。
实例代码:
if WordApp.Visible=false then //运行Word,并新建一文档
WordApp.Visible:=true;
filename:= ' ';
tempboolean:=false;
WordApp.Documents.Add(filename,tempboolean);
if wordtype.radiogroup1.ItemIndex=0 then
WordApp.ActiveDocument.PageSetup.Orientation:=wdOrientLandscape;//将纸张调为横向
with WordApp.Selection do//将标题写入Word文档
begin
Paragraphs.Alignment:=1;
Font.Size:=20;
Font.Bold:=1;
TypeText(panel12.Caption);
end;
with WordApp.Selection do//将各参数还原
begin
TypeText(#13);
Paragraphs.Alignment:=0;
Font.Size:=11;
Font.Bold:=0;
end;
for i:=0 to rect_num-1 do //将矩形对应的模块(文字、图、表)写入Word文档
begin
temptext:=copy(Word_Text[i],1,pos( '_ ',Word_Text[i])-1);
if temptext= '文字材料 ' then
begin
pathname:=extractfilepath(application.ExeName)+ 'Text\ ';
temptext:=copy(Word_Text[i],pos( '_ ',Word_Text[i])+1,length(Word_Text[i]));
filename:=pathname+temptext+ '.txt ';
range:= ' ';
confirm:=false;
link:=false;
attachment:=false;
WordApp.Selection.TypeParagraph;
WordApp.Selection.InsertFile(filename,range,confirm,link,attachment);
end;
if temptext= '统计分析表 ' then
begin
pathname:=extractfilepath(application.ExeName)+ 'Tables\ ';
temptext:=copy(Word_Text[i],pos( '_ ',Word_Text[i])+1,length(Word_Text[i]));
filename:=pathname+temptext+ '.htm ';
range:= ' ';
confirm:=false;
link:=false;
attachment:=false;
start:=WordApp.Selection.Get_Start;
WordApp.Selection.InsertFile(filename,range,confirm,link,attachment);
endof:= WordApp.Selection.Get_Start;
WordApp.ActiveDocument.Range(start,endof).select;
WordApp.Selection.Font.Name:= '宋体 ';
WordApp.Selection.Font.Size:=9;
WordApp.Selection.Set_Start(endof);
end;
if temptext= '统计分析图 ' then
begin
pathname:=extractfilepath(application.ExeName)+ 'StatBmp\ ';
temptext:=copy(Word_Text[i],pos( '_ ',Word_Text[i])+1,length(Word_Text[i]));
filename:=pathname+temptext+ '.bmp ';
start:=WordApp.Selection.Range;
withfilesave:=true;
wordApp.Selection.TypeText( ' ');
WordApp.Selection.Paragraphs.Alignment:=1;
WordApp.Selection.InlineShapes.AddPicture(filename,attachment,withfilesave,start);
end;
end;
WordApp.Disconnect;
end;