Текущий архив: 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.03 c