|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Подскажите по OLE+WordXP
Помогите плз разобраться. У меня есть програмка (на Delphi, это не принципиально) которая выбрасывает в Word документы и открывает их юзеру для правки (с помощью компоненты Word97). Все работало под NT4 и Win2000 без проблем. Под XP+OfficeXP тоже все работает, но перед открытием Word выдает сообщение "Неправельно указана единица измерения", а потом нормально открывает документ. Если Word уже открыт, то сообщение не выдает и сразу открывает документ. Т.е. прога работает, но юзеры пугаются окошка с сообщением и его нужно убрать
WordApp:=TWordApplication.Create(nil); WordApp.Connect; WordApp.Documents.Add(TemlateFileName,EmptyParam); ... ... - здесь заполняю документ в WrdApp.ActiveDocument ... WordApp.Visible:=True; WordApp.Activate; - здесь выдается сообщение, но Word нормально запускается WordApp.Disconnect; WordApp.Free; Пробовал: 1)вместо компоненты Word97 брал Word2000 и WordXP 2)устанавливал WordApp.DisplayAlerts:=wdAlertsNone 3)менял WordApp.Options.MeasurementUnit Без результата. Сообщение выдается при отработке WordApp.Activate, ждет нажатия на ОК и потом все нормально работает. Для пробы поставил WordApp.Activate сразу после WordApp.Connect и все равно при отработке Activate (до добавления документа) Word выдает сообщение Подскажите плз: о какой единице он говорит и как убрать сообщение? |
#2
|
|||
|
|||
implementation
uses ComObj; var W:variant; //Открываем Word Код:
Function CreateWord:boolean; begin CreateWord:=true; try W:=CreateOleObject('Word.Application'); except CreateWord:=false; end; End; //Функция для видимости Word(false-не показывать, ну и true - показать) Код:
Function VisibleWord(visible:boolean):boolean; begin VisibleWord:=true; try W.visible:= visible; except VisibleWord:=false; end; End; //Функция создания нового документа Код:
Function AddDoc:boolean; Var Doc_:variant; begin AddDoc:=true; try Doc_:=W.Documents; Doc_.Add; except AddDoc:=false; end; End; //Открытие ранее созданного документа. Код:
Function OpenDoc(file_:string):boolean; Var Doc_:variant; begin OpenDoc:=true; try Doc_:=W.Documents; Doc_.Open(file_); except OpenDoc:=false; end; End; //Сохранить документ Код:
Function SaveDocAs(file_:string):boolean; begin SaveDocAs:=true; try W.ActiveDocument.SaveAs(file_); except SaveDocAs:=false; end; End; //Сохранить документ в Юникоде Function SaveDocAsUnicod(file_:string):boolean; const wdFormatUnicodeText=7; begin SaveDocAsUnicod:=true; try W.ActiveDocument.SaveAs(file_,FileFormat:=wdFormatUnicodeText); except SaveDocAsUnicod:=false; end; End; //Закрытие документа Код:
Function CloseDoc:boolean; begin CloseDoc:=true; try W.ActiveDocument.Close; except CloseDoc:=false; end; End; //Ну и самого Ворда Код:
Function CloseWord:boolean; begin CloseWord:=true; try W.Quit; except CloseWord:=false; end; End; Использование: Код:
if CreateWord then begin //Запускаем Ворд VisibleWord(true); //Показываем его пользователю If AddDoc then begin //Создаем новый документ {OpenDoc('C:\123.doc')} //Ну или открываем существующий //Теперь юзер делает че ему надо.... SaveDocAs('c:\123'); //если надо - сохраняем CloseDoc; //закрываем документ CloseWord; //закрываем Ворд P.S. Проверял на Word2000/2003/XP -Все работает без проблем. Писал прямо на форуме, поэтому могут быть маленькие опечатки! |