Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Программное создание кнопок для форм и отчетов в панелях и меню
 
 автор: MS_4G   (13.04.2009 в 02:02)   личное сообщение
 
 

Здравствуйте все!
Появился вот такой вопросик.

Я занимаюсь разработкой приложений в среде MAccess 2003. В некоторых случаях для удобства пользователей создаются панели и меню, на которые выносятся необходимые формы и отчеты. Вручную это делается элементарно, переносом мышкой соответствующих объектов из списка форм и отчетов, и все работает: пользователь кликает на нужную кнопку и открывает что ему в данный момент надо - форму или отчет. Но возникла необходимость переносить формы и отчеты в панели и меню (создавать соответствующие кнопки) программным путем. Приводимый ниже фрагмент решает задачу частично, он формирует свойства соответствующих кнопок такие же, как при ручном их создании, но программно создаваемые кнопки не работают. Возможно, это связано с тем, что при ручном создании кнопок у них свойство .BuiltIn=True, а при программном создании оно получается False.

Кто знает, подскажите, как выйти из ситуации. Может быть, надо создавать макросы или функции для вызова соответствующих форм/отчетов и передавать их как значение параметра при создании кнопки методом Add? Заранее спасибо.

Sub AddButton()
Dim comBar As CommandBar
Dim CBarCtl As CommandBarControl

' Предполагается, что "Пнл1" уже существует
Set comBar = CommandBars("Пнл1")

Set CBarCtl = comBar.Controls.Add(msoControlButton, , "Форм1", 6)
With CBarCtl
.Caption = "Форм1"
.TooltipText = "Открытие формы 'Форм1'"
.Style = 3
.DescriptionText = "Открытие формы 'Форм1'"
.FaceId = 1837
End With 'CBarCtl

Set CBarCtl = comBar.Controls.Add(msoControlButton, , "Отч1", 12)
With CBarCtl
.Caption = "Отч1"
.TooltipText = "Просмотр отчета 'Отч1'"
.Style = 3
.DescriptionText = "Просмотр отчета 'Отч1'"
.FaceId = 1838
End With 'CBarCtl
End Sub

  Ответить  
 
 автор: Bellerofont   (13.04.2009 в 09:14)   личное сообщение
 
 

Не видно, где вы назначаете действие для кнопки.
Либо используйте свойство кнопки OnAction, либо объявляйте кнопку withevents и используйте событие Click.

  Ответить  
 
 автор: osmor   (13.04.2009 в 12:14)   личное сообщение
 
 

или если хотите использовать "стандартные" операции используйте ID
http://hiprog.com/index.php?option=com_content&task=view&id=726

  Ответить  
 
 автор: MS_4G   (15.04.2009 в 01:36)   личное сообщение
 
 

Здравствуйте все!
Получилось так, что я и сам дотумкал, что надо что-то написать в свойстве OnAction. Тем не менее всем спасибо, кто откликнулся. Ниже я привожу текст скрипта, который предыдущую проблему решает (может быть, там кое-что избыточно, я в этом пока не разбирался, но сейчас это не очень важно), требуемая форма Форм1 открывается и нормально работает, но при этом возникает новая проблема (о чем раньше речи не было), с которой пока не разобрался.
Суть в следующем.
Когда форма Форм1 открывается, вместе с ней должна появляться еще одна панелька Пнл2, в которой помещены некоторые стандартные и пользовательские кнопки, а после завершения работы с формой панелька должна закрываться. Опять же вручную это делается элементарно: заносится имя этой панельки в свойства формы Форм1 (вкладка Другие). Нужно, чтобы панелька открывалась программно и могла быть аналогично использована. В приводимом скрипте панелька Пнл2 открывается (становится видимой), но доступа к ней нет, на нажатие любых кнопок идет сигнал. Enable не помогает. Правда, после закрытия формы Форм1 панелька закрывается. Может быть, проблема в том, что форма Форм1 программно открывается в режиме диалога, но нужно, чтобы эта форма сначала отработала, и только потом приложение пойдет работать дальше.
Заранее спасибо.

Sub AddButton()
Dim comBar As CommandBar
Dim CBarCtl As CommandBarControl

' Предполагается, что "Пнл1" уже существует
Set comBar = CommandBars("Пнл1")

Set CBarCtl = comBar.Controls.Add(msoControlButton, , "Форм1", 6)
With CBarCtl
.Caption = "Форм1"
.TooltipText = "Открытие формы 'Форм1'"
.Style = 3
.DescriptionText = "Открытие формы 'Форм1'"
.FaceId = 1837
.OnAction = "=open_frm('Форм1')"
End With 'CBarCtl
End Sub

Function open_frm(ByVal strName As String)
FormsVis
DoCmd.OpenForm strName, , , , acFormEdit, acDialog
FormsNotVis
End Function

Sub FormsVis()
' Предполагается, что "Пнл2" уже существует
Set comBar = CommandBars("Пнл2")
comBar.Visible = True

For Each CBarCtl In comBar.Controls
CBarCtl.Enabled = True
Next 'For Each CBarCtl In comBar.Controls
End Sub

Sub FormsNotVis()
Set comBar = CommandBars("Пнл2")
comBar.Visible = False
End Sub

  Ответить  
 
 автор: Lukas   (15.04.2009 в 01:50)   личное сообщение
 
 

Если форма открывается acDialog или у нее установлены свойства Modal и PopUp в True, то панели команд недоступны. Используйте контекстные меню.

  Ответить  
 
 автор: MS_4G   (16.04.2009 в 14:25)   личное сообщение
 
 

Спасибо, попробую.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList