2011. február 28., hétfő
Work with MS Word DisplayAlerts
Problem/Question/Abstract:
I have the following code:
MsWord.DisplayAlerts := wdAlertsNone;
MsWord.ScreenUpdating := False;
WordDoc := MsWord.Documents.Add(Template, False);
When the file referenced by "Template" is already in use by another document, I will still get a "File in use" dialog (which is bad enough as it is only a template. It shouldn't be opened for editing anyway. But Documents.Add does this by default: there is no readonly option). Isn't DisplayAlerts supposed to supress this dialog?
Answer:
You can check the file yourself before passing it off to Word (not tested with Office 11):
{ ... }
uses
ComObj, ActiveX, Word2000;
type
TStorageResult = (srNotOpen, srOpen, srNotStorageFile, srFileNotFound,
srNotOpenButNotWordDocument, srNotOpenButUnsureWordDocument);
function CheckWordDocument(const AWordDocument: WideString): TStorageResult;
var
vResult: HRESULT;
vStatStg: TSTATSTG;
oStorage: IStorage;
begin
Result := srOpen;
if FileExists(AWordDocument) then
begin
if StgIsStorageFile(PWideChar(AWordDocument)) = S_OK then
{Must check for S_OK...cannot use Succeeded().}
begin
vResult := StgOpenStorage(PWideChar(AWordDocument), nil, STGM_SHARE_EXCLUSIVE
or STGM_READWRITE, nil, 0, oStorage);
if Succeeded(vResult) then
begin
Result := srNotOpen;
if oStorage.Stat(vStatStg, 0) = S_OK then
begin
if not IsEqualCLSID(CLASS_WordDocument, vStatStg.clsid) then
Result := srNotOpenButNotWordDocument;
end
else
Result := srNotOpenButUnsureWordDocument;
oStorage := nil;
end;
end
else
Result := srNotStorageFile;
end
else
Result := srFileNotFound;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
vStorageResult: TStorageResult;
begin
vStorageResult := CheckWordDocument('C:\Your.doc');
case vStorageResult of
srNotOpen:
ShowMessage('The document is not open.');
srOpen:
ShowMessage('The document is open.');
srNotStorageFile:
ShowMessage('The document is not a storage document.');
srFileNotFound:
ShowMessage('The document was not found.');
srNotOpenButNotWordDocument:
ShowMessage('The document is not open, but it is not a Word document.');
srNotOpenButUnsureWordDocument:
ShowMessage('The document is not open, but it does not look like a Word document.');
end;
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése