Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.049 c
1-1117806913
Deka
2005-06-03 17:55
2005.06.29
Обновление для Delphi 2005...


1-1117685267
Николай
2005-06-02 08:07
2005.06.29
Сontrol hast no parent windows - создание компонентов


4-1115290216
DrFaust
2005-05-05 14:50
2005.06.29
События Windows


3-1115818051
Рукма
2005-05-11 17:27
2005.06.29
Заполнить поля


9-1111518164
Bret
2005-03-22 22:02
2005.06.29
Вид от первого лица в GLscene





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский