home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 January / pcwk_01_1999.iso / Wtestowe / Vistdstd / Install / Data.Z / Main.BAS < prev    next >
BASIC Source File  |  1996-09-04  |  8KB  |  299 lines

  1. Attribute VB_Name = "MAIN"
  2. Option Explicit
  3.  
  4. ' WINDOWS.H constants and declarations
  5. '
  6. Global Const HWND_TOPMOST = -1
  7. Global Const HWND_NOTOPMOST = -2
  8. Global Const SWP_NOACTIVATE = &H10
  9. Global Const SWP_SHOWWINDOW = &H40
  10. Global Const SWP_NOSIZE = &H1
  11. Global Const SWP_NOMOVE = &H2
  12.  
  13. Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
  14.  
  15. ' VISIO constants and declarations
  16. '
  17. Global Const S_OBJPRP = 1   ' General properties for object
  18. Global Const R_PAGGEN = 10  ' Page general properties
  19. Global Const C_PGDSZ = 6    ' Drawing size type
  20. Global Const C_PGDST = 7    ' Drawing scale type
  21.  
  22. ' Application title
  23. '
  24. Global Const APP_TITLE = "VISIO Stencil Report Wizard"
  25.  
  26. ' String constants
  27. '
  28. Global Const STR_BACKGROUND = "Background"  ' name of background page
  29.  
  30. ' Error codes and strings
  31. '
  32. Global Const ERR_WARNING = 0
  33. Global Const ERR_FATAL = 1
  34. Global Const ERR_PROMPT = 2
  35.  
  36. Global Const ERR_NOVISIO = "Cannot get Visio object."
  37. Global Const ERR_NOSTENCILS = "Please open one or more stencils before running this add-on."
  38. Global Const ERR_NOMASTERS = "No masters on stencil."
  39. Global Const ERR_INPLACE = "STNDOC unable to run with in-place instance of Visio."
  40. Global Const ERR_OPENFILES = "Too many open files.  Close one or more open files and run this wizard again."
  41. Global Const ERR_NOTEMPLATE = "An error occurred opening the following template: "
  42. Global Const ERR_NOTEMPLATE2 = "Make sure the file exists and is in the appropriate directory."
  43. Global Const VB_ERROR_STRING_OPENFILES = "Too many open files."
  44.  
  45. ' Limits
  46. '
  47. Global Const MAX_ROWS = 6
  48. Global Const MAX_COLS = 6
  49.  
  50. Type RECT
  51.     left As Double
  52.     Top As Double
  53.     Bottom As Double
  54.     Right As Double
  55. End Type
  56.  
  57. Type PAGEMETRICS
  58.     drawingScale As Double      ' drawing scale
  59.     pageScale As Double         ' page scale
  60.     pageHeight As Double        ' page height
  61.     pageWidth As Double         ' page width
  62.  
  63.     Header As Double            ' header height
  64.     Footer As Double            ' footer height
  65.     LeftMargin As Double        ' page margins
  66.     RightMargin As Double
  67.     TopMargin As Double
  68.     BottomMargin As Double
  69.     TextMargin As Double        ' text margins
  70.     LabelWidth As Double        ' label for shape properties
  71.     LabelHeight As Double
  72.     GridMargin As Double        ' grid margins
  73. End Type
  74.  
  75. Type GRIDMETRICS
  76.     masters As Integer          ' masters per page
  77.     rows As Integer
  78.     cols As Integer
  79.     RowHeight As Double
  80.     ColWidth As Double
  81. End Type
  82.  
  83. Type DOCMETRICS
  84.     Filename As String          ' name of stencil
  85.     masters As Integer          ' total number of masters
  86.     PageCount As Integer        ' total number of pages
  87.  
  88.     ' Options
  89.     '
  90.     Header As Integer           ' show header
  91.     Footer As Integer           ' show footer
  92.     gridlines As Integer        ' show gridlines
  93.     properties As Integer       ' show properties
  94.     resize As Integer           ' resize masters to fit grid
  95. End Type
  96.  
  97. Global gDoc As DOCMETRICS
  98. Global gPage As PAGEMETRICS
  99. Global gGrid As GRIDMETRICS
  100. Global gGridArray(0 To MAX_ROWS, 0 To MAX_COLS) As RECT
  101.  
  102. Global gDocDraw As Visio.Document  ' drawing document
  103. Global gWinDraw As Visio.Window    ' drawing window
  104. Global gPageBack As Visio.Page     ' background page
  105.  
  106. 'Form position
  107. Global g_iFormTop As Integer
  108. Global g_iFormLeft As Integer
  109.  
  110. ' Make sure there is a running instance of Visio
  111. '
  112. Sub appConnect()
  113.     Dim stat
  114.  
  115.     If vaoGetObject() <> visOK Then
  116.         stat = appMessage(ERR_FATAL, ERR_NOVISIO)
  117.     End If
  118.  
  119. End Sub
  120.  
  121. ' Application initialization
  122. '
  123. Sub appInit()
  124.     
  125.     ' Initialize document metrics
  126.     docInit
  127.  
  128. End Sub
  129.  
  130. Function appMessage(code, message)
  131.     Dim status
  132.     Dim style
  133.  
  134.     ' Pick icon
  135.     '
  136.     If code = ERR_PROMPT Then
  137.         style = 36  ' Question mark & Yes/No
  138.     Else
  139.         style = 48  ' Exclamation mark & OK
  140.     End If
  141.  
  142.     Beep
  143.     status = MsgBox(message, style, APP_TITLE)
  144.     If code = ERR_FATAL Then
  145.         End     ' Terminate program
  146.     End If
  147.     appMessage = status
  148. End Function
  149.  
  150. Sub CheckIfInPlace()
  151.  
  152.     If g_appVisio.version < 3 Then
  153.         Exit Sub
  154.     Else
  155.         If g_appVisio.Documents.Count Then
  156.             If g_appVisio.Documents(1).inplace Then
  157.                 MsgBox ERR_INPLACE, 48
  158.                 End
  159.             End If
  160.         End If
  161.     End If
  162.  
  163. End Sub
  164.  
  165. Sub docInit()
  166.  
  167.     gDoc.Header = True
  168.     gDoc.Footer = True
  169.     gDoc.gridlines = True
  170.     gDoc.properties = True
  171.     gDoc.resize = True
  172.  
  173. End Sub
  174.  
  175. Sub formInit(f As Form)
  176.     
  177.     ' Set caption
  178.     '
  179.     f.Caption = APP_TITLE
  180.  
  181.     ' Set the form to always be on top
  182.     '
  183.     SetWindowPos f.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
  184.  
  185. End Sub
  186.  
  187. ' Compute grid metrics.
  188. '
  189. Sub gridCompute(ByVal rows, ByVal cols)
  190.     Dim row
  191.     Dim col
  192.     Dim tmp
  193.  
  194.     '   This routine depends on page metrics.
  195.     '
  196.     pageCompute gPageBack
  197.  
  198.     gGrid.masters = rows * cols
  199.  
  200.     '   Switch rows and cols if necessary for best fit on page.
  201.     '
  202.     If (pageIsPortrait(gPageBack) And rows < cols) Or (pageIsLandscape(gPageBack) And cols < rows) Then
  203.         tmp = rows
  204.         rows = cols
  205.         cols = tmp
  206.     End If
  207.  
  208.     gGrid.rows = rows
  209.     gGrid.cols = cols
  210.     gGrid.ColWidth = (gPage.pageWidth - gPage.LeftMargin - gPage.RightMargin) / gGrid.cols
  211.     gGrid.RowHeight = (gPage.pageHeight - gPage.TopMargin - gPage.BottomMargin - gPage.Header - gPage.Footer) / gGrid.rows
  212.  
  213.     For row = 0 To gGrid.rows - 1
  214.         For col = 0 To gGrid.cols - 1
  215.             gGridArray(row, col).left = gPage.LeftMargin + col * gGrid.ColWidth
  216.             gGridArray(row, col).Right = gGridArray(row, col).left + gGrid.ColWidth
  217.             gGridArray(row, col).Bottom = gPage.BottomMargin + gPage.Footer + row * gGrid.RowHeight
  218.             gGridArray(row, col).Top = gGridArray(row, col).Bottom + gGrid.RowHeight
  219.         Next
  220.     Next
  221. End Sub
  222.  
  223. ' Compute page metrics
  224. '
  225. Sub pageCompute(Page As Visio.Page)
  226.     Dim pageSheet As Visio.shape         ' page sheet
  227.  
  228.     ' Page properties
  229.     '
  230.     Set pageSheet = Page.Shapes("ThePage")
  231.     gPage.drawingScale = pageSheet.Cells("DrawingScale")
  232.     gPage.pageScale = pageSheet.Cells("PageScale")
  233.     gPage.pageHeight = pageSheet.Cells("PageHeight")
  234.     gPage.pageWidth = pageSheet.Cells("PageWidth")
  235.  
  236.     ' Computed values
  237.     '
  238.     gPage.Header = PU2DU(0.75)
  239.     gPage.Footer = PU2DU(0.25)
  240.     gPage.LeftMargin = PU2DU(0.5)
  241.     gPage.RightMargin = PU2DU(0.5)
  242.     gPage.TopMargin = PU2DU(0.5)
  243.     gPage.BottomMargin = PU2DU(0.5)
  244.     gPage.TextMargin = 0.125
  245.     gPage.LabelWidth = PU2DU(0.625)
  246.     gPage.LabelHeight = PU2DU(0.75)
  247.     gPage.GridMargin = PU2DU(0.25)
  248.  
  249. End Sub
  250.  
  251. Function pageIsLandscape(Page As Visio.Page)
  252.     Dim pageSheet As Visio.shape
  253.  
  254.     Set pageSheet = Page.Shapes("ThePage")
  255.     If pageSheet.Cells("PageHeight") < pageSheet.Cells("PageWidth") Then
  256.         pageIsLandscape = True
  257.     Else
  258.         pageIsLandscape = False
  259.     End If
  260. End Function
  261.  
  262. Function pageIsPortrait(Page As Visio.Page)
  263.     Dim pageSheet As Visio.shape
  264.  
  265.     Set pageSheet = Page.Shapes("ThePage")
  266.     If pageSheet.Cells("PageHeight") >= pageSheet.Cells("PageWidth") Then
  267.         pageIsPortrait = True
  268.     Else
  269.         pageIsPortrait = False
  270.     End If
  271. End Function
  272.  
  273. '   Change the orientation of the page.
  274. '
  275. Sub pageOrientSwitch(Page As Visio.Page)
  276.     Dim pageSheet As Visio.shape     ' page sheet
  277.     Dim tmp
  278.  
  279.     Set pageSheet = Page.Shapes("ThePage")
  280.     tmp = pageSheet.Cells("PageHeight").formula
  281.     pageSheet.Cells("PageHeight").formula = pageSheet.Cells("PageWidth").formula
  282.     pageSheet.Cells("PageWidth").formula = tmp
  283. End Sub
  284.  
  285. '   Convert page units to drawing units
  286. '
  287. Function PU2DU(pu) As Double
  288.     PU2DU = pu * gPage.drawingScale / gPage.pageScale
  289. End Function
  290.  
  291. Sub shapeBold(shape As Visio.shape)
  292.     Dim style
  293.  
  294.     style = Val(shape.CellsSRC(visSectionCharacter, visRowCharacter, visCharacterStyle))
  295.     style = style Or visBold
  296.     shape.CellsSRC(visSectionCharacter, visRowCharacter, visCharacterStyle).formula = style
  297. End Sub
  298.  
  299.