powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Для метода ShowPopup определить параметры x, y
24 сообщений из 24, страница 1 из 1
Для метода ShowPopup определить параметры x, y
    #37198081
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день ! Задача в следующем - на форме кнопка. Событие Click() должно отображать меню, но только под кнопкой. Координаты левого угла меню, соответственно, совпадают с координатами левого угла кнопки. Меню создал, но не знаю, какие апи - функции есть для определения левого верхнего угла меню.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198154
DzonyBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksa11 Событие Click() должно отображать меню,
С уважением, Сергей.
А что такое меню? Это будет форма? или что-то другое?
Если форма, то может поможет на загрузке формы ?
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198165
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нельзя просто свойству кнопки "Контекстное меню" дать имя вашего контекстного меню?
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198180
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Просто меню, созданное через коллекцию Commandbars.
2. Не хотелось бы использовать свойство "Контекстное меню", т.к. меню появляется по координатам мыши. В чем и дело, на каком бы месте кнопки не щелкнули, меню должно появиться точно под кнопкой.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198255
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл сказать - тулбар не подходит и, спасибо за подсказку.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198760
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksa11... какие апи - функции есть для определения левого верхнего угла меню.
...
FindWindow, GetWindowRect
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198833
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nord-woolf,
спасибо. Будем пробовать.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198842
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для GetWindowRect требуется hWnd. А CommandBar такого свойства не имеет.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198846
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksa11для GetWindowRect требуется hWnd. А CommandBar такого свойства не имеет.
С уважением, Сергей.
FindWindow
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198918
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nord-woolf,
огромное спасибо. Может есть ссылка примеры ? или может подскажете ? Буду очень признателен.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37198971
Фотография nord-woolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это есть в подвале форума.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
'Позиционирование к активному контролу заимствовано из календарика (с незначительными изменениями):
'*******************************************************************************************
' © Крук Валерий Николаевич, 2007
'   KrukVN
'*******************************************************************************************

Private Declare Function GetFocus Lib "User32" () As Long
Private Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Long
Private Declare Function GetWindowRect Lib "User32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "User32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long

Private Type Dimensions
    Width As Long
    Height As Long
End Type

Private Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
End Type

Const SM_CXSCREEN =  0 
Const SM_CYSCREEN =  1 
Const SWP_NOACTIVATE = &H10

Public Sub Move(WindowName As String)' Сюда передать имя CommandBar
    Dim ctlDate As Control
    Dim hwnd As Long

        hwnd = FindWindow(vbNullString, WindowName)
        If hwnd =  0  Then Exit Sub
        
        'Перемещение к текущему элементу управления
        Set ctlDate = Screen.ActiveControl
        
        Dim ctlRect As RECT                 'Позиция контрола
        Dim frmDimensions As Dimensions     'Размеры формы
        Dim frmRect As RECT                 'Позиция формы
        Dim scrDimensions As Dimensions     'Размеры (разрешение) экрана

        'Определяем позицию текущего контрола
        GetWindowRect GetFocus(), ctlRect

        'Определяем позицию перемещаемой CommandBar
        GetWindowRect hwnd, frmRect
        frmDimensions.Width = frmRect.right - frmRect.left
        frmDimensions.Height = frmRect.bottom - frmRect.top

        'Текущие размеры (разрешение) экрана
        scrDimensions.Width = GetSystemMetrics(SM_CXSCREEN)
        scrDimensions.Height = GetSystemMetrics(SM_CYSCREEN)

        'Если CommandBar от левого края контрола умещается на правой стороне экрана, то...
        If frmDimensions.Width < scrDimensions.Width - ctlRect.left Then
             'левый край формы переместить к левому краю контрола
             frmRect.left = ctlRect.left -  1 
           Else
             'правый край CommandBar к правому краю контрола
             frmRect.left = ctlRect.right - frmDimensions.Width +  1 
        End If
        'Тоже для вертикального расположения
        If frmDimensions.Height < scrDimensions.Height - ctlRect.bottom Then
            frmRect.top = ctlRect.bottom +  2 
        Else
            frmRect.top = ctlRect.top - frmDimensions.Height -  2 
        End If
        'Перемещение в указанную позицию
        SetWindowPos hwnd,  0 , frmRect.left, frmRect.top, frmDimensions.Width, frmDimensions.Height, SWP_NOACTIVATE
End Sub
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199038
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nord-woolf,
человеческое спасибо.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199319
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не работает. Hwnd = 0.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199572
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksa11не работает. Hwnd = 0.
С уважением, Сергей.
кнопка имеет hwnd толко тогда,когда имеет фокус.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199638
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
........
hwnd = FindWindow(vbNullString, WindowName)
If hwnd = 0 Then Exit Sub
........
Hwnd - дескриптор контекстного меню. Я так понимаю.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199669
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksa11........
hwnd = FindWindow(vbNullString, WindowName)
If hwnd = 0 Then Exit Sub
........
Hwnd - дескриптор контекстного меню. Я так понимаю.
С уважением, Сергей.
Да, извините, я не посмотрел прилагаемый код.

Если вы будете использовать MSForms.CommandButton, то

Код: plaintext
1.
2.
3.
4.
Private Sub CommandButton0_Click()
    Dim ctlRect As RECT
    GetWindowRect GetFocus(), ctlRect
    CommandBars("custom1").ShowPopup ctlRect.right, ctlRect.bottom
End Sub
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199684
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за подсказку. Но левый верхний угол меню = нижнему правому углу формы.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199700
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetWindowRect, получается, что работает с окном.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199709
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksa11спасибо за подсказку. Но левый верхний угол меню = нижнему правому углу формы.
С уважением, Сергей.
Вы внимательно прочитали моое сообщение?
Я предложил использовать не Access.CommandButton, а MSForms.CommandButton.
Проверил, меню открывается у правого нижнего угла кнопки.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199716
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е если из ctlRect.right - [левый угол Кнопки], то получится искомый левый угол меню. апи работают с пикселями, а формы Access с твипами. Как тогда перевести твипы в пикселы ? В VB это функция ScaleX. В апи, к сожалению, не силен.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199731
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь за невнимательность. Пробовал кнопку из коллекции MSForms. Не помогает. Вообще, меню появляется в верхнем левом углу.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199785
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksa11Не помогает. Вообще, меню появляется в верхнем левом углу.

Странно, посмотрите пожалуйста приложенный пример.
Какой у вас Access?
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199937
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый ворчун, спасибо за пример. У меня Access 2010. И Ваш пример работает.
С уважением, Сергей.
...
Рейтинг: 0 / 0
Для метода ShowPopup определить параметры x, y
    #37199985
ksa11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый ворчун, спасибо. Все работает. В чем-то я поторопился. Главное то, что теперь не надо использовать тулбар.
С уважением, Сергей.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Для метода ShowPopup определить параметры x, y
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (3): Анонимы (2), Yandex Bot 1 мин.
Пользователи онлайн (12): Анонимы (9), Yandex Bot, Bing Bot 1 мин., CerebroSQL 2 мин.
x
x
Закрыть


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