Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.513 c
1-1140602547
Alexandr
2006-02-22 13:02
2006.03.26
преобразовать строку


2-1141732958
pupapumQ
2006-03-07 15:02
2006.03.26
Программу в пуск


2-1141668489
vital538
2006-03-06 21:08
2006.03.26
FireBird


2-1141985633
Gleb
2006-03-10 13:13
2006.03.26
Как с помощью Delphi перемножить две матрицы?


15-1141304145
Drakosha
2006-03-02 15:55
2006.03.26
Детская (особенно на первый взгляд) задача:





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский