请教,在delphi中调用word,当你关闭了word之后,word会提示你要不要保存修改了的文档,怎么判断用户是点了保存还是不保存?请知道的一定帮帮我。
解决方案 »
- Cxgird adoquery的locktype设置为ItBatchoptimistic后?
- DBGrideh的列排序
- 为阿日饯行,走就走吧,搞技术很难混的
- 大家帮忙翻译一下:c++的一个函数→delphi
- 小错误, 如何解决?
- 用delphi编写iec101和iec104从站
- delphi怎么转HTML的转译字符?
- LoadFromResourceName()这个函数该怎么用,我已经看过帮助了,只是不晓得怎么具体用
- Rmb请朋友做个邮件收发系统!
- 问题!如何把ListBox中选中的项目删除掉?!!!!!
- 文件拷贝问题?
- delphi 中的button 为什么不支持icon,gif格式的文件,有什么办法或有什么控件有此功能的,望各位提供下意见!!?
procedure OnSaveFile(Sender: TObject; var Doc: OleVariant;
var SaveAsUI: OleVariant; var Cancel: OleVariant); //保存Word文档
procedure OnQuitWord(Sender: TObject);
procedure FormCreate(Sender: TObject); //关闭Word
private
{ Private declarations }
public
{ Public declarations }
end;
procedure OpenWord(aFileName,aFileType,aMemo:string;aDataSet:TDataSet);
function AddWord(aFileName,aFileType:string;aDataSet:TDataSet):String;
procedure SaveToDB(FileName: string;aDataSet:TDataSet); //保存到数据库中
function GetWinTempPath(): string; //获取临时目录var
Form1: TForm1;
WordObject: TWordApplication;
WordDoc: TWordDocument;
TempPath, Path, FileName, FileType: string;
FileFullName: OleVariant;implementation{$R *.dfm}function GetWinTempPath(): string; //获取临时目录
{$IFNDEF WIN32}
const Max_Path=144;
{$ENDIF}
var
TempPath: array[0..Max_Path] of Char;
begin
GetTempPath(SizeOf(TempPath), TempPath);
Result := StrPas(TempPath);
end;
procedure TForm1.OnQuitWord(Sender: TObject);
begin
//删除临时文件
// DeleteFile(FileFullName);
//控制主窗体
Application.MainForm.Show;
end;
procedure TForm1.OnSaveFile(Sender: TObject; var Doc: OleVariant;
var SaveAsUI: OleVariant; var Cancel: OleVariant); //保存Word文档
begin
//保存到临时文件夹中
WordDoc.Save;
//保存到数据库中
SaveToDB(FileFullName,AdoQuery1);
end;
procedure OpenWord(aFileName,aFileType,amemo:string;aDataSet:TDataSet);
var
OleWord: TOleContainer;
BlobStream: TStream;
Confirmconversions, ReadOnly, AddToRecentFiles: OleVariant;
PassWordDocument, PasswordTemplate, Revert, WritePasswordDocument: OleVariant;
WritePasswordTemplate, Format, Encoding, Visible: OleVariant; begin
FileName := Trim(aDataSet.FieldByName(aFileName).AsString);
FileType := LowerCase(Trim(aDataSet.FieldByName(aFileType).AsString));
FileFullName := TempPath+FileName+FileType;
//创建BLOB流
BlobStream := aDataSet.CreateBlobStream(aDataSet.FieldByName(aMemo), bmRead);
//读取BLOB流
OleWord := TOleContainer.Create(Application);
try
OleWord.Visible := False;
OleWord.Parent := Application.MainForm;
OleWord.LoadFromStream(BlobStream);
//存储到临时文件夹中或打开文件
if (FileType='.doc')or(FileType='.rtf')or(FileType='.gog') then //只能打开Doc,Rtf,Dot文档
begin
OleWord.SaveAsDocument(FileFullName);
OleWord.Free; //创建Word和Document
WordObject := TWordApplication.Create(Application);
WordDoc := TWordDocument.Create(Application);
//定制Word中的事件
WordObject.OnDocumentBeforeSave :=Form1.OnSaveFile;
WordObject.OnQuit :=Form1.OnQuitWord;
//设置打开参数
Confirmconversions := False;
ReadOnly := False;
AddToRecentFiles := False;
PassWordDocument := EmptyParam;
PasswordTemplate := EmptyParam;
Revert := False;
WritePasswordDocument := EmptyParam;
WritePasswordTemplate := EmptyParam;
Format := EmptyParam;
Encoding := EmptyParam;
Visible := True;
WordObject.Visible := True;
WordObject.Caption := '[可加入应用程序标题]'; //可加入应用程序标题 //控制主窗体
Application.MainForm.Hide; //打开和连接临时文件夹中的文档
try
WordObject.Documents.Open(FileFullName, Confirmconversions, ReadOnly,
AddToRecentFiles, PassWordDocument, PasswordTemplate, Revert,
WritePasswordDocument, WritePasswordTemplate, Format, Encoding, Visible);
WordDoc.ConnectTo(WordObject.ActiveDocument);
except
Application.MessageBox(Pchar('打开数据库中的文档错误,请与供应商联系!'),
'错误', MB_ICONERROR+MB_OK);
WordDoc.Close;
WordObject.Quit;
Application.MainForm.Show;
end;
end
else //打开非Doc,Rtf,Dot文档
begin
OleWord.DoVerb(ovPrimary);
end;
finally
BlobStream.Free;
end;
end;function AddWord(aFileName,aFileType:string;aDataSet:TDataSet):String;
var FileName, FileType: string;
Dialog:TOpenDialog;
begin
Dialog:=TOpenDialog.Create(Application);
if Dialog.Execute then
FileName := ExtractFileName(Dialog.FileName);
FileType := ExtractFileExt(Dialog.FileName);
FileName := Copy(FileName,1,Length(FileName)-Length(FileType));
try
//向数据库中插入数据
aDataSet.Insert;
aDataSet.FieldByName('DocName').AsString:=FileName ;
aDataSet.FieldByName('DocType').AsString:=FileType ;
aDataSet.Post;
//BLOB流保存到数据库中
SaveToDB(Dialog.FileName,aDataSet);
except
Application.MessageBox(Pchar('向数据库中插入数据错误!'), '错误',
MB_ICONERROR+MB_OK);
end;end;procedure SaveToDB(FileName: string;aDataSet:TDataSet); //保存到数据库中
var
BlobStream: TStream;
Ole: TOleContainer;
begin
aDataSet.Edit;
//创建BLOB流
BlobStream := aDataSet.CreateBlobStream(
aDataSet.FieldByName('Content'), bmReadWrite);
try
//移动到STREAM的首位
BlobStream.Seek(0, soFromBeginning);
//以OLE方式打开文件并保存到BLOB流中
Ole := TOleContainer.Create(Application);
try
Ole.Visible := False;
Ole.Parent := Application.MainForm;
Ole.CreateObjectFromFile(FileName, False);
Ole.SaveToStream(BlobStream);
finally
Ole.Free;
end;
//释放流
BlobStream.Free;
//保存
aDataSet.Post;
except
Application.MessageBox(Pchar('向数据库中写文件错误!'), '错误',
MB_ICONERROR+MB_OK);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var FileName, FileType: string;
Dialog:TOpenDialog;
begin
Dialog:=TOpenDialog.Create(Application);
if Dialog.Execute then
FileName := ExtractFileName(Dialog.FileName);
FileType := ExtractFileExt(Dialog.FileName);
FileName := Copy(FileName,1,Length(FileName)-Length(FileType));
ADOQuery1.Open;
AddWord('DOCNAME','DOCTYPE',ADOQuery1);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.Open;
ADOQuery1.Edit;
OpenWord( 'DOCNAME','DOCTYPE','Content',ADOQuery1);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
TempPath := GetWinTempPath();
Path := ExtractFilePath(Application.ExeName);
end;end.
你好!在执行到函数"OpenWord "的OleWord.LoadFromStream(BlobStream)处时出错:
out of memory!