Открыть текстовый документ в режиме только для чтения
Я использую автоматизацию для открытия документов в Word. Иногда мне нужно открыть документ в режиме чтения ON:
var
WordDocument: _Document;
WA: TWordApplication;
begin
WA := TWordApplication.Create( nil );
WA.OnQuit := DocumentClose;
WA.Connect;
WordDocument := Wa.Documents.Open( FileName, EmptyParam, true {ReadOnly}, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam );
Но пользователь может отключить режим чтения в открытом документе:
Как я могу справиться с этим в OnQuit
событие в процедуре DocumentClose
? В DocumentClose
Я хочу знать, находится ли документ в режиме чтения или нет.
У меня нет никакого решения, потому что у меня не было достаточно опыта с ним. Итак, мне нужны ваши предложения, советы по этому поводу. Извините за мой английский, и если мне нужно добавить больше информации, пожалуйста, дайте мне знать. Спасибо
ОБНОВИТЬ
Я пытался прочитать тип защиты, но он всегда возвращает первый случай. Таким образом, когда документ открывается как ReadOnly, он не защищен как wdAllowOnlyReading. Некоторые документы могут быть защищены паролем, но с этим проблем нет.
const
wdAllowOnlyReading: Longword = $00000003;
wdNoProtection: Longword = $ffffffff;
var
ProtectionType: TOleEnum;
begin
ProtectionType := WordDocument.ProtectionType;
case ProtectionType of
wdNoProtection : Showmessage('NoProtection');
wdAllowOnlyReading: Showmessage('ReadOnly');
end;
end;
1 ответ
Я не уверен , что именно вы подразумеваете под "ReadOnly".
WordDocument имеет ReadOnly
логическое свойство, которое доступно только для чтения в том смысле, что вы можете читать его значение, но не устанавливать его. Это свойство возвращает значение true, если, когда документ был открыт, он уже был открыт, например, на другой рабочей станции, чтобы пользователь получил приглашение "Этот документ заблокирован для редактирования..." и спросил, открывать ли документ в режиме чтения. только режим или должен ли Word открыть копию вместо этого.
Другой смысл, в котором документ Word может быть "только для чтения", заключается в том, что использованный пользователь пометил его как "Окончательный", нажав кнопку Word (которая ведет к меню "Файл" и т. Д.) И перешел к Prepare | Mark as Final
(в "Ленточных" версиях MS Word).
Чтобы прочитать эти свойства в коде, вы можете сделать, например,
if WordDoc.Final then
Caption := 'Final'
else
Caption := 'not Final';
if WordDoc.ReadOnly then
Caption := Caption + ' Read only'
else
Caption := Caption + ' Read/write'
Примечание: Final
свойство не раскрывается в Delphi Word2000.Pas, поэтому для его использования необходимо перейти от раннего связывания к позднему связыванию, например так:
var vWordDoc : OleVariant;
[...]
vWordDoc := WordDoc;
if vWordDoc.Final then
[...]
в отличие от ReadOnly
свойство, вы можете переключать Final
собственность просто
WordDoc.Final := not WordDoc.Final
Но можете ли вы сделать это успешно, когда WordDoc.ReadOnly
является True
зависит от того, почему WordDoc.ReadOnly
является True
,
Если WordDoc.ReadOnly
является True
потому что документ был заблокирован для редактирования, когда он был открыт, потому что он уже был открыт на другой рабочей станции, WordDoc.Final
только для чтения. Ото, если это True
потому что вы указали ReadOnly
в вызове.Open(), то вам нужно остерегаться: затем вы можете установить Final
в False
и тогда пользователь сможет редактировать документ, несмотря на то, что он был открыт ReadOnly
!
Другое осложнение заключается в том, что ProtectionType
не имеет прямого отношения к "ReadOnly", как я полагаю, вы собрались: он может, но не обязательно, предотвращать редактирование, за исключением определенных областей документа.