Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.10.2008, 10:54
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию Popupmenu и Memo

У меня есть popupmenu и memo, как мне сделать так чтоб меню выскакивало при нажатии на определённую кнопку перед вводимым в мемо словом. Всё остальное понятно, но как определить координаты в мемо чтоб оно вываливалось по ходу набора текста перед последней буквой?
Ответить с цитированием
  #2  
Старый 28.10.2008, 11:55
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Я думаю тебе надо будет создать новый поток, который будет следить, за вводимым текстом, как в Wordе. Но как именно это сделать я пока не знаю.
Ответить с цитированием
  #3  
Старый 28.10.2008, 13:06
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

Ну надо просто как то прировнять координаты курсора в мемо к координатам мышки или экрана.
Ответить с цитированием
  #4  
Старый 28.10.2008, 13:47
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
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  
Старый 28.10.2008, 14:16
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

M.A.D.M.A.N. Что-то не так, появляется рядом с мемо и в одном и томже месте независимо от курсора в мемо.
Есть CaretPos у мемо но всё равно не получается привязать. Он берет координаты не по символам да?

Я похоже запутал я имею ввиду как узнать экранные координаты каретки в мемо.

Последний раз редактировалось Qwed86, 28.10.2008 в 15:12.
Ответить с цитированием
  #6  
Старый 28.10.2008, 15:13
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

У тебя из-за разных шрифтов менюшка будет выскакивать в разных местах.
А вот код получения курсора я уже увы забыл.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 28.10.2008, 15:46
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

Через попу сделал
Код:
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  
Старый 28.10.2008, 15:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

При "ручном" вызове попап-меню ему надо передать координаты посного экрана, а CaretPos дает тебе координаты внутри Memo. Соответсвенно, надо их пересчитать в экранные (ClientToScreen).
Ответить с цитированием
  #9  
Старый 28.10.2008, 15:55
Qwed86 Qwed86 вне форума
Новичок
 
Регистрация: 12.09.2008
Сообщения: 66
Репутация: 10
По умолчанию

lmikle Щас читал про ClientToScreen и пробовал с ним работать, но он следует тогда только за мышью и не важно где стоит каретка, не получалось. Вставь код.
Ответить с цитированием
  #10  
Старый 28.10.2008, 15:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я никогда не пользовался CaretPos, так что не знаю что он тебе возвращает. По сути, тебе надо получить координаты точки курсора в Мемо, перевести их в экранные и потом с полученными координатами вызвать PopupMenu1.Popup().
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:48.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025