Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

Проблема Delphi+Word   Найти похожие ветки 

 
MaFon   (2005-05-08 16:26) [0]

Здравствуйте! Возник вот такой вопрос:
Вот, например,  код:
-----------
Uses comObj;
Var W:variant;

Function TForm1.CreateWord:boolean;
begin
CreateWord:=true;
try
W:=CreateOleObject("Word.Application");
except
CreateWord:=false;
end;
End;

procedure TForm1.Button1Click(Sender: TObject);
var
 filecount: integer;
begin
 If CreateWord= true then
 begin
   W.visible:=true;
   for filecount:=0 to Memo1.lines.Count do
   begin
     W.Documents.open(memo1.Lines[filecount]);
     W.Selection.Start:=0;
     W.Selection.End:=0;
     W.Selection.Find.Forward:=true;
     W.Selection.Find.Text:="трали-вали";
     if (W.Selection.Find.Execute)=true then Memo2.Lines.Add("найдено в "+memo1.Lines[filecount]);
     W.ActiveDocument.Close;
   end;
   W.Quit;
 end;
end;

Вроде бы всё правильно. Но, если пользователь откроет другой документ во время работы цикла, произойдёт глюк. С тем документом невозможно будет работать. Что же делать?????
Заранее спасибо.


 
YurikGL ©   (2005-05-08 20:55) [1]


> Но, если пользователь откроет другой документ во время работы
> цикла, произойдёт глюк.

Так не надо давать возможность пользователю работать с документом в то время, когда с ним работает твоя программа.

Visible:=false


 
MaFon   (2005-05-08 23:58) [2]

А пользователь ХОЧЕТ. Вот и вся проблема. Когда он открывает документ, не открывается 2-й экземпляр ворда.


 
YurikGL ©   (2005-05-09 08:06) [3]


> MaFon   (08.05.05 23:58) [2]

Объект selection указывает на то место, где сейчас находится курсор приложения Word. Если он находится в другом документе, то операции будут проводиться в другом документе. Поэтому либо надо отказываться от selection (плохо представляю, как это возможно), либо работать не через OLE, либо говорить пользователю НЕЛЬЗЯ. Последнее ИМХО - самый правильный способ.


 
YurikGL ©   (2005-05-09 08:07) [4]


> Объект selection

Указатель selection :)


 
MaFon   (2005-05-09 10:17) [5]

>>либо работать не через OLE, либо говорить пользователю >>НЕЛЬЗЯ. Последнее ИМХО - самый правильный способ
Как работать не через OLE и как сказать пользователю "низя"?


 
YurikGL ©   (2005-05-09 18:07) [6]


> Как работать не через OLE

Например, сохраняя документ в формате xml(html и т.д.) и анализируя уже его.

> как сказать пользователю "низя"

Я вывожу информационное окно о том, что идет процесс и лучше ничего не трогать.


> надо отказываться от selection (плохо представляю, как это
> возможно),

В твоем случае, кстати, возможно... Если правильно понял, ты ищешь содержится ли определенный текст в документе или нет.
В этом случае можно поробовать сделать что-нибудь в этом духе:

vr1,vr2,vr3:olevariant;
st:string;

vr1:=1;
vr2:=1;
vr3:=WordApplication1.Documents.Item(vr1).Characters.Count;
st:=WordApplication1.Documents.Item(vr1).Range(vr2,vr3).Text;

далее ищем в строке st искомое слово с помощью pos


 
MaFon   (2005-05-10 09:07) [7]

Спасибо.
>>Например, сохраняя документ в формате xml(html и т.д.) и анализируя уже его.
И как же мне сохранить *.doc в *.html без использования OLE?


 
YurikGL ©   (2005-05-10 21:18) [8]


> И как же мне сохранить *.doc в *.html без использования
> OLE?

Это пусть пользователь делает :)



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
8-1129642397
AlexF
2005-10-18 17:33
2006.03.26
работа с таймером


9-1126253501
RzCoDer
2005-09-09 12:11
2006.03.26
ладшафт в OpenGL


2-1142262731
Gleb
2006-03-13 18:12
2006.03.26
Как строить графики в компоненте Chart?


2-1141832281
Mozgan
2006-03-08 18:38
2006.03.26
Как узнать код клавиши F4


2-1141896174
kyn66
2006-03-09 12:22
2006.03.26
Проверка активности элементов