Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисление координат для контекстного меню / 6 сообщений из 6, страница 1 из 1
04.03.2016, 11:46
    #39185775
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление координат для контекстного меню
Хочу сделать, чтобы контекстное меню появлялось по нажатию кнопки. По умолчанию оно появляется в координатах текущего положения курсора, мне нужно, чтобы оно появлялось прямо под кнопкой.
Есть у кого-нибудь под рукой формулы пересчета относительных координат объекта на форме в координаты, необходимые для задания положения контекстного меню? Я так понимаю, там абсолютные координаты на экране.
...
Рейтинг: 0 / 0
04.03.2016, 13:25
    #39185881
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление координат для контекстного меню
Может хотя бы формула преобразования относительных координат контрола в абсолютные у кого-то есть? Желательно без использования API
...
Рейтинг: 0 / 0
05.03.2016, 00:40
    #39186284
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление координат для контекстного меню
MrShin,
совсем без API, наверное, не получиться :)
...
Рейтинг: 0 / 0
06.03.2016, 06:53
    #39186737
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление координат для контекстного меню
Спасибо большое, то что надо!
...
Рейтинг: 0 / 0
09.03.2016, 12:07
    #39187965
Диам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычисление координат для контекстного меню
MrShin, у вас в коде обязательно переставлять фокус на элемент управления, к которому хотим вывести меню.
Вот функция, которая определяет прямоугольник для любого объекта на форме, даже для Label
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public Sub GetLeftBottom(ctrl As control, frm As Form, ByRef r2 As RECT)
'Определяет левый нижний угол контрола в экранных координатах
  Dim rFPW As RECT 'прямоугольник формы
  Dim rFPC As RECT 'прямоугольник клиентского окна формы
  Dim RecSel As Long 'учитывает, если есть выделение записи у формы
  Dim Zagolov As Long 'учитывает заголовок формы
  
  Dim BorderWidth As Long 'ширина границы
  Dim BorderHeight As Long 'высота границ
  
  With frm
    GetWindowRect .hWnd, rFPW
    GetClientRect .hWnd, rFPC
    RecSel = .CurrentSectionLeft / 15
    Zagolov = .CurrentSectionTop / 15
  End With
  BorderWidth = (rFPW.Right - rFPW.Left - rFPC.Right) / 2 'ширина границы формы-владельца
  BorderHeight = rFPW.Bottom - rFPW.Top - rFPC.Bottom - BorderWidth 'высота границы сверху (снизу =BorderWidth)
  r2.Left = rFPW.Left + BorderWidth + RecSel + ctrl.Left / 15
  r2.Right = r2.Left + ctrl.Width / 15
  r2.Top = rFPW.Top + BorderHeight + Zagolov + ctrl.Top / 15
  r2.Bottom = r2.Top + ctrl.Height / 15
End Sub
...
Рейтинг: 0 / 0
09.03.2016, 13:33
    #39188067
Вычисление координат для контекстного меню
Диам,

как минимум:
1) намертво зашита (hardcoded) магическая константа 15, в то время как это не константа (и, формально, два разных параметра);
2) не учитывается наличие полос прокрутки и их положение.


MrShin,
есть альтернатива - использовать интерфейс IAccessible (подключить библиотеку типов MS Office, в Object Browser включить Show Hidden Members, чтобы увидеть). Тулзу из Windows SDK, демонстрирующую возможности, прилагаю.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисление координат для контекстного меню / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]