![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема Delphi+Word [Delphi, Windows]
MaFon © (2005-05-08 16:26:00)Здравствуйте! Возник вот такой вопрос:
Вот, например, код:
-----------
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-10 21:18:00) [1]
> И как же мне сохранить *.doc в *.html без использования
> OLE?
Это пусть пользователь делает :)
MaFon (2005-05-10 09:07:00) [2]Спасибо.
>>Например, сохраняя документ в формате xml(html и т.д.) и анализируя уже его.
И как же мне сохранить *.doc в *.html без использования OLE?
YurikGL (2005-05-09 18:07:00) [3]
> Как работать не через 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-09 10:17:00) [4]>>либо работать не через OLE, либо говорить пользователю >>НЕЛЬЗЯ. Последнее ИМХО - самый правильный способ
Как работать не через OLE и как сказать пользователю "низя"?
YurikGL (2005-05-09 08:07:00) [5]
> Объект selection
Указатель selection :)
YurikGL (2005-05-09 08:06:00) [6]
> MaFon (08.05.05 23:58) [2]
Объект selection указывает на то место, где сейчас находится курсор приложения Word. Если он находится в другом документе, то операции будут проводиться в другом документе. Поэтому либо надо отказываться от selection (плохо представляю, как это возможно), либо работать не через OLE, либо говорить пользователю НЕЛЬЗЯ. Последнее ИМХО - самый правильный способ.
MaFon (2005-05-08 23:58:00) [7]А пользователь ХОЧЕТ. Вот и вся проблема. Когда он открывает документ, не открывается 2-й экземпляр ворда.
YurikGL (2005-05-08 20:55:00) [8]
> Но, если пользователь откроет другой документ во время работы
> цикла, произойдёт глюк.
Так не надо давать возможность пользователю работать с документом в то время, когда с ним работает твоя программа.
Visible:=false