Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Глюки TRichEdit и TJvRichEdit   Найти похожие ветки 

 
KillerToxa   (2005-05-31 11:57) [0]

Вот у меня такой глюк с поиском. Как в 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-05-31 14:54) [1]

Никто не знает?


 
Shaman_Naydak   (2005-05-31 16:03) [2]

То, что ты попробовал описать строку как юникодовую тебе само собой не поможет.. функция то ждет на вход анси и сделает неявное преобразование ;)
А если серьезно, то:
1. проверь как ищется английский текст.
2. какая версия операционки (и установлена ли на ней поддержка рюсского языка).. совсем замечательно было бы узнать версию ричедита в системе где работает, и где не работает.


 
Shaman_Naydak   (2005-05-31 16:08) [3]

если хошь попробовать искать в юникоде, то посмотри реализацию функции для анси и по аналогии сделай для юникода, используя не EM_FINDTEXT, а EM_FINDTEXTW.. но тут надо быть аккуратным..

И кстати, насколько я помню, чтобы искать по всему контролу можно вместо длины -1 передать.. Это так.. навеяло


 
KillerToxa   (2005-05-31 16:31) [4]

Английский ищет без проблем везде. И цифры тоже. Операционка у меня WinXp SP2 MUI. Для юникода стоит русский. Проверял на точно такой же винде и на w2k SP4 - не работает. Только где делфи стоит. Делфи 2005 SP2. Jedi последней версии JVCL 3.0 от 2005-03-13.

То, что преобразование в юникод ничего не дадут понял, на входе то действительно анси ждёт.

Может глюк в кодировках - koi8-r там и ср1251.

Что самое интересное 0 сделал я Edit для проверки и ищу текст, который в нём введён. Так если он сразу пустой и набрать по русски нужный текст - ищет. А если в него скопировать из TRichEditа текст, который нужно найти - то не находит...


 
KillerToxa   (2005-05-31 23:03) [5]

Ап


 
KillerToxa   (2005-06-01 08:36) [6]

Up


 
KillerToxa   (2005-06-02 08:30) [7]

...


 
Shaman_Naydak   (2005-06-02 11:33) [8]

Вот неугомонный ;)
Я вообще от спрашивал про версию 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-03 08:50) [9]

Спасибо :)
Версия вроде $Id: JvRichEdit.pas,v 1.69 2005/03/09 14:57:29 marquardt Exp $

А функцию в к ричэдиту в модуль кидать? Или у себя уже добавить?
Ещё не пробывал пока.


 
KillerToxa   (2005-06-03 09:22) [10]

Обычный 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?



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
14-1117599792
12DFBDDh
2005-06-01 08:23
2005.06.29
Техничесоке задание


14-1117709495
Nicolaev Oleg
2005-06-02 14:51
2005.06.29
Сайт запущен :)


14-1117814291
Новичоккк
2005-06-03 19:58
2005.06.29
Delphi 7 vs Delphi 8 vs Delphi 2005


14-1117797762
Aldor
2005-06-03 15:22
2005.06.29
Автоматические телефонные сервисы


4-1114963106
XCept.ion
2005-05-01 19:58
2005.06.29
Встраивание формы в таскбар