Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Координаты курсора в Memo

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

Координаты курсора в Memo


Тяжело сгонять муху курсором с монитора.


var
  X, Y: LongInt;
begin
  Y := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
  X := Memo1.Perform(EM_LINEINDEX, Y, 0);
  inc(Y);
  X := Memo1.SelStart - X + 1;
  Form1.Caption := 'X = ' + IntToStr(X) + ' : ' + 'Y = ' + IntToStr(Y);
end;

Here's a translation of the text into Russian:

Код, написанный на Delphi, предназначен для получения координат курсора внутриMemo-компонента. Memo-компонент - это текстовый ящик, позволяющий пользователям вводить или просматривать большие объемы текста.

Код использует метод Perform для выполнения двух функций на Memo-компоненте: EM_ LINEFROMCHAR и EM_LINEINDEX.

  • EM_LINEFROMCHAR: Функция принимает индекс символа в аргументе и возвращает номер строки, соответствующий этому символу.
  • EM_LINEINDEX: Функция принимает номер строки в аргументе и возвращает индекс столбца первого символа на этой строке.

Код затем увеличивает номер строки на 1, рассчитывает индекс столбца курсора (отнимая начальное положение выделения от текущего положения и добавляя 1) и отображает координаты в заголовке формы.

В более подробном разборе кода:

var
  X, Y: LongInt; // объявляем два целочисленных переменных
begin
  Y := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0); // получаем номер строки, соответствующий началу выделения
  X := Memo1.Perform(EM_LINEINDEX, Y, 0); // получаем индекс столбца первого символа на этой строке
  inc(Y); // увеличиваем номер строки на 1
  X := Memo1.SelStart - X + 1; // рассчитываем индекс столбца курсора
  Form1.Caption := 'X = ' + IntToStr(X) + ' : Y = ' + IntToStr(Y); // отображаем координаты в заголовке формы
end;

Однако, этот код не получает фактическое положение курсора внутри Memo-компонента. Он только получает начальное положение выделения. Если вы хотите получить фактическое положение курсора, вам нужно использовать другой метод.

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

var
  X, Y: Integer; // объявляем два целочисленных переменных
begin
  X := Memo1.SelStart mod Memo1.Lines.Length; // рассчитываем номер строки, соответствующий началу выделения
  Y := Memo1.SelStart div Memo1.Lines.Length + 1; // получаем индекс столбца первого символа на этой строке
  Form1.Caption := 'X = ' + IntToStr(Y) + ' : Y = ' + IntToStr(X); // отображаем координаты в заголовке формы
end;

В этом коде используются оператор модуля (mod) для расчета номера строки и оператор деления (div) для расчета индекса столбца. Это потому, что свойство SelStart возвращает индекс символа, который можно использовать как индекс массива. Номер строки рассчитывается, взяв остаток от деления индекса символа на длину строк Memo-компонента. Индекс столбца рассчитывается, разделив индекс символа на длину строк и добавив 1.

Статья описывает способ получения координат курсора в Memo-компоненте Delphi, используя методы Perform и SelStart.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



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


реклама



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

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 17:05:12/0.010500907897949/2