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

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

Как установить коррдинаты курсора в МЕМО? [D7, XP]


tort ©   (2006-03-29 20:32:00) 

Вечер добрый! Мастера, как можно установить координаты текстового курсора в МЕМО относительно границ клиентской области?


Troan_81   (2006-03-30 13:14:00) [1]

Да... шаман однако :)
А как при появлении формы? Что бы автоматом курсор был например, чуть-чуть правее от положенного?


begin...end   (2006-03-30 13:10:00) [2]

> Первокласник Вася   (30.03.06 13:00) [12]

А у меня не торчит. Кладу на форму memo, в его обработчике OnMouseMove пишу такой код:

procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 with Sender as TMemo do
   SelStart := LoWord(Perform(EM_CHARFROMPOS, 0, MakeLParam(X, Y)));
end;

тыкаю в memo мышкой, и перемещаю курсор мыши. Каретка перемещается вслед за курсором.


Troan_81   (2006-03-30 13:02:00) [3]

Первокоасник прав! Почему курсор на месте? Я так и не понял. Хотя метод Perform - ох как хорош собой и полезен как вишня, а олку почему-то нет :(


Первокласник Вася   (2006-03-30 13:00:00) [4]


А я понимаю так: пиксельные координаты — это координаты, выраженные в пикселях. И если имелись в виду именно они, то см. [3].


Хорошо, тогда почему ничего не происходит? Курсор на месте торчит.


begin...end   (2006-03-30 12:50:00) [5]

> Troan_81   (30.03.06 12:14) [10]

> Как я понимаю - пиксельные координаты - границы мигающего
> текстового курсора в Мемо.

А я понимаю так: пиксельные координаты — это координаты, выраженные в пикселях. И если имелись в виду именно они, то см. [3].

А если имелись в виду "символьные" координаты (т.е. координаты, выраженные в виде номера строки и номера символа в ней), то см. [9].


Troan_81   (2006-03-30 12:14:00) [6]

Разберёмся еще разок, что мне надо.
Как я понимаю - пиксельные координаты - границы мигающего текстового курсора в Мемо. Значит, мне нужно указать, где (на каком месте) будет торчать мигающий курсор.


begin...end   (2006-03-30 12:06:00) [7]

> Troan_81   (30.03.06 11:53) [8]
> В символах, должно быть

А приведённый мной код устанавливает курсор по заданным пиксельным координатам. И приведён он был потому, что изначально шла речь о клиентских координатах.

Если нужно "в символах", то можно использовать Memo.CaretPos := Point(X, Y).


Troan_81   (2006-03-30 11:53:00) [8]

В символах, должно быть :)
Вот мой кусок кода:


procedure TForm1.FormCreate(Sender: TObject);
var x,y: integer;
begin
 x:=10;
 y:=10;
 memo1.setfocus;
 Memo1.SelStart := LoWord(Memo1.Perform(EM_CHARFROMPOS, 0, MakeLParam(X, Y)));


begin...end   (2006-03-30 11:48:00) [9]

> Troan_81   (30.03.06 11:41) [6]

(10, 10) — это координаты, выраженные в чём? В пикселях или в символах? Нужно установить курсор возле 10-го символа 10-й строки, или в точке с пиксельными клиентскими координатами (10, 10)?


Troan_81   (2006-03-30 11:41:00) [10]

В качкестве Y,X я указываю координаты (10,10) соответственно для горизонтали и вертикали. В момент старта проги мемо как был так и остался.
Хочется реализовать работу как в паскале. Указать кооридинаты, откуда можно начинать печатать.


begin...end   (2006-03-30 11:17:00) [11]

> Troan_81   (30.03.06 11:09) [4]

Что именно не получилось, и что передаётся в качестве X, Y?


Troan_81   (2006-03-30 11:09:00) [12]

Доброе утро все мастерам!
begin...end большое тебе спасибо за сообщение! У меня только что-то не получилось :(  Я сначала предварительно передаю фокус ввода, потом пишу как ты мне подсказал.
Взглянь пожалуйста:

 memo1.setfocus;
 {Memo1.SelStart := LoWord(Memo1.Perform(EM_CHARFROMPOS, 0, MakeLParam(X, Y)));}


begin...end   (2006-03-30 08:36:00) [13]

> tort   (29.03.06 20:32)

> как можно установить координаты текстового курсора в МЕМО
> относительно границ клиентской области?

Если понимать вопрос буквально, то так: SetCaretPos(X, Y)(предварительно нужно будет передать memo-контролу фокус ввода).

А если предположить, что позиция курсора должна быть всё же не произвольной, а "привязанной" к ближайшему символу, то так: Memo.SelStart := LoWord(Memo.Perform(EM_CHARFROMPOS, 0, MakeLParam(X, Y))).


tort   (2006-03-30 00:18:00) [14]

Неужели так сложно?


Troan_81   (2006-03-29 20:54:00) [15]

Может, поможете разобраться, как работать с таким вот делом:
 memo1.CaretPos.X;
 memo1.CaretPos.Y;


Наверх

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