Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Вниз

richedit   Найти похожие ветки 

 
9899100   (2008-05-06 15:47) [0]

Подскажите плииз, почему не работает поиск в RichEdit если текс набран русскими буквами???

st="привет";
...
sn:=RichEdit1(st,0,Length(RichEdit1.Text),[stWholeWord]);

в итоге sn=-1 , хотя реально это слово есть в тексте :(

Если буквы и текс латинница, то находит все на ура!!


 
9899100   (2008-05-06 16:07) [1]

Удалено модератором
Примечание: Создание пустых сообщений


 
Knight ©   (2008-05-06 16:26) [2]

Это не ищет?

function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
var
 StartPos, Position, Endpos: Integer;
begin
 StartPos := 0;
 with RichEdit do
 begin
   Endpos := Length(RichEdit.Text);
   Lines.BeginUpdate;
   while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do
   begin
     Endpos   := Length(RichEdit.Text) - startpos;
     Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);
     Inc(StartPos, Length(SearchText));
     SetFocus;
     SelStart  := Position;
     SelLength := Length(SearchText);
   end;
   Lines.EndUpdate;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SearchForText_AndSelect(RichEdit1, "Some Text");
end;


 
Knight ©   (2008-05-06 16:31) [3]

Удалено модератором


 
9899100   (2008-05-06 16:34) [4]

если в RichEdit текст
"Привет волку"
то Position в предыдущем посте = -1

если в RichEdit текст
"Привет Some text волку"
то функция прекрасно находит и выделяет этот текст


 
9899100   (2008-05-06 16:36) [5]

Удалено модератором


 
Knight ©   (2008-05-06 16:43) [6]

А если в тексте "Привет волку" искать "Привет"?


 
9899100   (2008-05-06 16:48) [7]

в тексте RichEdit , в Lines .... ну как еще объяснить....
создаем в врде документ набираем текст "Привет волку" сохраняем его в RTF формате
загружаем его в richEdit при помощи LoadFromFile

потом пытаемся найти там строку "Привет" при помощи метода FindText класса TRichEdit
в итоге
получаем -1

в тоже самое время если в загружаемом фале такс набран латинницей и ИЩЕМ мы латинницу то млин все классно работает

так понятно ??


 
Knight ©   (2008-05-06 16:51) [8]

Просто в указанном выше коде набрал на поиск "Привет" - нашло.. "привет" - не нашло...


 
9899100   (2008-05-06 16:54) [9]

Удалено модератором


 
Knight ©   (2008-05-06 16:55) [10]

Удалено модератором
Примечание: Флудить завязываем


 
9899100   (2008-05-06 17:06) [11]

