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

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

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

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


procedure CaretPos(H: THandle; var L, C: Word);
begin
  L := SendMessage(H, EM_LINEFROMCHAR, -1, 0);
  C := LoWord(SendMessage(H, EM_GETSEL, 0, 0)) -
    SendMessage(H, EM_LINEINDEX, -1, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LineNum, ColNum: Word;
begin
  CaretPos(Memo1.Handle, LineNum, ColNum);
  Edit1.Text := IntToStr(LineNum) + '  ' + IntToStr(ColNum);
end;

Хотя в Delphi 5 свойство CaretPos уже включено в memo.

Here's the translation of the text into Russian:

Красивый фрагмент кода на Delphi!

Процедура CaretPos используется для получения текущей позиции курсора (номер строки и столбца) в контроле памяти (TMemo). Процедура принимает.handle к контролу памяти и два переменных для хранения номера строки и столбца.

Вот разбор, что делает процедура:

  1. Она отправляет сообщение EM_ LINEFROMCHAR контролу памяти с символом -1 (что означает "текущая позиция курсора") и handle окна 0. Это возвращает номер строки, где находится курсор.
  2. Затем она отправляет сообщение EM_GETSEL контролу памяти с параметром 0, что возвращает текущие позиции начала и конца выбора как LPARAM (32-разрядное целое число). Функция LoWord используется для извлечения низшего слова (первых 16 бит) из этого значения, которое представляет собой позицию символа.
  3. Она вычитывает номер строки, полученный в шаге 1, из позиции символа, полученной в шаге 2, чтобы получить номер столбца.

В процедуре Button1Click, когда кнопка нажата, она вызывает CaretPos с handle контрола памяти Memo1 и хранит возвращенные значения в LineNum и ColNum. Затем она устанавливает текст контроля редактирования (Edit1) в строковое представление этих значений (например, "5 10" для строки 5, столбца 10).

Как вы упомянули, Delphi 5 имеет встроенный свойство CaretPos для контролов памяти, что делает этот код несколько избыточным. Однако, это реализация может быть полезной, если вам нужно получить позицию курсора более явно.

Вот альтернативное решение с использованием встроенного свойства CaretPos:

procedure TForm1.Button1Click(Sender: TObject);
var
  LineNum, ColNum: Word;
begin
  LineNum := Memo1.CaretLine;
  ColNum := Memo1.CaretColumn;
  Edit1.Text := IntToStr(LineNum) + '    ' + IntToStr(ColNum);
end;

Это код более прост и прямолинейный, так как он напрямую доступ к свойствам CaretLine и CaretColumn контрола памяти.

В статье предлагается решение задачи определения координат курсора в Memo 2 в Delphi, используя процедуры SendMessage и EM_GETSEL для получения информации о выделенном тексте.


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


Ваше мнение или вопрос к статье в виде простого текста (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 16:49:33/0.011059999465942/2