Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Динамическое заполнение меню / 4 сообщений из 4, страница 1 из 1
09.09.2004, 07:52:08
    #32686458
skif152
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое заполнение меню
2 вопроса по использованию контролов из MS Office 10 Object Library:
Имеется строка меню под названием "РабочееМеню". Програмно создаю новое меню "Отчеты", который заполняю названиями отчетов:

Dim РабочееМеню As CommandBar, ПунктМеню As CommandBarPopup, Подменю As CommandBarControl

Sub asdфыв()
Dim db As Database, ВсеОтчеты As Container, отчет As Document
Set db = CurrentDb
Set ВсеОтчеты = db.Containers!Reports
Set РабочееМеню = CommandBars("РабочееМеню")
Set ПунктМеню = РабочееМеню.Controls.Add(msoControlPopup, 1)
ПунктМеню.Caption = "Отчёты"
For Each отчет In ВсеОтчеты.Documents
If Not отчет.name Like "Подчинен*" Then
Set Подменю = ПунктМеню.Controls.Add(msoControlButton)
Подменю.Caption = отчет.name
Подменю.OnAction = "fdkh"
End If
Next
End Sub

Так вот, вопрос 1: а имеется ли у меню "Отчеты" (msoControlPopup) события? конкретно нужно отследить нажатие на него левой кнопкой мыши/либо ентером
Вопрос 2: свойство OnAction у пункта меню - текстовое. А хотелось бы передавать в него значения (конкретно - Caption). Конструкции "fdkh(" & Подменю.Caption & ")"не проходят. Это никак нельзя сделать?
В целом хотелось бы при нажатии на меню "Отчеты" динамически заполнять его, ну, и чтоб нормально все работало. Промучался долго, и пока что пришел к выводу, что надо либо использовать контролы других производителей, либо юзать функции апи - а здесь я слаб.
Подскажите, куда рыть.
...
Рейтинг: 0 / 0
09.09.2004, 09:26:13
    #32686528
AlTis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое заполнение меню
Я делаю так (кусок из рабочего кода):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
…
Do While Not rs.EOF

    Set cmbCtl = obj.Controls.Add(msoControlButton, , , , True)

    With cmbCtl
    
        .Caption = rs!UserModuleName
        .OnAction = "=dhRunCommandMenu(""DoCmd.OpenForm('" & _
             rs!UserModuleFormName & "')"")"
   
    End With
    rs.MoveNext
Loop
…

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 'Запуск команды меню 
Public Function dhRunCommandMenu(strParameter As String)

On Error Resume Next

Eval (strParameter)

End Function

Насколько я знаю Hummer даст самый правильный ответ.
У него большой опыт работы с меню.
...
Рейтинг: 0 / 0
09.09.2004, 10:05:33
    #32686614
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое заполнение меню
Динамическое создание меню из БД можно посмотреть тут .
Что касается собственно вопроса:
1. Не надо называть переменные по-русски. Не удобно писать в коде:)
2. Событие OnAction вызывает функцию. Т.е. может быть ОДНА функция, которая в зависимости от имени контрола меню или от его тага, к примеру, выполнит какие-либо действия - нечто вроде этого:

Код: plaintext
MSGBOX "Parameters Test in CommandBarButton: " & CommandBars.ActionControl.Parameter
...
Рейтинг: 0 / 0
09.09.2004, 10:07:17
    #32686618
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическое заполнение меню
2 AlTis
В коде всё верно написано, но для запуска чего-либо в вашей функции я бы использовал либо параметры контрола меню либо его таг.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Динамическое заполнение меню / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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