Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Загрузка пользовательской ленты Ribbon  [new]
nataxa23
Member

Откуда: Москва
Сообщений: 127
Если бд открывать обычным способом, то лента отображается, но если вначале запустить бд с удержанием Shift, то лента больше не отображается, пока база не будет закрыта, офигенно не удобно.
Можно ли как то запускать свою личную ленту Ribbon, если база была открыта с нажатым Shift-ом?
12 июл 17, 22:16    [20638702]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 787
nataxa23,

точно нет
лента(ы) грузится на самом старте и Shift это дело обходит, кроме своих родных
13 июл 17, 13:05    [20640405]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
nataxa23
Member

Откуда: Москва
Сообщений: 127
Игортан
точно нет
лента(ы) грузится на самом старте и Shift это дело обходит, кроме своих родных

хм... странно, тогда почему даже если бд была открыта с нажатым Shift-ом, а на форме указать имя своей ленты Ribbon, то при открытии формы пользовательская лента отображается до тех пор, пока форму не закрыть? Она же как то подгружается в этом случае? Правда со стартовой формой так не прокатывает - она просто мелькает один раз, затем снова скрывается.
13 июл 17, 17:02    [20641746]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
MrShin
Member

Откуда:
Сообщений: 1101
А зачем это нужно?
Создайте отладочную конфигурацию, при которой грузится лента вместе с системной лентой, но при этом остальной код не запускается.
Но вообще, конечно, ленту не доделали, много чего нет.
13 июл 17, 18:20    [20642095]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 787
nataxa23
хм... странно, тогда почему даже если бд была открыта с нажатым Shift-ом, а на форме указать имя своей ленты Ribbon, то при открытии формы пользовательская лента отображается до тех пор, пока форму не закрыть? Она же как то подгружается в этом случае? Правда со стартовой формой так не прокатывает - она просто мелькает один раз, затем снова скрывается.

а вот это и мне интересно...
А у вас вкладка для формы - контесктная или основная?
13 июл 17, 19:01    [20642201]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
nataxa23
Member

Откуда: Москва
Сообщений: 127
Игортан
а вот это и мне интересно...
А у вас вкладка для формы - контесктная или основная?

основная. Кстати, а в чем различие между основной и контекстной вкладками?
Если только в том, чтобы скрывать для других форм, то основную вкладку можно так же скрывать, если надо.
MrShin
А зачем это нужно?

если я как админ запускаю с шифтом например для каких то исправлений, то в последствии, мне приходится отображать окно навигационной панели, чтобы открыть нужную форму для проверки и тестироваия. В этой связи пришлось сделать себе даже вывод навигационной панели программно, дабы не лазить каждый раз с перезагрузками в настройки акса.
MrShin
Создайте отладочную конфигурацию, при которой грузится лента вместе с системной лентой, но при этом остальной код не запускается.

не совсем понимаю предложенное, что значит: «Создайте отладочную конфигурацию»?
К тому же, для себя недавно выяснила, что не все опции со вкладками я могу программно по условию включать и отключать. Например в Backstage, что получается ни туда-ни сюда. Кстати именно Игортан помог мне с этим вопросом. Я его здесь задавала в одном посте. Спс ему еще раз.
В xml-коде чтобы по условию сделать доступными для админа и не доступными для юзеров параметры аксеса на вкладке «Файл», я использую:
...
<commands>
    <command idMso="ApplicationOptionsDialog" getEnabled="GetEnabled"/>
</commands>
...

Остальное убираю в backstage. Т.е. короче говоря все какое то половинчатое (50%-ное). Вроде для разработчика дают какие то возможности, но при этом они какие то не серьезные что ли. Не знаешь как приспособиться.
MrShin
Но вообще, конечно, ленту не доделали, много чего нет.

Да и не только ленту.
13 июл 17, 21:38    [20642474]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
Игортан
Member

Откуда: Беларусь
Сообщений: 787
nataxa23,

контекстная - та, что открывается автоматически при открывании формы(например), как из стандартных - меню конструктора форм и т.п.
Я уже писал. Я формирую ленту при старте. Перед тем, как скормить xml самому аксу.
Есть конечно неудобство. Вошел (перед этим форма ввода логина и пароля) в режиме разраба - все есть, своя лента и стандартная.
Запустил от оператора - имеешь только свою ленту(для некоторых свойств приходится перезапускать лишний раз).

Еще поиграйте с
<ribbon startFromScratch="true" >

меняя на false посмотрите на ленту

А вот мне стало интересно. При запуске с шифтом лента не появляется, но, получается, загружена...
и даже после запуска с шифтом есть возможность добраться до самой ленты..
Вероятно у вас лента лежит в таблице UsysRibbon (так вроде называется). Из таблицы с таким именем пользовательская лента подтягивается вообще автоматом, читал где то здесь такое...
13 июл 17, 22:50    [20642609]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
Вакшуль Сергей
Member

Откуда: Харьков
Сообщений: 392
nataxa23
Можно ли как то запускать свою личную ленту Ribbon, если база была открыта с нажатым Shift-ом?


Возможно вас устроит немного другой вариант:
- Галочка "Полный набор меню Access" должна стоять
- в xml коде вашей ленты должно быть указано
ribbon startFromScratch="false"
- запускайте базу не удерживая Shift.

Этим вы добьетесь того, что и ваша лента и стандартная лента Access будут вам доступны одновременно.
Вы же этого хотели, если я вас правильно понял.
14 июл 17, 01:46    [20642776]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
Вакшуль Сергей
Member

Откуда: Харьков
Сообщений: 392
если нужно, добавьте еще галочку "область навигации"
14 июл 17, 01:56    [20642779]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка пользовательской ленты Ribbon  [new]
MrShin
Member

