Главная страница
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.017 c
14-1616
Девелопер
2003-08-13 15:09
2003.09.01
Загадка для девелоперов


3-1310
Relaxxx
2003-08-08 17:24
2003.09.01
Как мне узнать что курсор в БДГрид находится ...............


14-1570
Дремучий
2003-08-11 15:29
2003.09.01
Нужны учебники в електронном виде!


1-1417
DelphiNew
2003-08-19 15:51
2003.09.01
Печать


1-1420
Lina
2003-08-19 14:49
2003.09.01
IniFile