怎么判断word文件是否修改?(100分)

  • 主题发起人 主题发起人 zhangyvping
  • 开始时间 开始时间
Z

zhangyvping

Unregistered / Unconfirmed
GUEST, unregistred user!
有delphi6的例程AutoImpl.pas 中的 TWordObject 打开WORD文件
但其判断文件是否修改不准确,一打开文件就认为有改动:
function TWordEventSink.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT;
begin
// Fire the different event handlers when
// the different event methods are invoked
case DispID of
2 : if Assigned(FOnQuit) then
FOnQuit(FOwner);
3 : begin //就是这里了
if Assigned(FOnDocumentChange) then
FOnDocumentChange(FOwner);
// When we see a document change, we also need to disconnect the
// sink from the old document, and hook it up to the new document
InterfaceDisconnect(FDocDispatch,FDocDispIntfIID,FDocConnection);
try
FDocDispatch := _Application(FAppDispatch).ActiveDocument;
InterfaceConnect(FDocDispatch,FDocDispIntfIID,Self,FDocConnection);
except;
end;
end;
4 : if Assigned(FOnNewDocument) then
FOnNewDocument(FOwner);
5 : if Assigned(FOnOpenDocument) then
FOnOpenDocument(FOwner);
6 : if Assigned(FOnCloseDocument) then
FOnCloseDocument(FOwner);
end;
Result := S_OK;
end;
 
我想你理解错了
Delphi的Demo里那个修改是指word当前编辑的文档变了,也就是指document换了另一个
而不是指document中的内容被修改

如果你想判断内容是否被修改.....我建议你用ole对象来判断(因为我不会interface ^_^):
word:=createoleobject('word.application');
if word.ActiveDocument.Saved then
begin
...
end;
 
我加入了 OnSaveDocument 事件,但不知道 DispID 的值为多少时,激发SAVE事件
? : if Assigned(FOnSaveDocument) then
FOnSaveDocument(FOwner);
 
经过试验:1,7, 8,9,10,11,12
确定是: 12
OK!
 
接受答案了.
 
后退
顶部