Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо