![]() |
|
|
#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; |
|
#5
|
|||
|
|||
|
M.A.D.M.A.N. Что-то не так, появляется рядом с мемо и в одном и томже месте независимо от курсора в мемо.
Есть CaretPos у мемо но всё равно не получается привязать. Он берет координаты не по символам да? Я похоже запутал я имею ввиду как узнать экранные координаты каретки в мемо. Последний раз редактировалось Qwed86, 28.10.2008 в 15:12. |
|
#6
|
||||
|
||||
|
У тебя из-за разных шрифтов менюшка будет выскакивать в разных местах.
А вот код получения курсора я уже увы забыл. |
|
#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().
|