Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.05;
Скачать: 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 вся ветка

Текущий архив: 2006.02.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.04 c
2-1137567723
РВА
2006-01-18 10:02
2006.02.05
Создание массива в Blob поле


2-1137359399
Tort
2006-01-16 00:09
2006.02.05
Копировать файлы


3-1133515149
vitek
2005-12-02 12:19
2006.02.05
Дробные числа в базах


1-1135863283
kyn66
2005-12-29 16:34
2006.02.05
Создание генератора случайных билетов.


15-1136568903
Джо
2006-01-06 20:35
2006.02.05
MS-DOS Executive, файловый менеджер времен Windows 1.0