Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.01;
Скачать: CL | DM;

Вниз

Позиция курсора в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-1329
Fants
2003-08-11 09:47
2003.09.01
Документация по FIBPlus


14-1655
Knight
2003-08-12 10:02
2003.09.01
Все упали ниц.... перед супер-пупер програмером... :))))))


1-1468
8ung
2003-08-18 12:35
2003.09.01
Изменение параметров чужой формы.


1-1445
KreZ0n
2003-08-18 09:57
2003.09.01
Delphi 5 and Delphi6


14-1589
Echelon
2003-08-13 18:28
2003.09.01
Пустили обезьяну к компу