надо дальше по строчкам считать сумму TextHeight, потом вычитать VScrollPos
считать длинну начала строки(TextWidth) и вычитать VScrollPos. вот тебе и координаты
кстати, GetCaretPos должно вернуть координаты курсора в пикселах... не помню щаз навскидку...
... << RSDN@Home 1.0 alpha 13 РУЛИТ!!! >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, DemAS, Вы писали:
DAS> Подскажите пожалуйста, как получить координаты курсора в Memo.
Так же как и в любом другом окне. Получаешь сначала экранные координаты — GetCursorPos (или Mouse.CursorPos), затем корректируешь их относительно Memo — ScreenToClient.
V>Так же как и в любом другом окне. Получаешь сначала экранные координаты — GetCursorPos (или Mouse.CursorPos), затем корректируешь их относительно Memo — ScreenToClient.
Ошибся. Не курсора(мыши), а каретки — того прямоугольничка, который в контроле мигает.
Здравствуйте, Vladik, Вы писали:
V>Здравствуйте, DemAS, Вы писали:
DAS>> Ошибся. Не курсора(мыши), а каретки — того прямоугольничка, который в контроле мигает.
V>Сюрприз, сюрприз!
V> Memo->CaretPos;
ВНИМАТЕЛЬНО прочитай самый первый пост — там все написано про Memo->CaretPos
... << RSDN@Home 1.0 alpha 13 РУЛИТ!!! >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
[]
DAS> SendMessage (Memo1->Handle, EM_POSFROMCHAR, x, 0) DAS> DAS> Но не совсем ясно, что использовать в качестве третьего параметра (x). DAS> DAS> Заранее благодарен.
А ты просто не пробовал, когда Memo1 имеет фокус ввода, вызвать
Здравствуйте, Vladik, Вы писали:
V>Здравствуйте, Hacker_Delphi, Вы писали:
HD>>ВНИМАТЕЛЬНО прочитай самый первый пост — там все написано про Memo->CaretPos
V>Тогда поэкспериментировать с функциями DPtoLP/LPtoDP.
Блин, ну зачем экспериментировать, если все украдено до нас?
The GetCaretPos function copies the caret's position, in client coordinates, to the specified POINT structure.
BOOL GetCaretPos(
LPPOINT lpPoint // address of structure to receive coordinates
);
Все... Если окно (в нашем случае экземпляр TMemo) имеет фокус ввода — вызываешь эту функцию и наслаждаешься позицией каретки в клиентских координатах...
А вот зачем именно так сделали, неясно... Поэтому и может вводить в заблуждение похожестью названий (API GetCaretPos и TCustomMemo-property CaretPos)...
Здравствуйте, Flamer, Вы писали:
F>Здравствуйте, Vladik, Вы писали:
F>[]
F>А вот зачем именно так сделали, неясно... Поэтому и может вводить в заблуждение похожестью названий (API GetCaretPos и TCustomMemo-property CaretPos)...
Да нет — все ясно... данное свойство введено для удобства определения координат курсора в символах, а работа в пикселах для простого юзера и не нужна, ибо свойства Canvas у Memo нету
... << RSDN@Home 1.0 alpha 13 РУЛИТ!!! >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, DemAS, Вы писали:
DAS>Да, действительно — GetCaretPos — то что надо.
кстати, не уверен, что оно правильно учитывает положение SCrollBar'ов — почитай Help или поэксперементируй сам
... << RSDN@Home 1.0 alpha 13 РУЛИТ!!! >>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))