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

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

Поиск слов в Word из Delphi [D7, WinXP]


Mefodiy ©   (2005-09-14 18:01:00) 

В программе есть TEdit, в котором набирается слово на русском языке. На нажатие кнопки прописано:

 WordApp: OleVariant;
 WordApp := CreateOleObject('Word.Application');
 WordApp.Documents.Open('MyWordDocument');
 WordApp.Application.Keyboard(1049);
 WordApp.Visible := True;
..........................................................................
 WordApp.Selection.Find.ClearFormatting;
 WordApp.Selection.Find.Replacement.ClearFormatting;
 WordApp.Selection.Find.Replacement.Text := '';
 WordApp.Selection.Find.Text := MyEdit.Text;
 WordApp.Selection.Find.Forward := True;
 WordApp.Selection.Find.Wrap := 1;
 WordApp.Selection.Find.Format := False;
 WordApp.Selection.Find.MatchCase := True;
 WordApp.Selection.Find.MatchWholeWord := True;
 WordApp.Selection.Find.MatchWildcards := False;
 WordApp.Selection.Find.MatchSoundsLike := False;
 WordApp.Selection.Find.MatchAllWordForms := False;
 WordApp.Selection.Find.Execute;

Все работает без ошибок, но слово не находится, т.к. когда просматриваю через CTRL+F в Wordе, то видно, что русские буквы преобразовались в аброкадабру.

У меня Win XP. В региональных установках стоит русский язык.
В чем дело и главное что делать?
Спасибо


Mefodiy   (2005-09-17 11:21:00) [1]

Проблема решиласть с помощью функции:

function StringToWideString(const s: AnsiString; codePage: Word): WideString;
 var l: integer;
begin
 if s = '' then
   Result := ''
 else
 begin
   l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), -1, nil, 0);
   SetLength(Result, l - 1);
   if l > 1 then
     MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
                         -1, PWideChar(@Result[1]), l - 1);
 end;
end;

которую откопал в интернете.
Вызывать ее надо так
 WordApp.Selection.Find.Text := StringToWideString(WordEdit.Text,1251);


Mefodiy   (2005-09-17 10:03:00) [2]

Обнаружил следующее:
Если объявить переменную
   var s: WideString;
в теле программы присвоить ей какую нибудь строку кириллицы
   s := 'КИРИЛЛИЦА';
и задать
 WordApp.Selection.Find.Text := s;
то все нормально работает.
Но если задать
   s := WordEdit.Text;
   WordApp.Selection.Find.Text := s;
опять выходит аброкадабра.
Кстати вариант
   s := WideString(WordEdit.Text);
тоже не помогает


lookin   (2005-09-16 17:20:00) [3]

[7] Mefodiy   (16.09.05 17:16)

Может быть, у меня Ворд2000 и дельфи 5... И система Win2000.


Mefodiy   (2005-09-16 17:16:00) [4]

Может быть дело в версии Word? У меня - Word 2003.


lookin   (2005-09-16 17:10:00) [5]

[5] Mefodiy   (16.09.05 17:01)

У меня с русским словом все ок...


Mefodiy   (2005-09-16 17:01:00) [6]

С английскими буквами и числами у меня тоже работает.
  Проблема в кириллице. Насколько я понимаю в Дельфи используется  ASCII  кодировка, а в Word - Unicode. Просто я никак не могу в WordApp.Selection.Find.Text преобразовать и записать в кодировке Unicode. Не знаю возможно ли такое вообще. Использвание StringToWhideChar ничего не меняет.


lookin   (2005-09-16 16:32:00) [7]

У меня Ваш код работает на ура...


Mefodiy   (2005-09-16 16:27:00) [8]

Мастера, отзовитесь !!!!!!!!!!!!!!!!!!!!!!


Mefodiy   (2005-09-15 08:05:00) [9]

Уже пробовал. Не помогает.


Defunct   (2005-09-15 05:33:00) [10]

может попробовать так:

WS : WideString;

WS := MyEdit.Text;
WordApp.Selection.Find.Text := WS;

?


Наверх

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