![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюки TRichEdit и TJvRichEdit [WinXP]
KillerToxa © (2005-05-31 11:57:00)Вот у меня такой глюк с поиском. Как в TRichEdit так и в TJvRichEdit.
Например хочу я найти кусок текста в TRichEdit. Пишу
var st: string;
i: integer;
st:='Привет'
i:=RichEdit1.FindText(st, 0, Length(RichEdit1.Text), [stWholeWord]);
Так вот - у меня на компьютере (причём на работе и дома) функция работает нормально и в i возвращает позицию найденой строки.
А на других компьютерах, она всегда выдаёт -1. Типа такая строка не найдена. Закономерности найти не смог. Ну на других компах Делфи не стояло. Причём поиск как таковой работает - если кинуть едит и искать текст который в нём введён, то ищет. Я так понимаю это скорее всего глюк с русским текстом и юникодом. Но как от него избавиться так и не понял...
Пробывал делать так
var st: WideString;
не помогло... Может кто занет как с этим бороться?
D2005.
KillerToxa (2005-06-03 09:22:00) [1]Обычный RichEdit не использую, т.к. он не поддерживает вставку объектов. Хотя в JvRichEdit есть небольшой с ними глюк - вставленные объекты можно ресайзить даже если поставить ReadOnly:=True;
Выделяю так
DescMemo: TJvRichEdit;
i:=DescMemo.FindText(rez, 0, Length(DescMemo.Text), [stSetSelection]);
if i>0 then
begin
DescMemo.SelAttributes.Style:=DescMemo.SelAttributes.Style + fsBold];
end;
Вообще есть хелп хороший по Ом компонентам и вчастности по TJvRichEdit?
KillerToxa (2005-06-03 08:50:00) [2]Спасибо :)
Версия вроде $Id: JvRichEdit.pas,v 1.69 2005/03/09 14:57:29 marquardt Exp $
А функцию в к ричэдиту в модуль кидать? Или у себя уже добавить?
Ещё не пробывал пока.
Shaman_Naydak (2005-06-02 11:33:00) [3]Вот неугомонный ;)
Я вообще от спрашивал про версию RichEdita.. а не компонентов.. ;)
И не используй RichEdit из стандартной поставки.. а от JEDI или RX (в стандартной поставке используется 1й версии, а это фигня (если ты, конечно, не собираешься поддерживать голые 95е)
Акак ты искал текст в едите? пишешь не понятно и мутно.. код бы тогда бы приводил, ежели хошь, чтобы помогли...
Ты таки проверил юникодовую версию поиска? небось не стал делать, а сидишь и ждешь у моря погоды.. ладно, кидаю...проверяй
function RichEditFindTextW(RichEditHandle: THandle; const SearchStr: WideString;
StartPos, Length: Integer; Options: TSearchTypes): Integer;
const
EM_FINDTEXTW = WM_USER + 123;
var
Find: TFindTextW;
Flags: Integer;
begin
with Find.chrg do
begin
cpMin := StartPos;
cpMax := cpMin + Length;
end;
Flags := 0;
if stWholeWord in Options then Flags := Flags or FT_WHOLEWORD;
if stMatchCase in Options then Flags := Flags or FT_MATCHCASE;
Find.lpstrText := PWideChar(SearchStr);
Result := SendMessage(RichEditHandle, EM_FINDTEXTW, Flags, LongInt(@Find));
end;
KillerToxa (2005-06-02 08:30:00) [4]...
KillerToxa (2005-06-01 08:36:00) [5]Up
KillerToxa (2005-05-31 23:03:00) [6]Ап
KillerToxa (2005-05-31 16:31:00) [7]Английский ищет без проблем везде. И цифры тоже. Операционка у меня WinXp SP2 MUI. Для юникода стоит русский. Проверял на точно такой же винде и на w2k SP4 - не работает. Только где делфи стоит. Делфи 2005 SP2. Jedi последней версии JVCL 3.0 от 2005-03-13.
То, что преобразование в юникод ничего не дадут понял, на входе то действительно анси ждёт.
Может глюк в кодировках - koi8-r там и ср1251.
Что самое интересное 0 сделал я Edit для проверки и ищу текст, который в нём введён. Так если он сразу пустой и набрать по русски нужный текст - ищет. А если в него скопировать из TRichEditа текст, который нужно найти - то не находит...
Shaman_Naydak (2005-05-31 16:08:00) [8]если хошь попробовать искать в юникоде, то посмотри реализацию функции для анси и по аналогии сделай для юникода, используя не EM_FINDTEXT, а EM_FINDTEXTW.. но тут надо быть аккуратным..
И кстати, насколько я помню, чтобы искать по всему контролу можно вместо длины -1 передать.. Это так.. навеяло
Shaman_Naydak (2005-05-31 16:03:00) [9]То, что ты попробовал описать строку как юникодовую тебе само собой не поможет.. функция то ждет на вход анси и сделает неявное преобразование ;)
А если серьезно, то:
1. проверь как ищется английский текст.
2. какая версия операционки (и установлена ли на ней поддержка рюсского языка).. совсем замечательно было бы узнать версию ричедита в системе где работает, и где не работает.
KillerToxa (2005-05-31 14:54:00) [10]Никто не знает?