Откуда:
Сообщений: 1101
nataxa23
не совсем понимаю предложенное, что значит: «Создайте отладочную конфигурацию»?

Я делаю так: в опциях программы есть галочка "перейти в отладочный режим", под паролем. Есть 2 версии ленты, разрабатывается только отладочная, в продакшн конвертируется кодом, включая замену бэкстеджа:



+
' в форме опций:

If Me.chkDebugMode Then
    strRibbon = "Swan_DB_debug"
Else
    strRibbon = "Swan_DB"
    
    strBackStage = _
    "  <backstage>" & vbCrLf & _
    "     <button idMso=""FileCloseDatabase"" visible=""true""/>" & vbCrLf & _
    "     <button idMso=""SaveObjectAs"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""FileSaveAsCurrentFileFormat"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""FileOpen"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""FileSave"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabInfo"" visible=""true""/>" & vbCrLf & _
    "     <tab idMso=""TabRecent"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabNew"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabPrint"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabShare"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabHelp"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""ApplicationOptionsDialog"" visible=""true""/>" & vbCrLf & _
    "     <button idMso=""FileExit"" visible=""true""/>" & vbCrLf & _
    "  </backstage>"
    
    strRes = ConvertRibbonDebugToProd("Swan_DB_debug", "Swan_DB", strBackStage)
    If strRes <> "" Then
        Err.Raise vbObjectError + 514, "ConvertRibbonDebugToProd", strRes
    End If
End If

SetAppRibbon strRibbon

MsgBox "You must close and reopen the current database for the specified option to take effect." & vbNewLine & _
        "You can use menu System -> Restart", vbInformation

'---------------------------------------------------------------------------------------
' Procedure : ConvertRibbonDebugToProd
' Purpose   : Converts debug ribbon to production with startFromScratch="true", hidden context system tabs and backstage
'---------------------------------------------------------------------------------------
'
Public Function ConvertRibbonDebugToProd(strRibbonDebug As String, strRibbonProd As String, Optional strBackStage As String = "") As String

    Dim varXML As Variant
    Dim strHideContTabs As String

   On Error GoTo ErrorHandler

  If strRibbonDebug = "" Or strRibbonProd = "" Then
        ConvertRibbonDebugToProd = "Argument(s) empty"
        Exit Function
    End If
    
    varXML = DLookup("RibbonXML", "USysRibbons", "RibbonName='" & strRibbonDebug & "'")
    
    If IsNull(varXML) Then
        ConvertRibbonDebugToProd = "Ribbon """ & strRibbonDebug & """ not found in USysRibbons"
        Exit Function
    End If
    
    'start from scratch
    varXML = Replace(varXML, "startFromScratch=""false""", "startFromScratch=""true""")
    
    'tags
    varXML = Replace(varXML, ":=" & strRibbonDebug & ";", ":=" & strRibbonProd & ";")
    
    'disable contextual system tabs
    
    If InStr(1, varXML, "</contextualTabs>") > 0 Then
        strHideContTabs = _
        "  <tabSet idMso=""TabSetFormDatasheet"" visible=""false"" />" & vbCrLf
        varXML = Replace(varXML, "</contextualTabs>", strHideContTabs & "</contextualTabs>")
    Else
        strHideContTabs = _
        "    <contextualTabs>" & vbCrLf & _
        "      <tabSet idMso=""TabSetFormDatasheet"" visible=""false"" />" & vbCrLf & _
        "    </contextualTabs>" & vbCrLf & "  "
    
        varXML = Replace(varXML, "</ribbon>", strHideContTabs & "</ribbon>")
    End If
    
    'backstage
    If Len(Trim(strBackStage)) > 0 Then
        varXML = Replace(varXML, "</customUI>", strBackStage & vbCrLf & "</customUI>")
    End If

    ' write back new XML
    With DBEngine(0)(0).OpenRecordset("USysRibbons", dbOpenDynaset)
        .FindFirst "[RibbonName] = '" & strRibbonProd & "'"
        If .NoMatch Then
            .AddNew
                ![RibbonName] = strRibbonProd
                ![RibbonXml] = varXML
            .Update
        Else
            .Edit
                ![RibbonXml] = varXML
            .Update
        End If
        .Close
    End With

ExitHere:
   On Error Resume Next
   Exit Function

ErrorHandler:
Select Case Err
Case 0
   Resume Next
Case Else
   LogError Err.Number, Err.Description, Erl, "ConvertRibbonDebugToProd", "basRibbon"
   Resume ExitHere
End Select

    
End Function

'---------------------------------------------------------------------------------------
' Procedure : SetAppRibbon
' Purpose   : Sets the ribbon, lodas to USysRibbons as default application ribbon. Access restart required
'---------------------------------------------------------------------------------------
'
Public Function SetAppRibbon(strRibbon As String) As Boolean

     On Error Resume Next
     CurrentDb.Properties("CustomRibbonID").Value = strRibbon
     If Err.Number = 3270 Then
         Err.Clear
         CurrentDb.Properties.Append CurrentDb.CreateProperty("CustomRibbonID", dbText, strRibbon)
         If Err.Number <> 0 Then GoTo ErrorHandler
     End If
    On Error GoTo ErrorHandler


ExitHere:
   On Error Resume Next
   Exit Function

ErrorHandler:
Select Case Err
Case 0
   Resume Next
Case Else
   LogError Err.Number, Err.Description, Erl, "SetAppRibbon", "basRibbon"
   Resume ExitHere
End Select


End Function


После этого достаточно перезапустить приложение, и все становится доступно безо всяких шифтов. Перезапуск тоже кнопкой в ленте.
14 июл 17, 06:44    [20642840]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить