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

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

Координаты курсора в Memo


sers ©   (2002-11-28 09:42:00) 

CaretPos возвращает координаты в терминах символов, а мне надо получить координаты в пикселях. Как это можно сделать ?


sers   (2002-11-28 17:00:00) [1]

Все оказалось гораздо проще:

GetCaretPos(pnt);

где pnt : TPoint;


Игорь Шевченко   (2002-11-28 13:01:00) [2]


> Вот
> второй
> текст.

Edit1.GetText (...)

Возвратит "Вот второй текст". Вот позиция символа в этой строке, с учетом того, что позиция первого символа равна 0 и есть параметр LParam в сообщении EM_POSFROMCHAR, определяющем координаты X и Y этого символа в Edit1


sers   (2002-11-28 12:51:00) [3]

Блин. Да не сообращу я никак. Что значит посимвольная ? Это номер символа ?

Вот первый текст.

Вот
второй
текст.

Посимвольная позиция точки и в том и в другом тексте одна и та же. Однако координаты различные.

Поясни пожалуйста.


Игорь Шевченко   (2002-11-28 11:55:00) [4]

Третий параметр - это позиция в тексте...Посимвольная...


sers   (2002-11-28 11:47:00) [5]

Спасибо. Но ситуацию это не пояснило. Как определяется значение третьего параметра в этом сообщении ?

Может проще самому - получать размер символов в пикселах и умновать кол-во символов на их размер ?


Игорь Шевченко   (2002-11-28 11:06:00) [6]

Zero-based - значит первый символ имеет индекс 0


sers   (2002-11-28 10:59:00) [7]

При увеличении третьего параметра на 1 - значение

SendMessage
(Memo1.Handle,
EM_POSFROMCHAR,
1,
0)

Увеличивается на 6. Как я понимаю это ширина символа. Значит логично бы подставить третьим символом Memo1.CaretPos.X

Но тогда не будет учитываться координата Y.


sers   (2002-11-28 10:55:00) [8]

>> Kudatsky

Мне надо так - пользователь ввел . - и в этом месте создается ListBox, так что это событием мне не подходит

>> Игорь Шевченко

Не разобрался :(

Пробовал так:


procedure TForm1.Memo1KeyPress(.....

Label3.Caption:=IntToStr(Hi(
SendMessage
(Memo1.Handle,
EM_POSFROMCHAR,
1,
0))
);

Label4.Caption:=IntToStr(Lo(
SendMessage
(Memo1.Handle,
EM_POSFROMCHAR,
1,
0))
);


Во первых не уверен, что я вообще правильно делаю. Во вторых не понятно с третьим параметром. В MSDN сказано следующее:

Edit controls and Rich Edit 2.0:

Specifies the zero-based index of the character.

А что это за zero-based index ?


Kudatsky   (2002-11-28 10:26:00) [9]

Создать обработчик OnMouseMove. X и Y - координаты курсора в пикселях.

procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin

end;


Игорь Шевченко   (2002-11-28 10:23:00) [10]

RTFM: EM_xxxx messages


Наверх

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