Главная страница
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.023 c
1-1443
gRad2003
2003-08-19 01:00
2003.09.01
Как из *.exe извлечь все String-и???


14-1575
likeanangel
2003-08-11 17:32
2003.09.01
Редактор метафайлов


1-1497
ossa
2003-08-18 08:41
2003.09.01
Подскажите как из 2-го модуля вывести в 1-м в Label текст.


1-1476
imp403
2003-08-16 13:00
2003.09.01
Resources


3-1299
yaric
2003-08-09 13:24
2003.09.01
Как можно упаковать таблицу Paradox