Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Позиция курсора в TRichEdit

Delphi , Компоненты и Классы , TMemo и TRichEdit

Позиция курсора в TRichEdit

Так как вопрос давольно часто поднимается в форумах, то хотелось бы привести ответ на него. Итак, как же получить текущие координаты курсора (Row и Col) в TRichEdit ?

Вот пример решения данной проблемы:

Code:

Procedure TForm1.GetPosition(Sender: TRichEdit);
var
iX,iY  : Integer;
TheRichEdit : TRichEdit;
begin
iX := 0; iY := 0;
TheRichEdit := TRichEdit(Sender);
iY := SendMessage(TheRichEdit.Handle, EM_LINEFROMCHAR, TheRichEdit.SelStart,
0);
iX := TheRichEdit.SelStart - SendMessage(TheRichEdit.Handle, EM_LINEINDEX,
iY, 0);
Panel1.Caption := IntToStr(iY + 1) + ':' + IntToStr(iX + 1) ;
end;
 
procedure TForm1.RichEditMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
GetPosition(RichEdit);
end;
 
procedure TForm1.RichEditKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
GetPosition(RichEdit);
end;
Взято из http://forum.sources.ru

Классическая проблема!

Код, который вы предоставили, является хорошим решением для получения текущей позиции курсора (строка и столбец) в компоненте TRichEdit. Давайте разберемся:

  1. Процедура GetPosition принимает в качестве параметра компонент TRichEdit (Sender). Она рассчитывает строку и столбец курсора с помощью двух функций Windows API:
    • EM_LINEFROMCHAR: возвращает номер строки из позиции символа.
    • EM_LINEINDEX: возвращает индекс строки (0-основанный) из номера строки.
  2. Процедура initializes iX и iY в 0, затем получает начало выделенного текста (TheRichEdit.SelStart) и использует его как позицию символа в вызове EM_LINEFROMCHAR.
  3. Затем она рассчитывает строку (номер строки) вызовом EM_LINEFROMCHAR с параметрами SelStart и 0.
  4. Для получения столбца она вычитает результат вызова EM_LINEINDEX (с параметрами, равными рассчитанной строке и 0) из SelStart.
  5. Наконец, она обновляет надпись панели для отображения текущей позиции курсора в формате "Строка:Столбец".

Два события (RichEditMouseDown и RichEditKeyUp) вызывают GetPosition, когда пользователь взаимодействует с Rich Edit контролом (либо нажимает кнопку мыши, либо отпускает ее, либо нажимает клавишу).

Вот некоторые альтернативные решения:

  1. Используйте TRichEdit.GetSelText для получения выделенного текста, а затем используйте функции строкового манипулирования, такие как Pos и Length, для расчета позиции курсора.
  2. Реализуйте свой собственный отслеживание движения курсора, переопределив события Rich Edit контрола (MouseDown, MouseMove и KeyUp).

Позиция курсора в TRichEdit может быть получена с помощью метода SendMessage и функций EM_LINEFROMCHAR и EM_LINEINDEX.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TMemo и TRichEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-11-30 11:42:55
2024-12-11 00:36:19/0.0019850730895996/0