home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4609 / tx4vb / file.ba_ / file.ba
Text File  |  1994-03-31  |  10KB  |  338 lines

  1. Option Explicit
  2.  
  3. Global Const GET_FILE_HANDLE = 2    ' Constant for FileAttr function
  4.  
  5. Const CONTROL_VERSION& = 20         ' Version number for document files
  6.  
  7. Type FILE_HEADER                    ' Structure for document file header
  8.     lVersion As Long
  9. End Type
  10.  
  11. '-------------------------------------------------------------------------
  12. ' FileOpenProc
  13. '
  14. ' This function is called when the user selects the "Open File..." menu
  15. ' or the corresponding button in the button bar. The function calls
  16. ' the "file open" common dialog box and passes the filename to OpenFile().
  17. '
  18. ' Parameters: -
  19. '-------------------------------------------------------------------------
  20. Sub FileOpenProc ()
  21.     Dim Filename As String
  22.     On Error Resume Next
  23.  
  24.     frmMDIParent.CMDialog1.DialogTitle = "Open file"
  25.     frmMDIParent.CMDialog1.Filename = ""
  26.     frmMDIParent.CMDialog1.Filter = "Text Control Demo (*.txm)|*.txm|Rich Text Format (*.rtf)|*.rtf"
  27.     frmMDIParent.CMDialog1.FilterIndex = 1
  28.     frmMDIParent.CMDialog1.Flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST
  29.     frmMDIParent.CMDialog1.CancelError = True
  30.     frmMDIParent.CMDialog1.Action = DLG_FILE_OPEN
  31.     If Err Then Exit Sub
  32.  
  33.     Filename = frmMDIParent.CMDialog1.Filename
  34.     If UCase$(Right$(Filename, 3)) = "RTF" Then
  35.     OpenFile Filename, RTF_FILE
  36.     Else
  37.     OpenFile Filename, TXM_FILE
  38.     End If
  39. End Sub
  40.  
  41. '-------------------------------------------------------------------------
  42. ' FileSaveAsProc
  43. '
  44. ' gets new text filename and saves text
  45. '-------------------------------------------------------------------------
  46. Sub FileSaveAsProc ()
  47.     Dim Filename As String
  48.  
  49.     Filename = GetSaveFileName()
  50.     If Filename <> "" Then SaveFile (Filename)
  51.  
  52. End Sub
  53.  
  54. '-------------------------------------------------------------------------
  55. ' FileSaveProc
  56. '
  57. ' saves current text
  58. '-------------------------------------------------------------------------
  59. Sub FileSaveProc ()
  60.     Dim Filename As String
  61.  
  62.     If Left(frmMDIParent.ActiveForm.Caption, 8) = "Untitled" Then
  63.     ' The file hasn't been saved yet,
  64.     ' get the filename, then call the
  65.     ' save procedure
  66.     Filename = GetSaveFileName()
  67.     Else
  68.     ' The caption contains the name of the open file
  69.     Filename = frmMDIParent.ActiveForm.Caption
  70.     End If
  71.     ' call the save procedure, if Filename = Empty then
  72.     ' the user selected Cancel in the Save As dialog, otherwise
  73.     ' save the file
  74.     If Filename <> "" Then
  75.     SaveFile Filename
  76.     End If
  77.  
  78. End Sub
  79.  
  80. '-------------------------------------------------------------------------
  81. ' GetSaveFileName
  82. '
  83. ' queries a text filename
  84. '-------------------------------------------------------------------------
  85. Function GetSaveFileName ()
  86.     'Displays a Save As dialog and returns a file name
  87.     'or an empty string if the user cancels
  88.     On Error Resume Next
  89.  
  90.     frmMDIParent.CMDialog1.DialogTitle = "Save As"
  91.     frmMDIParent.CMDialog1.Filter = "Text Control Demo (*.txm)|*.txm|Rich Text Format (*.rtf)|*.rtf"
  92.     frmMDIParent.CMDialog1.DefaultExt = "*.txm"
  93.     frmMDIParent.CMDialog1.Filename = ""
  94.     frmMDIParent.CMDialog1.Flags = OFN_PATHMUSTEXIST Or OFN_OVERWRITEPROMPT
  95.     frmMDIParent.CMDialog1.CancelError = True
  96.     frmMDIParent.CMDialog1.Action = DLG_FILE_SAVE
  97.  
  98.     If Err Then      'User cancelled dialog
  99.     GetSaveFileName = ""
  100.     Else
  101.     GetSaveFileName = frmMDIParent.CMDialog1.Filename
  102.     End If
  103. End Function
  104.  
  105. '-------------------------------------------------------------------------
  106. ' InsertImageProc
  107. '
  108. ' gets image file name and inserts image
  109. '-------------------------------------------------------------------------
  110. Sub InsertImageProc ()
  111.     On Error Resume Next
  112.  
  113.     frmMDIParent.CMDialog1.DialogTitle = "Insert Image"
  114.     frmMDIParent.CMDialog1.Filename = ""
  115.     frmMDIParent.CMDialog1.Filter = "TIFF (*.tif)|*.tif|Bitmap Format (*.bmp *.dib)|*.bmp *.dib|Windows Metafile (*.wmf)|*.wmf"
  116.     frmMDIParent.CMDialog1.FilterIndex = 1
  117.     frmMDIParent.CMDialog1.Flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST
  118.     frmMDIParent.CMDialog1.CancelError = True
  119.     frmMDIParent.CMDialog1.Action = DLG_FILE_OPEN
  120.     If Err Then Exit Sub
  121.  
  122.     frmMDIParent.ActiveForm.TextControl1.ImageInsert = frmMDIParent.CMDialog1.Filename
  123. End Sub
  124.  
  125. '-------------------------------------------------------------------------
  126. ' InsertTextProc
  127. '
  128. ' gets text file name and imports text
  129. '-------------------------------------------------------------------------
  130. Sub InsertTextProc ()
  131.     Dim Filename As String      'current file name
  132.     Dim NameEnd As String
  133.     Dim Text As String          'file contents
  134.     Dim bOpen As Integer        'file open flag
  135.  
  136.     On Error Resume Next
  137.     bOpen = False
  138.  
  139.     NameEnd = UCase$(Right$(frmMDIParent.CMDialog1.Filename, 3))
  140.     If NameEnd = "RTF" Then
  141.     frmMDIParent.CMDialog1.FilterIndex = 2
  142.     Else
  143.     frmMDIParent.CMDialog1.FilterIndex = 1
  144.     If NameEnd <> "TXT" Then
  145.         frmMDIParent.CMDialog1.Filename = ""
  146.     End If
  147.     End If
  148.  
  149.     frmMDIParent.CMDialog1.DialogTitle = "Insert Text"
  150.     frmMDIParent.CMDialog1.Filter = "Text (*.txt)|*.txt|RTF Format (*.rtf)|*.rtf"
  151.     frmMDIParent.CMDialog1.Flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST
  152.     frmMDIParent.CMDialog1.CancelError = True
  153.     frmMDIParent.CMDialog1.Action = DLG_FILE_OPEN
  154.     If Err Then Exit Sub
  155.  
  156.     Filename = frmMDIParent.CMDialog1.Filename
  157.     frmMDIParent.CMDialog1.Filename = frmMDIParent.CMDialog1.Filetitle
  158.  
  159.     screen.MousePointer = HOURGLASS
  160.  
  161.     If UCase$(Right$(Filename, 3)) = "RTF" Then
  162.     frmMDIParent.ActiveForm.TextControl1.RTFImport = Filename
  163.     If Err Then
  164.         MsgBox "Can't import file: " + Filename
  165.     End If
  166.     Else
  167.     Open Filename For Binary As #1
  168.     If Err Then
  169.         MsgBox "Can't open file: " + Filename
  170.         GoTo cleanup_it
  171.     End If
  172.     bOpen = True
  173.  
  174.     'check size limit
  175.  
  176.     If LOF(1) + Len(frmMDIParent.ActiveForm.TextControl1.Text) > 64000 Then
  177.         MsgBox "Textfile too big: " + Filename
  178.         GoTo cleanup_it
  179.     End If
  180.  
  181.     'import text
  182.  
  183.     Text = String$(LOF(1), " ")
  184.     Get #1, , Text
  185.  
  186.     If Err Then
  187.         MsgBox "Can't import file: " + Filename
  188.         GoTo cleanup_it
  189.     End If
  190.     frmMDIParent.ActiveForm.TextControl1.SelText = Text
  191.     End If
  192.  
  193. cleanup_it:
  194.     If bOpen = True Then
  195.     Close #1
  196.     End If
  197.     screen.MousePointer = DEFAULT
  198.  
  199. End Sub
  200.  
  201. '-------------------------------------------------------------------------
  202. ' OpenFile
  203. '
  204. ' Opens the file given in the "filename" parameter, creates a new MDI
  205. ' child and text control and loads the file contents.
  206. '
  207. ' Parameters: FileName: Name of the file to be loaded (string)
  208. '             FileType: Type (TXM_FILE ot RTF_FILE)
  209. '-------------------------------------------------------------------------
  210. Sub OpenFile (Filename As String, FileType As Integer)
  211.     Dim FileHeader As FILE_HEADER
  212.     Dim fIndex As Integer
  213.     Dim bOpen As Integer
  214.     Dim bError As Integer
  215.  
  216.     On Error Resume Next
  217.  
  218.     bOpen = False
  219.     bError = True
  220.  
  221.     ' Create new document window
  222.     screen.MousePointer = HOURGLASS
  223.     fIndex = FindFreeIndex()
  224.     If fIndex = 0 Then GoTo cleanup_of
  225.     document(fIndex).Tag = fIndex
  226.  
  227.     If (FileType = RTF_FILE) Then
  228.     ' Load RTF file
  229.     document(fIndex).TextControl1.RTFImport = Filename
  230.     If Err Then
  231.         MsgBox "Can't load file: " + Filename
  232.         GoTo cleanup_of
  233.     End If
  234.     Else
  235.     ' open the selected file
  236.     Open Filename For Binary As #1
  237.     If Err Then
  238.         MsgBox "Can't open file: " + Filename
  239.         GoTo cleanup_of
  240.     End If
  241.     bOpen = True
  242.  
  243.     ' Read TXM file header
  244.     Get #1, , FileHeader
  245.     If FileHeader.lVersion <> CONTROL_VERSION Then
  246.         MsgBox "Wrong file type: " + Filename
  247.         GoTo cleanup_of
  248.     End If
  249.     ' Use the FileAttr function to get a DOS file handle
  250.     ' from the VisualBasic file number and pass it on to TX
  251.     document(fIndex).TextControl1.Load = FileAttr(1, GET_FILE_HANDLE)
  252.     If Err Then
  253.         MsgBox "Can't load file: " + Filename
  254.         GoTo cleanup_of
  255.     End If
  256.     End If
  257.  
  258.     ' Change form's caption and display new text
  259.     document(fIndex).Caption = UCase$(Filename)
  260.     document(fIndex).TXRuler1.ScaleUnits = SCALE_MM
  261.  
  262.     document(fIndex).Show
  263.     bError = False
  264.  
  265. cleanup_of:
  266.     If bOpen = True Then
  267.     Close #1
  268.     End If
  269.  
  270.     If fIndex <> 0 Then
  271.     FState(fIndex).Ignore = True
  272.     FState(fIndex).Dirty = False
  273.  
  274.     If bError = True Then
  275.         FState(fIndex).Deleted = True
  276.         Unload document(fIndex)
  277.     End If
  278.     End If
  279.     screen.MousePointer = DEFAULT
  280.  
  281. End Sub
  282.  
  283. '-------------------------------------------------------------------------
  284. ' SaveFile
  285. '
  286. ' Saves the contents of the active form in the file file given in the
  287. ' "filename" parameter.
  288. '
  289. ' Parameters: FileName: Name of the file to be loaded (string)
  290. '-------------------------------------------------------------------------
  291. Sub SaveFile (Filename)
  292.     Dim FileHeader As FILE_HEADER
  293.     Dim FileType As Integer
  294.     On Error Resume Next
  295.  
  296.     ' Determine file type from filename extension
  297.     If UCase$(Right$(Filename, 3)) = "RTF" Then
  298.     FileType = RTF_FILE
  299.     Else
  300.     FileType = TXM_FILE
  301.     End If
  302.  
  303.     screen.MousePointer = HOURGLASS
  304.     
  305.     If (FileType = RTF_FILE) Then
  306.     ' Save RTF file
  307.     frmMDIParent.ActiveForm.TextControl1.RTFExport = Filename
  308.     Else
  309.     ' Open the file
  310.     Open Filename For Binary As #1
  311.     If Err Then
  312.         MsgBox "Can't open file: " + Filename
  313.         GoTo cleanup_sf
  314.     End If
  315.     ' Write file header
  316.     FileHeader.lVersion = CONTROL_VERSION
  317.     Put #1, , FileHeader
  318.     ' Write text control contents
  319.     frmMDIParent.ActiveForm.TextControl1.Save = FileAttr(1, GET_FILE_HANDLE)
  320.     Close #1
  321.     End If
  322.     
  323.     If Err Then
  324.     MsgBox "Can't save file: " + Filename
  325.     GoTo cleanup_sf
  326.     End If
  327.  
  328.     ' Set the window caption
  329.     frmMDIParent.ActiveForm.Caption = UCase$(Filename)
  330.     ' reset the dirty flag
  331.     FState(frmMDIParent.ActiveForm.Tag).Dirty = False
  332.  
  333. cleanup_sf:
  334.     screen.MousePointer = DEFAULT
  335.  
  336. End Sub
  337.  
  338.