Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

Как установить коррдинаты курсора в МЕМО?   Найти похожие ветки 

 
tort   (2006-03-29 20:32) [0]

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


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

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


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

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


 
begin...end ©   (2006-03-30 08:36) [3]

> tort   (29.03.06 20:32)

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

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

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


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

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

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


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

> Troan_81   (30.03.06 11:09) [4]

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


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

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


 
begin...end ©   (2006-03-30 11:48) [7]

> Troan_81   (30.03.06 11:41) [6]

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


 
Troan_81   (2006-03-30 11:53) [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 12:06) [9]

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

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

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


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

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


 
begin...end ©   (2006-03-30 12:50) [11]

> Troan_81   (30.03.06 12:14) [10]

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

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

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


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


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


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


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

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


 
begin...end ©   (2006-03-30 13:10) [14]

> Первокласник Вася   (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:14) [15]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.063 c
2-1143973368
MVP
2006-04-02 14:22
2006.04.16
Объясните пожалуйста как пользоваться scanline и region?


2-1144021821
Vera
2006-04-03 03:50
2006.04.16
Создание динамических объектов на форме


2-1143925921
AlexeyT
2006-04-02 01:12
2006.04.16
Установить шрифт при печати


3-1140270719
John_Doe
2006-02-18 16:51
2006.04.16
Перенос значения функции AVG из SQL - в Delphi


2-1143631502
49 Cent
2006-03-29 15:25
2006.04.16
Графическое моделирование





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский