Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизПозиция курсора в TEdit Найти похожие ветки
← →
Borealis (2003-08-18 18:10) [0]Как узнать текущую позицию курсора (каретки) в элементе
TEdit
?
ps. Замечу, чтоSelStart
указывает на начало выделения, а оно не всегда совпадает с позицией курсора :(
← →
Юрий Федоров (2003-08-18 18:17) [1]SelStart + SelLength наверно всегда соответствует ?
← →
VAleksey (2003-08-18 18:17) [2]Курсор имеется в виду мышиный?
← →
Семен Сорокин (2003-08-18 18:23) [3]GetCaretPos
← →
Borealis (2003-08-18 19:31) [4]
> Юрий Федоров © (18.08.03 18:17) [1]
> SelStart + SelLength наверно всегда соответствует ?
Нет.SelStart
соответствует началу выделения, аSelStart + SelLength
концу выделения, но не позиции курсора (каретки). Один и тот же кусочек текста можно выделить как слева направо, так и справа налево, курсор (каретка) при этом будет, либо в конце, либо в начале выделения соответственно :(
> VAleksey © (18.08.03 18:17) [2]
> Курсор имеется в виду мышиный?
Нет. Имеется ввиду каретка (мерцающая позиция).
> Семен Сорокин © (18.08.03 18:23) [3]
> GetCaretPos
Нет. Возвращает позицию каретки в пикселях, а нужно в символах (от начала строки). :(
← →
Юрий Федоров (2003-08-18 19:41) [5]Не совсем понятно, зачем нужно вдаваться уж в такие детали...
Судя по тому, что EM_GETSEL тоже не возвращает такой информации, а больше там сообщений подходящих не видно (по карйней мере я не нашел...)можно попробовать получить с помощью GetCaretPos TPoint, а затем рассчитать из него позицию каретки в символах на основе выбранного шрифта и набранного текста
← →
Borealis (2003-08-18 21:15) [6]
> Юрий Федоров © (18.08.03 19:41) [5]
> Не совсем понятно, зачем нужно вдаваться уж в такие детали...
Нужно обеспечить различное поведение компоненты в зависимости от того где находится курсор (каретка): в начале выделения или в конце.
> можно попробовать получить с помощью GetCaretPos TPoint,
> а затем рассчитать из него позицию каретки в символах на
> основе выбранного шрифта и набранного текста
Тогда нужно знать либо координаты самого первого символа, либо номер символа который отображается самым левым вTEdit
(ведь текст весь может не вмещатся вTEdit
и первый символ отображаемый в возле левого края это не обязательно первый символ текста).
На самом деле всё оказывается проще. Интересно, что ответ я нашёл в чужом сообщении которое ноходится не так далеко от моего: http://delphimaster.net/view/1-1061204458/
В результате вот, что получилось:
var
ptn: TPoint;
aPos: Integer;
begin
GetCaretPos(ptn);
aPos := Edit1.Perform(EM_CHARFROMPOS, 0, MakeLParam(ptn.X, ptn.Y));
....
Единственное, как теперь как узнать кому принадлежит каретка, хотя я думаю достаточно просто проверитьEdit1.Focused
и если истина то выполнять вышеприведённый код...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c