ACC97: Visual Basic Example for CommonDialog Control Won't Work
ID: Q166291
|
The information in this article applies to:
SYMPTOMS
Advanced: Requires expert coding, interoperability, and multiuser skills.
The example provided in the "CommonDialog control" Help topic does not work
in Microsoft Access 97.
Microsoft Visual Basic version 4.0 and later has the capability of creating
an array of controls. This capability does not exist in Visual Basic for
Applications; therefore, some Visual Basic examples that use control arrays
cannot be fully implemented in Microsoft Access 97. This article discusses
the Visual Basic example for the CommonDialog control, which uses a control
array in the Form_Paint procedure.
This article assumes that you are familiar with Visual Basic for
Applications and with creating Microsoft Access applications using the
programming tools provided with Microsoft Access. For more information
about Visual Basic for Applications, please refer to the "Building
Applications with Microsoft Access 97" manual.
RESOLUTION
If you want to implement the Visual Basic example for the CommonDialog
control, you must exclude or replace the Form_Paint procedure used in the
example, and modify the Command1_Click procedure.
Excluding the Form_Paint Procedure
If you decide to exclude the Form_Paint procedure, you can create the form
controls used in the example manually in Design view of your form:
Form: Form1
-----------------
Option Group:
Name: Frame0
Option Button:
Name: Option1
OptionValue: 1
Option Button:
Name: Option2
OptionValue: 2
Option Button:
Name: Option3
OptionValue: 3
Option Button:
Name: Option4
OptionValue: 4
Option Button:
Name: Option5
OptionValue: 5
Option Button:
Name: Option6
OptionValue: 6
Command Button:
Name: Command1
OnClick: [Event Procedure]
Common Dialog Control:
Name: CommonDialog1
Replacing the Form_Paint Procedure
You can replace the Private Sub Form_Paint procedure with a standard
procedure (a procedure in a module outside the form) that will
programmatically create the form and the option button controls for you.
The following code is an example of how to do this.
NOTE: This code is not considered an efficient solution if you are only
creating a few forms. The following code becomes more useful if you need
many forms. For example, the Microsoft Access Form Wizard uses similar
code.
- Create a new module and type the following procedure:
Sub CreateControls()
Dim frm As Form
Dim ctlOptGrp As Control, ctlOptBtn As Control, ctlLabel As Control
Dim intLeft As Integer, intTop As Integer, intWidth As Integer
Dim intHeight As Integer
Dim i As Integer
'''''''''''''''''''
'Create a new form.
'''''''''''''''''''
Set frm = CreateForm
''''''''''''''''''''''''''''''''''''''''''
'Set coordinates for Option Group control.
''''''''''''''''''''''''''''''''''''''''''
intLeft = 1440 * 1.75
intTop = 1440 * 0.25
intWidth = 1440 * 1.5
intHeight = 1440 * 1
''''''''''''''''''''''''''''''''''''''''''''''
'Create an Option Group in the Detail section.
''''''''''''''''''''''''''''''''''''''''''''''
Set ctlOptGrp = CreateControl(frm.Name, acOptionGroup, acDetail, _
"", "", intLeft, intTop, intWidth, intHeight)
''''''''''''''''''''''''''''''''''''''''''''''''''
'Initialize coordinates for Option Button controls.
''''''''''''''''''''''''''''''''''''''''''''''''''
intLeft = 1440 * 2
intTop = 1440 * 0.5
''''''''''''''''''''''''''''''''''''''''''''
'Create Option Buttons for the Option Group.
''''''''''''''''''''''''''''''''''''''''''''
For i = 1 To 6
Set ctlOptBtn = CreateControl(frm.Name, acOptionButton, _
acDetail, ctlOptGrp.Name, "", intLeft, intTop)
ctlOptBtn.OptionValue = i
intTop = intTop + (1440 * 0.25)
Next i
''''''''''''''''''''''''''''''''''''''''''''''''
'Initialize coordinates for Option Button labels.
''''''''''''''''''''''''''''''''''''''''''''''''
intLeft = 1440 * 2.25
intTop = 1440 * 0.455
''''''''''''''''''''''''''''''''''''''''''''''''''
'Create Option Button Labels for the Option Group.
''''''''''''''''''''''''''''''''''''''''''''''''''
Set ctlLabel = CreateControl(frm.Name, acLabel, acDetail, _
"Option1", "Open", intLeft, intTop)
intTop = intTop + (1440 * 0.25)
Set ctlLabel = CreateControl(frm.Name, acLabel, acDetail, _
"Option2", "Save", intLeft, intTop)
intTop = intTop + (1440 * 0.25)
Set ctlLabel = CreateControl(frm.Name, acLabel, acDetail, _
"Option3", "Color", intLeft, intTop)
intTop = intTop + (1440 * 0.25)
Set ctlLabel = CreateControl(frm.Name, acLabel, acDetail, _
"Option4", "Font", intLeft, intTop)
intTop = intTop + (1440 * 0.25)
Set ctlLabel = CreateControl(frm.Name, acLabel, acDetail, _
"Option5", "Printer", intLeft, intTop)
intTop = intTop + (1440 * 0.25)
Set ctlLabel = CreateControl(frm.Name, acLabel, acDetail, _
"Option6", "Help", intLeft, intTop)
''''''''''''''''''
'Restore the form.
''''''''''''''''''
DoCmd.Restore
End Sub
- Execute the procedure by typing the following line in the Debug window:
CreateControls
- When the form appears in Design view, add command button and common
dialog controls to it:
Command Button:
Name: Command1
OnClick: [Event Procedure]
Common Dialog Control:
Name: CommonDialog1
Modifying the Command1_Click Procedure
Whether you create the form and its controls manually or in code, you must
also modify the Command1_Click procedure in the example so it does not
reference the control array.
Note that the only difference in the following code from that in the Help
example is that references to the Option1 control array are replaced with
the value of the option group, and the name of the Help file is changed to
a Microsoft Access Help file, Acmain80.hlp.
Type the following procedure in the class module of your form:
Private Sub Command1_Click()
If Frame0.Value = 1 Then ' If Open option button selected,
CommonDialog1.ShowOpen ' display Open common dialog box.
ElseIf Frame0.Value = 2 Then ' Or,
CommonDialog1.ShowSave ' display Save common dialog box.
ElseIf Frame0.Value = 3 Then ' Or,
CommonDialog1.ShowColor ' display Color common dialog box.
ElseIf Frame0.Value = 4 Then ' Or,
CommonDialog1.Flags = cdlCFBoth ' Flags property must be set to
' cdlCFBoth, cdlCFPrinterFonts,
' or cdlCFScreenFonts before using
' ShowFont method.
CommonDialog1.ShowFont ' Display Font common dialog box.
ElseIf Frame0.Value = 5 Then ' Or,
CommonDialog1.ShowPrinter ' display Printer common dialog box.
ElseIf Frame0.Value = 6 Then ' Or,
CommonDialog1.HelpFile = "ACMAIN80.HLP"
CommonDialog1.HelpCommand = cdlHelpContents
CommonDialog1.ShowHelp ' Display Visual Basic Help contents topic.
End If
End Sub
MORE INFORMATION
Most of the Visual Basic Help files in Microsoft Access 97 come from the
Microsoft Visual Basic product. When you view the "CommonDialog control"
Help topic, you can click the Example jump at the top of the page to view
the code example. The first procedure in the example is called:
Private Sub Form_Paint ()
A closer look at this procedure indicates that it will create an array of
controls when a form is first opened. In other words, it will
programmatically create option buttons on the form when it opens. This is
indicated by the following code:
For i = 1 To 5
Load Option1(i) ' Add five option buttons to array.
Option1(i).Top = Option1(i - 1).Top + 350
Option1(i).Visible = True
Next i
If you use this example in Microsoft Visual Basic version 4.0 or later, you
will find that the code works flawlessly. However, Visual Basic for
Applications, the programming language that is included with Microsoft
Access 97, is a subset of Microsoft Visual Basic. Visual Basic for
Applications does not have the full functionality found in Microsoft Visual
Basic. The ability to create control arrays is one of the features excluded
from Visual Basic for Applications; therefore, so you cannot use the
example for the CommonDialog control, as written, in a Microsoft Access 97
database.
REFERENCES
For more information about ActiveX components, search the Help Index for
"ActiveX controls."
Additional query words:
common dialog
Keywords : FmrCdbeh
Version : WINDOWS:97
Platform : WINDOWS
Issue type :
|