-
Подскажите плииз, почему не работает поиск в RichEdit если текс набран русскими буквами???
st='привет'; ... sn:=RichEdit1(st,0,Length(RichEdit1.Text),[stWholeWord]);
в итоге sn=-1 , хотя реально это слово есть в тексте :(
Если буквы и текс латинница, то находит все на ура!!
-
Удалено модератором Примечание: Создание пустых сообщений
-
Это не ищет? 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;
-
Удалено модератором
-
если в RichEdit текст "Привет волку" то Position в предыдущем посте = -1
если в RichEdit текст "Привет Some text волку" то функция прекрасно находит и выделяет этот текст
-
Удалено модератором
-
А если в тексте "Привет волку" искать "Привет"?
-
в тексте RichEdit , в Lines .... ну как еще объяснить.... создаем в врде документ набираем текст "Привет волку" сохраняем его в RTF формате загружаем его в richEdit при помощи LoadFromFile
потом пытаемся найти там строку "Привет" при помощи метода FindText класса TRichEdit в итоге получаем -1
в тоже самое время если в загружаемом фале такс набран латинницей и ИЩЕМ мы латинницу то млин все классно работает
так понятно ??
-
Просто в указанном выше коде набрал на поиск "Привет" - нашло.. "привет" - не нашло...
-
Удалено модератором
-
Удалено модератором Примечание: Флудить завязываем
-
бред какойто :( если просто набрать текст в RichEdit то находит если скопировать текст в RichEdit из например WordPad то тоже находит а если скопировать текст из Word то нифига не находит :(
-
людиии помогииите, я уже просто в шоке :( и голова скоро расколется ишет но только не из ворда :( файл сохранен в ворде в RTF формате и загружен в RichEdit все, поиск возвращает -1 :(
-
Только только нашел ответ на свой вопрос, оказывается поиск по русски будет работать правильно только в том случае если на момоент поиска включена РУССКАЯ раскладка клавиатуры!!!!! о как!!
-
это работает при любой раскладке 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 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;
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;
_ftew.chrgText.cpMin:= Result;
_ftew.chrgText.cpMax:= cpMin;
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;
-
TMimeSearchType = set of TMimeSearchTypes; забыл...
|