Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизГлюки 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c