Re[2]: D2006 .NET RichEdit.FindText, SendMessage, PointerTo
От: maslan Россия  
Дата: 07.09.06 04:13
Оценка:
Здравствуйте, 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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.