Environment
Reflection Desktop (including Pro, for X, for IBM, or for UNIX and OpenVMS) 16.2 or higher
Situation
The legacy-VBA included with Reflection Desktop does not allow the direct addition of buttons to a Host session toolbar, like was possible in Reflection 14. This technical article describes how to add Ribbon buttons to Reflection Desktop 16.2 using legacy-VBA code.
Resolution
Background
Reflection Desktop 16 does not allow the creation of buttons on a
toolbar or Ribbon in the legacy-VBA interface, like Reflection 14 and earlier versions supported. But there
are other methods of adding buttons to the Ribbon in the Reflection
Desktop session which can be used with legacy-Reflection VBA. The
user and VBA code are unable to add buttons at run-time; the buttons have
to be created in advance and saved on the Ribbon or a Toolbar, where the
VBA code can hide or display the button controls as they are needed.
How to add buttons in legacy-VBA with Reflection Desktop 16.2:
Note: The following example is written for IBM host sessions but this same sort of procedure will also work for UNIX and OpenVMS sessions, by substituting a R2W file for the RSF file, and a RDOX file for the RD3X file.
1. Open an existing RSF host session file from Reflection 14 in Reflection Desktop 16.2.
2. Save this RSF session file in the new Reflection Desktop 16.2 format as an RD3X file.
3. In the Reflection Desktop Host session, go to the ‘Appearance” tab and select the UI Designer.
These instructions will place the Buttons on the Session Tab.
5. Select the “Session” tab so it is highlighted in white.
This will add a new chunk to the Ribbon on the right side.
Note the name of this chuck in the Identifier field. For example it could be called “chunk2”.
Set the appropriate Label for this Group.
7. Make sure to click inside the new Group on the ribbon before proceeding.
Notice a new Button is added to the Group.
Note the name of this button in the Identifier field. For example it could be called “button3”.
9. For this new Button control, select the “Select Action” button.
10. From the list of actions select “Run embedded Legacy Reflection Macro” .
Set the appropriate Label and Tooltip for this Button, and an icon if desired.
Uncheck the box which sets the button to be Visible.
Adding the buttons one-after-another in sequence will allow the auto-numbering to be in sequence and make it much easier to work with the buttons from the VBA code.
12. Add Additional buttons as needed by doing the following:
Notice a new Button is added to the Group.
Note the name of this button in the Identifier field. For example it could be called “button4”.
b. For this new Button control, select the “Select Action” button.
c. From the list of actions select “Run embedded Legacy Reflection Macro”.
Set the appropriate Label and Tooltip for this Button, and an icon if desired.
Uncheck the box which sets the button to be Visible.
13. Press the OK button at the bottom of the dialog to save the newly created Ribbon File.
A dialog which says the following will appear:
“A custom version of the current built-in file already exists”
“Please provide a filename for the new file.”
14. Press OK.
For example call it: Reflection2007.3270.Ribbon.NewButtons.xuml
16. Make sure to save the Reflection Host session file (RD3X file) so that the newly created Ribbon will be associated with this host session.
Notice at this point in time there will be a new Group added to the Ribbon on the Session tab, but it will be blank.
This is because the Buttons are not set as visible. We will make the buttons visible when the VBA code runs.
17. Next create VBA code to show/hide/disable/enable the various Button controls using the Identifiers you recorded above.
For this example the Group was called “chunk2” and the Buttons are called “button3” and “button4”.
18. Open the VBA Editor under the Macro tab in the Reflection Desktop host session.
19. Find the modules which contain the existing DefineToolbarButton() methods.
This code will be replaced by something like the following:
Place the following code at the beginning of the Sub()
' Get the new Reflection Desktop Ribbon objects in the new VBA
Dim ui As UiMode
Dim control As UiControl
Dim screenID As String
Set ui = ThisView.UiMode
ui.Reset
Place this code in the Sub() to replace the existing button code
' Make the Ribbon Chunk visible
Set control = ui.GetControlById("chunk2") ‘ note the name of the Group added to the Ribbon earlier
control.Visible = True
control.Enabled = True
' Set the state on the various button controls to be visible
Set control = ui.GetControlById("button3") ‘ note the name of the button added to the Ribbon earlier
control.Visible = True
control.Enabled = True
Set control = ui.GetControlById("button4") ‘ note the name of the button added to the Ribbon earlier
control.Visible = True
control.Enabled = True
OR
Set control = ui.GetControlById("chunk2")
control.Visible = False
control.Enabled = False
' Set the state on the various button controls to be invisible
Set control = ui.GetControlById("button3")
control.Visible = False
control.Enabled = False
Set control = ui.GetControlById("button4")
control.Visible = False
control.Enabled = False
Limitations:
There are some limitations to the preceding VBA code:
1. It will only work with Reflection Desktop 16.2 and higher versions.
2. It will only work reliably when running one Reflection host session at a time.
(unless some additional VBA Project naming configuration is done, which is beyond the scope of this article)
(unless some additional VBA Project naming configuration is done, which is beyond the scope of this article)