![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как установить коррдинаты курсора в МЕМО? [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;