бред какойто :(
если просто набрать текст в RichEdit
то находит
если скопировать текст в RichEdit из например WordPad то тоже находит
а если скопировать текст из Word
то нифига не находит :(


 
9899100   (2008-05-06 17:23) [12]

людиии помогииите, я уже просто в шоке :(
и голова скоро расколется
ишет но только не из ворда :(
файл сохранен в ворде в RTF формате
и загружен в RichEdit
все, поиск возвращает -1 :(


 
9899100   (2008-05-14 13:52) [13]

Только только нашел ответ на свой вопрос, оказывается
поиск по русски будет работать правильно только в том случае если на момоент поиска включена РУССКАЯ раскладка клавиатуры!!!!!
о как!!


 
han_malign ©   (2008-05-15 14:23) [14]

это работает при любой раскладке
type TSearchTypes = (mstWholeWord, mstMatchCase, mstReverse, mstAdjustSelection);

function RtfSearch(pRtf: TRichEdit; from: integer; const text: string; mst: TSearchType; var HaveNext: boolean): integer;
var mn, wlen: integer;
   _ftew: TFindTextExW;
   _ftf: integer;
   ws: WideString;
begin
  Result:= -1;
  haveNext:= false;
  if(pRtf <> nil)then begin
     wlen:= SendMessage(pRtf.Handle, WM_GETTEXTLENGTH, 0, 0);
     if(wlen <= 0)then
        exit;

     SendMessage(pRtf.Handle, EM_GETSEL, Longint(@_ftew.chrg.cpMin), Longint(@_ftew.chrg.cpMax));
     if(from >= 0)then begin
        if(text = "")then begin//reset selection
           SendMessage(pRtf.Handle, EM_SETSEL, from, from);
           exit;
        end else begin
           if((from = 0)and(mstReverse in mst) or (from > wlen))then from:= wlen;
           _ftew.chrg.cpMin:= from;
           _ftew.chrg.cpMax:= from;
        end;
     end else begin
        if(text = "")then begin
           if(mstReverse in mst)then
              SendMessage(pRtf.Handle, EM_SETSEL, _ftew.chrg.cpMin, _ftew.chrg.cpMin)
           else
              SendMessage(pRtf.Handle, EM_SETSEL, _ftew.chrg.cpMax, _ftew.chrg.cpMax);
           exit;
        end;
     end;
     ws:= text;
     _ftew.lpstrText:= PWideChar(ws);

     _ftf:= FR_DOWN;
     if(mstMatchCase in mst)then _ftf:= _ftf or FT_WHOLEWORD;
     if(mstWholeWord in mst)then _ftf:= _ftf or FT_MATCHCASE;

     with _ftew.chrg do
     if(mstReverse in mst)then begin
        if(cpMin < 0 )then cpMin:= wlen;

        //RichEdit with version older 4.1 don"t search back
        (*if( not( pRtf is TRichEdit50) or
            (TRichEdit50(pRtf).Version < rvRichEdit4)
        )then begin
*)
           cpMax:= cpMin;
           cpMin:= 0;
           while(DWORD(cpMin) < DWORD(cpMax))do begin
              mn:= SendMessage(pRtf.Handle, EM_FINDTEXTEXW, _ftf, Longint(@_ftew));
              if(mn >= 0)then begin
                 HaveNext:= Result >= 0;
                 Result:= mn;
                 cpMin:= _ftew.chrgText.cpMax;
              end else
                 break;
           end;
           if(Result < 0)then
              exit;
           //restore chrgText after last error
           _ftew.chrgText.cpMin:= Result;
           _ftew.chrgText.cpMax:= cpMin;
        (*end else begin
           _ftf:= _ftf and not FR_DOWN;
           cpMax:= 0;
        end;
*)
     end else begin
        cpMin:= cpMax;
        if(cpMin < 0 )then cpMin:= 0;
        cpMax:= wlen;
     end;

     if(Result < 0)then begin
        Result:= SendMessage(pRtf.Handle, EM_FINDTEXTEXW, _ftf, Longint(@_ftew));
        if(Result >= 0)then begin
           if(mstReverse in mst)then begin
              _ftew.chrg.cpMin:= _ftew.chrgText.cpMin;
              HaveNext:= SendMessage(pRtf.Handle, EM_FINDTEXTW, _ftf, Longint(@_ftew)) < Result;
           end else begin
              _ftew.chrg.cpMin:= _ftew.chrgText.cpMax;
              HaveNext:= SendMessage(pRtf.Handle, EM_FINDTEXTW, _ftf, Longint(@_ftew)) > Result;
           end;
        end;
     end;

     if((Result >= 0)and(mstAdjustSelection in mst))then begin
        SendMessage(pRtf.Handle, EM_EXSETSEL, 0, longint(@_ftew.chrgText));
     end;
  end;
end;{}


 
han_malign ©   (2008-05-15 14:24) [15]

TMimeSearchType = set of TMimeSearchTypes;
забыл...



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

Форум: "Основная";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.055 c
2-1236551101
bobby86
2009-03-09 01:25
2009.04.19
Перехват ошибок в Windows XP


15-1234964100
@!!ex
2009-02-18 16:35
2009.04.19
ICQ опять уронили?


2-1235825209
Карим Ли
2009-02-28 15:46
2009.04.19
Записать картинку в БД


2-1235746713
Mops
2009-02-27 17:58
2009.04.19
Postdata &amp; BeforeNavigate2 &amp; string


4-1208613157
Damien
2008-04-19 17:52
2009.04.19
Рисунок за границами окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский