Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
1-1364
SIW
2003-08-17 19:37
2003.09.01
Работа с TStringList


1-1426
Terrible
2003-08-18 14:08
2003.09.01
Теряются тесктовые ресурсы в проге на Delphi7


14-1605
Дмитрий Терёхин
2003-08-13 18:41
2003.09.01
вопрос + работа


3-1353
lightix
2003-08-06 10:01
2003.09.01
Как передать ORDER BY в TQuery через параметры?


9-1270
BBear
2003-03-01 20:49
2003.09.01
procedure TForum.Destoy;




   Наверх