Форум: "Основная";
Текущий архив: 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.059 c