![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск слов в 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;
?