Вниз
Скачать: CL | DM;

Вопрос по TRichEdit   Найти похожие ветки 

← →
Dima1   (2006-01-20 22:03) [0]

Народ. Помогите.

Есть TRichEdit. Текст в нем не выделен.

Надо сделать так, чтобы по нажатию ПРАВОЙ кнопки мыши
НАД словом в нем, получить ВСЕ слово, которое под мышкой.

Своего рода аналог ВЫДЕЛЕННОГО слова, как при двойном клике.
На крайний случай можно это слово и выделить. Потом можно
узнать по SelText. Но как его выделить по правой кнопке.
Но без выделения было бы все же лучше.


← →
Gero ©   (2006-01-21 01:16) [1]

Если нужно, чтобы не происходило перевода каретки, то что-то вроде этого:

function GetRichEditWordAtPt(RichEdit: TRichEdit; Pt: TPoint): string;

function GetTextRange(BeginPos, MaxLength: Integer): string;
var
 TextRange: TTextRangeA;
begin
 if MaxLength > 0 then
   begin
     with TextRange do
       begin
         chrg.cpMin := BeginPos;
         chrg.cpMax := BeginPos + MaxLength;
       end;
     SetLength(Result, MaxLength);
     TextRange.lpstrText := PChar(Result);
     SetLength(Result, SendMessage(RichEdit.Handle, EM_GETTEXTRANGE, 0, LongInt(@TextRange)));
   end
 else
   Result := "";
end;

var
 StartPos, EndPos: Integer;
begin
 StartPos := SendMessage(RichEdit.Handle, EM_CHARFROMPOS, 0, Longint(@Pt));
 if (StartPos < 0) or (SendMessage(RichEdit.Handle, EM_FINDWORDBREAK, WB_CLASSIFY, StartPos) and
  (WBF_BREAKLINE or WBF_ISWHITE) <> 0) then
   begin
     Result := "";
     Exit;
   end;
 if SendMessage(RichEdit.Handle, EM_FINDWORDBREAK, WB_CLASSIFY, StartPos - 1) and
  (WBF_BREAKLINE or WBF_ISWHITE) = 0 then
   StartPos := SendMessage(RichEdit.Handle, EM_FINDWORDBREAK, WB_MOVEWORDLEFT, StartPos);
 EndPos := SendMessage(RichEdit.Handle, EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, StartPos);
 Result := Trim(GetTextRange(StartPos, EndPos - StartPos));
end;


Если перевод каретки устраивает, то можно проще, но это не интересно :)


← →
Dima1   (2006-01-21 01:25) [2]

Спасибо! Попробую



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.024 c
15-1137066858
Elena999
2006-01-12 14:54
2006.02.05
Выгрузка Grid - а в Excel


15-1137167894
Труп Васи Доброго
2006-01-13 18:58
2006.02.05
Старый Новый Год


6-1130749046
DesWind
2005-10-31 11:57
2006.02.05
Ошибка при остановке Indy TCP Server


1-1135933959
_RusLAN
2005-12-30 12:12
2006.02.05
Ошибка при передаче формулы в EXCEL


15-1137410283
G707
2006-01-16 14:18
2006.02.05
Задачка, вроде простая, но...




   Наверх