Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.017 c
1-1419
bfg1000ke
2003-08-19 14:03
2003.09.01
Печать


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


1-1414
Aleksandr
2003-08-15 14:41
2003.09.01
Как освободить спящий поток?


1-1410
Camedia
2003-08-15 22:22
2003.09.01
Выделение памяти массивам и про Graphic32


1-1501
Viktor Kushnir
2003-08-17 15:45
2003.09.01
Получить текст





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский