powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вычисление координат для контекстного меню
6 сообщений из 6, страница 1 из 1
Вычисление координат для контекстного меню
    #39185775
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сделать, чтобы контекстное меню появлялось по нажатию кнопки. По умолчанию оно появляется в координатах текущего положения курсора, мне нужно, чтобы оно появлялось прямо под кнопкой.
Есть у кого-нибудь под рукой формулы пересчета относительных координат объекта на форме в координаты, необходимые для задания положения контекстного меню? Я так понимаю, там абсолютные координаты на экране.
...
Рейтинг: 0 / 0
Вычисление координат для контекстного меню
    #39185881
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может хотя бы формула преобразования относительных координат контрола в абсолютные у кого-то есть? Желательно без использования API
...
Рейтинг: 0 / 0
Вычисление координат для контекстного меню
    #39186284
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,
совсем без API, наверное, не получиться :)
...
Рейтинг: 0 / 0
Вычисление координат для контекстного меню
    #39186737
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое, то что надо!
...
Рейтинг: 0 / 0
Вычисление координат для контекстного меню
    #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
Вычисление координат для контекстного меню
    #39188067
Диам,

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


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


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