Форум: "Corba";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизПроблема 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 вся ветка
Форум: "Corba";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c