![]() |
|
#1
|
|||
|
|||
![]() У меня есть popupmenu и memo, как мне сделать так чтоб меню выскакивало при нажатии на определённую кнопку перед вводимым в мемо словом. Всё остальное понятно, но как определить координаты в мемо чтоб оно вываливалось по ходу набора текста перед последней буквой?
|
#2
|
|||
|
|||
![]() Я думаю тебе надо будет создать новый поток, который будет следить, за вводимым текстом, как в Wordе. Но как именно это сделать я пока не знаю.
|
#3
|
|||
|
|||
![]() Ну надо просто как то прировнять координаты курсора в мемо к координатам мышки или экрана.
|
#4
|
||||
|
||||
![]() Код:
procedure OnKeyDown(~...~); vap _mnupos:TPoint; begin _mnupos.X:=Self.Left+Memo1.Left; _mnupos.Y:=Self.Top+Memo1.Top; If Key='q' Then MopupMenu1.Popup(_mnupos.X,_mnupos.Y); end; — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
![]() M.A.D.M.A.N. Что-то не так, появляется рядом с мемо и в одном и томже месте независимо от курсора в мемо.
Есть CaretPos у мемо но всё равно не получается привязать. Он берет координаты не по символам да? Я похоже запутал я имею ввиду как узнать экранные координаты каретки в мемо. Последний раз редактировалось Qwed86, 28.10.2008 в 15:12. |
#6
|
||||
|
||||
![]() У тебя из-за разных шрифтов менюшка будет выскакивать в разных местах.
А вот код получения курсора я уже увы забыл. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
|||
|
|||
![]() Через попу сделал
Код:
var r: LongInt; r := dbmemo1.Perform(messages.EM_POSFROMCHAR, dbmemo1.selstart, 0); if key=vk_control then PopupMenu1.Popup(Editrecordform.Left+loWord(r)+23, Editrecordform.Top+hiWord(r)+237); |
#8
|
|||
|
|||
![]() При "ручном" вызове попап-меню ему надо передать координаты посного экрана, а CaretPos дает тебе координаты внутри Memo. Соответсвенно, надо их пересчитать в экранные (ClientToScreen).
|
#9
|
|||
|
|||
![]() lmikle Щас читал про ClientToScreen и пробовал с ним работать, но он следует тогда только за мышью и не важно где стоит каретка, не получалось. Вставь код.
|
#10
|
|||
|
|||
![]() Я никогда не пользовался CaretPos, так что не знаю что он тебе возвращает. По сути, тебе надо получить координаты точки курсора в Мемо, перевести их в экранные и потом с полученными координатами вызвать PopupMenu1.Popup().
|