Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Позиция курсора в TEdit


Kyau ©   (2007-02-21 23:40:00) 

Как определить? SelStart не соответствует действительности, если есть выделенный текст.


Kyau   (2007-02-22 19:03:00) [1]

Отлично работает, спасибо. Потом покажу, что получилось.


begin...end   (2007-02-22 18:36:00) [2]

> Kyau   (22.02.07 18:02) [9]

Всё же я не совсем понял, о чём идёт речь. Возможно, подойдёт это:

var
 I: Integer;
 P: TSmallPoint;
begin
 I := ...; // Нужная позиция курсора
 P := TSmallPoint(SendMessage(Edit.Handle, EM_POSFROMCHAR, I, 0));
 Edit.SetFocus;
 SetCaretPos(P.X, P.Y)
end


Kyau   (2007-02-22 18:02:00) [3]

> Поместить курсор в нужную позицию? Присвойте нужное значение свойству SelStart. Или нужно решение для случая, когда в edit'е выделение уже есть, и нужно переместить курсор, сохранив выделение?

Когда пользователь мышью будет выделять текст в том месте, где я его нарисую, я должен установить TEdit так, чтобы как будто выделяли на нём. Т.е. если пользователь выделить текст слева направо, то я должен буду установить выделение с такого-то символа и такой-то длины, плюс указать, где должна быть каретка - вначале выделения или после.


begin...end   (2007-02-22 17:47:00) [4]

> Kyau   (22.02.07 12:54) [7]
> А как сделать обратную операцию?

Поместить курсор в нужную позицию? Присвойте нужное значение свойству SelStart. Или нужно решение для случая, когда в edit'е выделение уже есть, и нужно переместить курсор, сохранив выделение?


Kyau   (2007-02-22 12:54:00) [5]

> Прости за нескромность, а зачем? Можешь пояснить?

Мне нужен TEdit со стандартной рекацией на ввод, который я сам нарисую. Чтобы нарисовать, мне нужно всё знать о нём.

>begin...end ©   (22.02.07 09:31) [6]

То, что надо. А как сделать обратную операцию?


begin...end   (2007-02-22 09:31:00) [6]

var
 P: TPoint;
 I: Integer;
begin
 if Edit.Focused then
 begin
   GetCaretPos(P);
   I := SendMessage(Edit.Handle, EM_CHARFROMPOS, 0, Integer(PointToSmallPoint(P)));
   ShowMessageFmt('Позиция мигающей штучки: %d', [I])
 end
end


Германн   (2007-02-22 00:44:00) [7]


> Kyau   (22.02.07 00:41) [4]
>
> Мне нужна позиция мигающей штуки.
>

Прости за нескромность, а зачем? Можешь пояснить?


Kyau   (2007-02-22 00:41:00) [8]

Мне нужна позиция мигающей штуки.


Германн   (2007-02-22 00:28:00) [9]


> Kyau   (21.02.07 23:40)
>
> Как определить? SelStart не соответствует действительности,
>  если есть выделенный текст.
>

Если под "позицией курсора" понимать место в строке куда будет вставлен следущий набранный на клавиатуре символ или куда будет вставлен текст из клипборда, то SelStart полностью соответствует.


Kyau   (2007-02-21 23:45:00) [10]

> Efir ©   (21.02.07 23:41) [1]

Тоже нет. Если выделять справа налево, то врёт.


Efir   (2007-02-21 23:41:00) [11]

А SelStart+SelLength


Наверх

Титульная страница Поиск, карта сайта Написать письмо