CFileDialog code generator
Posted
by Christian Skovdal Andersen
on August 7th, 1998
This macro will take you through a few steps, in a wizard like mode, and create the right code for you.
FileDialogHandler
Sub FileDialogHandler()
'DESCRIPTION: Automatically inserts the statements needed for a file-open/file-save dialog
dim strExt
writeln " {// BLOCK - inserted by CFileDialog macro"
' Ask for the type of dialog
dim bSaveDialog
bSaveDialog = 1
bAnswer = MsgBox("Do you want to make a save dialog (Yes) or an open dialog (No)", vbYesNo)
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " CFileDialog dlg("
if bAnswer = vbYes then
ActiveDocument.Selection = "FALSE"
else
ActiveDocument.Selection = "TRUE"
bSaveDialog = 0
end if
' The extension of the file
strExt = InputBox("What is the extension of the filetype?", "Extension", "txt")
' The name of the file
strName = InputBox("What is the name of the filetype?", "Name", "Text File")
' Only apply a default extension if it is a save-as dialog
if bAnswer = vbYes then
ActiveDocument.Selection = ",""*." & strExt & """"
else
ActiveDocument.Selection = ", """""
end if
ActiveDocument.Selection = ", "
' Only if it is a save-as dialog should a default filename be provided
dim strDefaultName
if bAnswer = vbYes then
strDefaultName = "Untitled." & strExt
strDefName = InputBox("What is the default filename?", "Default Filename", strDefaultName)
ActiveDocument.Selection = """" & strDefaultName & """, "
else
ActiveDocument.Selection = """"", "
end if
dim flags
dim filebuffer
dim bMultiSelectDlg
bMultiSelectDlg = 0
filebuffer = "none"
if bSaveDialog = 0 then
' Spxrg om dialog typen
bAnswer = MsgBox("Do you want a multiple selection dialog?", vbYesNo)
if bAnswer = vbYes then
bMultiSelectDlg = 1
flags = "|OFN_ALLOWMULTISELECT"
filebuffer = InputBox("How big should the selection buffer be?", "Multiple Selection", "10240")
else
flags = ""
end if
end if
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT" & flags & ", "
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " """ & strName & " (*." & strExt & ")|*." & strExt & "|All Files (*.*)|*.*||"", this);"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.NewLine
if filebuffer <> "none" then
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " char cbBuffer[" & filebuffer & "];"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " dlg.m_ofn.nMaxFile = " & filebuffer & ";"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " dlg.m_ofn.lpstrFile = cbBuffer;"
ActiveDocument.Selection.NewLine
end if
' If you want to use a special caption for your dialog
dim caption
if bSaveDialog = 1 then
szDefCaption = "Save As"
else
szDefCaption = "Open"
end if
caption = InputBox("What should the caption of the dialog be? (cancel = default)", "Dialog Caption", szDefCaption)
if caption <> "" then
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " dlg.m_ofn.lpstrTitle = " & caption & ";"
ActiveDocument.Selection.NewLine
end if
' Initial directory to look in
if bSaveDialog = 1 then
szDefCaption = "Save As"
else
szDefCaption = "Open"
end if
caption = InputBox("Initial directory to search for files (cancel = default)? If you're using a string in stead of a variable put the string in quotation marks", "Dialog Caption", "")
if caption <> "" then
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " dlg.m_ofn.lpstrInitialDir = " & caption & ";"
ActiveDocument.Selection.NewLine
end if
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " if (dlg.DoModal() == IDOK)"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " {"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " // Insert your code here..."
ActiveDocument.Selection.NewLine
if bMultiSelectDlg = 1 then
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " // Insert your code here..."
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " POSITION pos;"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " for (pos = dlg.GetStartPosition() ; pos != NULL ; )"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " {"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " // Use dlg.GetNextPathName(pos); to extract filename (including path)"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " {"
ActiveDocument.Selection.NewLine
else
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " // Use dlg.GetPathName() to extract filename (including path);"
ActiveDocument.Selection.NewLine
end if
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " }"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = " } // End block"
ActiveDocument.Selection.NewLine
ActiveDocument.Selection.StartOfLine dsFirstText
'End Recording
End Sub
A note about WriteLn
Because of compatibility reasons (I dont want people to have to copy one macro to use
another), I have not used the function below to write text. However it is pretty handy,
and will make your code look alot better. It does the same as WriteLn from pascal.
This function is not meant to be called by the user, but only from other scripts.
sub writeln(line)
ActiveDocument.Selection.StartOfLine dsFirstText
ActiveDocument.Selection = line
ActiveDocument.Selection.NewLine
end sub

Comments
Excellent Macro
Posted by Legacy on 04/06/2000 12:00amOriginally posted by: Jaz
This is a wonderful macro. Thank you for your work.
ReplySmall update
Posted by Legacy on 05/17/1999 12:00amOriginally posted by: Yehuda Hahn
The code as published puts the dialog title without surrounding quotes. To change this behavior, change the line that reads:
ActiveDocument.Selection = " dlg.m_ofn.lpstrTitle = " & caption & ";"
to
ActiveDocument.Selection = " dlg.m_ofn.lpstrTitle = """ & caption & """;"
Reply