Здравствуйте, NSP, Вы писали:
NSP>Здравствуйте, maslan.
NSP>1. попробуйте заменить fnd := RichEdit1.FindText('!MATRIX!', fnd+1, Length(RichEdit1.Text), []);
NSP>на fnd := RichEdit1.FindText('!MATRIX!', fnd+1, Length(RichEdit1.Lines.Text), [stMatchCase]);
NSP>Должно работать
NSP>2. Зачем изобретать велосипед??
NSP>Если заглянуть в реализацию TCustomRichEdit.FindText,то можно увидеть то же самое,то есть что поиск реализован с помощью
NSP>SendMessage(Handle, EM_FINDTEXT, Flags, LongInt(@Find)) :
NSP>NSP>function TCustomRichEdit.FindText(const SearchStr: string;
NSP> StartPos, Length: Integer; Options: TSearchTypes): Integer;
NSP>var
NSP> Find: TFindText;
NSP> Flags: Integer;
NSP>begin
NSP> with Find.chrg do
NSP> begin
NSP> cpMin := StartPos;
NSP> cpMax := cpMin + Length;
NSP> end;
NSP> Flags := 0;
NSP> if stWholeWord in Options then Flags := Flags or FT_WHOLEWORD;
NSP> if stMatchCase in Options then Flags := Flags or FT_MATCHCASE;
NSP> Find.lpstrText := PChar(SearchStr);
NSP> Result := SendMessage(Handle, EM_FINDTEXT, Flags, LongInt(@Find));
NSP>end;
NSP>
NSP>Соответственно указатель передаётся так: LongInt(@Find)
NSP>
Спасибо за советы, но они не помогают =(
1) Велосипед изобретать приходится из-за того, что готовое не работает. stMatchCase — не помогает, я его пробовал. =(
Либо Borland.Vcl.RichEdit криво реализован в BDS2006, либо у меня руки растут ну совсем не оттуда, откуда положено...
2) LongInt(@Find) — ) Не проходит. Говорит что Invalid Typecast.
Я на работе вчера часа 3 убил на попытки понять... Ни Cardinal(@ft), ни Int32(addr(ft)) (с вариациями) не проходят. Всё тот же InvalidTypecast. Поэтому я и говорил про function PointerToInteger(var X:Pointer):Integer.
Ещё раз спасибо....
У кого ещё идеи есть?
... << RSDN@Home 1.1.3 beta 2 >>