home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / VISUAL_B / FERRAMEN / VBAPP01 / VB_APPS.TXT < prev    next >
Encoding:
Text File  |  1993-02-24  |  123.0 KB  |  2,903 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.      VB_APPS  (tm)
  15.      -------------------------------------------------------------------
  16.  
  17.      version 1.0 for MS-Windows
  18.  
  19.  
  20.  
  21.  
  22.  
  23.      
  24.  
  25.  
  26.      Instruction Manual
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.      RESOLUTIONS NOW
  40.      P.O. BOX 443
  41.      BLUE ISLAND, 1L. 60406-0443
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.      copyright, 1993  Philip Rodgers, Jr. All rights reserved.
  53.     
  54.      IMPORTANT      Read this license agreement carefully before
  55.                 using this software.   Use of this software
  56.                 binds  you  to  the  terms  of  this  license
  57.                 agreement.   Do not use this software if you
  58.                 do not agree to the terms of this agreement.
  59.  
  60.      LICENSE AGREEMENT - SINGLE USER
  61.  
  62.      The VB_APPS (tm) software is not "Public Domain" or
  63.      "Freeware". VB_APPS is "Shareware".   This is a single user
  64.      license.  Registering VB_APPS for use on more than one
  65.      computer will require a Multiple User or Site License.
  66.  
  67.      1. COPYRIGHT.  VB_APPS is copyrighted 1993 and the copyright
  68.      owner is Philip Rodgers, Jr. d.b.a. Resolutions Now ("Licensor"),
  69.      located at P.O. Box 443, Blue Island, IL. 60406-0443.  All VB_APPS
  70.      source code files and documentation ("the software") are protected
  71.      by United States copyright laws and international treaty provisions.
  72.  
  73.      2. TRADEMARKS.  "VB_APPS", all VB_APPS executable file icons,
  74.      and "Resolutions Now" are trademarks of Philip Rodgers, Jr.
  75.  
  76.      3. GRANT OF LICENSE.   Non-registered users of this software
  77.      are granted a limited license to transfer one copy of the
  78.      non-registered (i.e. unregistered) software to a single hard
  79.      drive on a single computer and produce one copy of all
  80.      documentation for evaluation on a private non- commercial
  81.      basis, for the express purpose of determining whether the
  82.      software is suitable to their needs.  The evaluation period
  83.      is not to exceed 30 days.   At the end of the evaluation
  84.      period, you are required to either register your copy by
  85.      sending the payment as stated in the documentation
  86.      or discontinue using the software and discard it.
  87.  
  88.      Registered users ("Licensee") are granted a non-exclusive
  89.      license to transfer one copy of the registered software to a 
  90.      single hard drive on a single computer and produce one 
  91.      printed copy of all documentation.  Registered users may 
  92.      also make one copy of the software for backup or archival 
  93.      purposes. The software may not be used on a computer 
  94.      that is part of any network.  Licensee shall pay Licensor
  95.      a license fee as stated in the documentation after which 
  96.      Licensee shall become a registered user with a fully paid 
  97.      license. Any other uses require a Multiple User or
  98.      Site License.
  99.  
  100.      Registered users have the right to distribute portions of source
  101.      code for VB_APPS, provided that: (a) the source code is part of
  102.      your software product and functions only in conjunction therewith;
  103.      (b) you do not use Philip Rodgers, Jr's or Resolutions
  104.      Now's name, logo or trademarks to market your software product;
  105.  
  106.      (c) you include a notice of Philip Rodgers Jr.'s copyright of
  107.      VB_APPS in your software and product documentation; and (d) you
  108.      agree that Philip Rodgers, Jr. is not liable for the use or
  109.      distribution of your software product.
  110.  
  111.      You may reproduce and distribute copies of the non-registered
  112.      VB_APPS software, subject to the limitations stated herein, and
  113.      on the express condition that you do not receive any commercial
  114.      benefit or other compensation.  The recipient(s) to whom you
  115.      distribute this software must agree to the terms of this
  116.      Agreement, including the payment of the stated Licensee fees
  117.      to Licensor upon becoming registered users.
  118.  
  119.      Distributors of user-supported software libraries (i.e. operators
  120.      of electronic bulletin boards, shareware vendors) that charge a
  121.      disk fee must obtain written permission of Philip Rodgers, Jr. to
  122.      distribute non-registered copies of VB_APPS.
  123.  
  124.      4. RESTRICTIONS.   Except as provided herein, you may not rent,
  125.      lease, sub-license or otherwise redistribute VB_APPS. You may
  126.      not reverse engineer, decompile or disassemble the software.
  127.  
  128.      U.S. Government Restricted Rights:  Use, duplication or
  129.      disclosure by the U.S. Government is subject to restrictions as
  130.      set forth in subparagraph (c) (1) (ii) of the Rights in Technical
  131.      Data and Computer Software clause at DFARS 252.227-7013 or
  132.      subparagraphs (c) (1) and (2) of the Commercial Computer
  133.      Software - Restricted Rights at 48 CFR 52.227-19, as applicable.
  134.      Contractor/Manufacturer is Resolutions Now, P.O. Box 443,
  135.      Blue Island, IL. 60406-0443.
  136.  
  137.      5. WARRANTY DISCLAIMER. THE VB_APPS SOFTWARE IS LICENSED
  138.      "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
  139.      ANY IMPLIED WARRANTY OF MERCHANTABILITY OR IMPLIED WARRANTY OF
  140.      FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE LICENSOR
  141.      BE LIABLE FOR DAMAGES, INCLUDING ANY LOST PROFITS OR INCIDENTAL
  142.      AND CONSEQUENTIAL DAMAGES, EVEN IF THE LICENSOR HAS BEEN ADVISED
  143.      OF SUCH DAMAGES.
  144.  
  145.      Information in this document is subject to change without
  146.      notice and does not represent a commitment on the part of
  147.      Philip Rodgers, Jr.   No part of the PRINTED instruction
  148.      manual may be reproduced or transmitted in any form or by
  149.      any means, without the express written permission of Philip
  150.      Rodgers, Jr.   In other words, the on-disk manual may not be
  151.      reproduced or distributed in PRINTED (hard copy) form.
  152.  
  153.      Microsoft and MS-DOS are registered trademarks of the
  154.      Microsoft Corporation and MS-Windows (i.e. Windows) are
  155.      trademarks of the Microsoft Corporation.  IBM  and  PC-DOS
  156.      are registered trademarks of International Business Machines.
  157.      DOS refers to both MS-DOS  and PC-DOS operating systems.
  158.      PC Merlin is copyright, 1990 Digital Crypto & Peter Moreton.
  159.  
  160.      Portions of VB_APPS were produced with Visual Basic,
  161.      copyright 1991, Microsoft Corporation.   VB_APPS.HLP
  162.      was produced with Visual Basic Help Compiler, copyright
  163.      1991, Microsoft Corporation.
  164.  
  165.  
  166.  
  167.  
  168.      ''''''''''   N O T E
  169.      '
  170.      ' To register an UNREGISTERED copy of Raffle Do, get a printout
  171.      ' of this manual. Read registration information on page 58. Fill
  172.      ' out and mail the payment form on page 59.
  173.      '
  174.      ' Or, choose Registration from the Help menu of any VB_APPS
  175.      ' program. VB_APPS.HLP will display registration information.
  176.      ' Follow instructions listed on the form.
  177.  
  178.  
  179.  
  180.  
  181.      Address all inquires to:
  182.     
  183.      Resolutions Now
  184.      Customer Support Dept.
  185.      P.O. Box 443
  186.      Blue Island, IL. 60406-0443
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.      Document Number: 1100202
  195.  
  196.      Table of Contents
  197.      =================
  198.  
  199.                 Section One
  200.  
  201.      Overview......................................................6
  202.  
  203.                 Section Two
  204.  
  205.      SetUp.........................................................8
  206.  
  207.                 Section Three
  208.  
  209.      - Add-On Modules -
  210.  
  211.      VHScroll.....................................................13
  212.      EnGarde......................................................15
  213.      NowTimer.....................................................17
  214.  
  215.      - Applications -
  216.  
  217.      Asckey.......................................................21
  218.      GetFont......................................................23
  219.      OpenUp.......................................................26
  220.      VBWorkbench..................................................29
  221.      Cryptokey....................................................38
  222.  
  223.                 Section Four
  224.  
  225.      - Visual Basic Functions -
  226.  
  227.      Visual Basic Programming Solutions...........................45
  228.  
  229.                 Section Five
  230.  
  231.      Other Resolutions Now software
  232.         Raffle Do.................................................56
  233.         Installz..................................................57
  234.  
  235.      REGISTRATION INFORMATION.....................................58
  236.  
  237.      PAYMENT FORM.................................................59
  238.  
  239.                 - Page 6 -
  240.  
  241.      SECTION ONE
  242.      ===========
  243.  
  244.      OVERVIEW
  245.      --------
  246.  
  247.      VB_APPS is a library of applications and add-on modules for Visual
  248.      Basic for Windows programmers. VB_APPS applications provide helpful
  249.      development tools right out of the box.
  250.  
  251.      The unregistered copy of VB_APPS has all code compiled into
  252.      executable programs. Registered users receive all code.
  253.  
  254.      VB_APPS is divided into two categories:
  255.  
  256.      A.  Add-on modules and applications (executable files):
  257.  
  258.        1. VHScroll - scroll bar code for enhanced object movement
  259.        2. EnGarde - simple password add-on with user-changeable
  260.               passwords
  261.        3. NowTimer - sample module with multiple real-time timers
  262.              that operate simultaneously
  263.        4. Asckey - program to retrieve ASCII value of keyboard keys
  264.            and vise versa
  265.        5. Getfont - program to get screen and printer font names
  266.        6. OpenUp - program to quickly open one or more program(s)
  267.            simultaneously
  268.        7. VBWorkbench - log program
  269.        8. Cryptokey - Windows interface program for PC Merlin, a
  270.               DOS encryption program
  271.  
  272.      B.  VB_APPS also includes functions (methods and tips on operating
  273.          Visual Basic more effectively).  Functions includes:
  274.  
  275.        1.  How to correctly remove system menu commands
  276.        2.  Increasing speed of your applications on start up by
  277.            considering statements which effect other procedures
  278.        3.  DLL to abort printing to your dot matrix printer
  279.        4.  Saving files under the DOS format
  280.        5.  How to handle vbrun100.dll when distributing your applications
  281.        6.  Setting text boxes to limit user input
  282.        7.  Handling long directory path names in dialog box label
  283.            captions
  284.  
  285.      The first category is a progression of add-on modules and simple one
  286.      form Apps to more advanced, multiple form Apps that use code from
  287.      most add-on modules. This method lets users learn in a step by step,
  288.      progressive manner. Useful tips, some of which are used in the Apps,
  289.      follow and provide solutions to some not so common problems.
  290.  
  291.                 - Page 7 -
  292.  
  293.      Help Facility
  294.      -------------
  295.  
  296.      An on-line Windows help file with registration information is
  297.      available for VB_APPS. Choose Help + Registration to instantly
  298.      retrieve information regarding registration.
  299.  
  300.      A standard help file is not included since users may alter most
  301.      applications and add-on modules.  Discussion of all VB_APPS
  302.      software in this instruction manual provide sufficient knowledge.
  303.  
  304.      Shortcut and Quick Access Keys
  305.      ------------------------------
  306.  
  307.      Shortcut Keys
  308.  
  309.      Some menu commands have short cut keys. Browse through all menus
  310.      to locate them.
  311.  
  312.      Quick Access Keys
  313.  
  314.      Some menu commands have Quick Access Keys. Browse through all
  315.      menus to locate them. All add-on modules and applications do have
  316.      two common Quick Access Keys:
  317.  
  318.      F1:    open vb_apps.hlp to get registration information
  319.      F12:       end operation a VB_APPS add-on module or application
  320.  
  321.  
  322.      Printers Supported
  323.      ------------------
  324.  
  325.      VB_APPS supports ALL printers that support MS-Windows 3.0 and
  326.      higher.  There are two applications that print documents: 
  327.      VB Workbench and GetFont.  These applications are designed
  328.      to use with dot matrix printers.  You can alter print code
  329.      to produce full size documents on other printers.
  330.  
  331.  
  332.      Tables
  333.      ======
  334.  
  335.      Tables with Controls and CtlName properties (property tables),
  336.      Procedures and Descriptions (procedure tables), as seen in
  337.      the Visual Basic programmer's guide, are included for relevant
  338.      programs.   Some VB users may prefer using these tables rather
  339.      than browsing through all comments in the code.
  340.  
  341.      Additional tables state all forms and modules.
  342.  
  343.                 - Page 8 -
  344.  
  345.      SECTION TWO
  346.      ============
  347.  
  348.      SETUP
  349.      -----
  350.  
  351.      Before installing VB_APPS, ensure that your computer and
  352.      operating system meet minimum hardware and system requirements.
  353.  
  354.      Hardware and System Requirements
  355.      --------------------------------
  356.  
  357.      - IBM or compatible PC with a 80386 processor or higher
  358.      - A hard disk with 480 KB of available space for the
  359.        unregistered copy; (470 KB for the registered copy)
  360.      - 2MB of RAM
  361.      - A mouse (optional)
  362.      - An EGA or higher resolution monitor
  363.      - MS-DOS or PC-DOS 3.1 or higher  (or an equivalent DOS that
  364.        supports Windows)
  365.      - MS-Windows 3.0 or higher, operating in standard or enhanced
  366.        mode
  367.      - Visual Basic 1.0+ for MS-Windows, including vbrun100.dll
  368.      - Getfont and VBW use a dot matrix printer compatible with
  369.        MS-Windows 3.0 or higher
  370.      - Cryptokey requires PC-Merlin 2.0+
  371.  
  372.      NOTE that VB_APPS was tested on the minimum MS-Windows 3.x system
  373.      requirements to ensure compatibility for all VB_APPS users. A 386SX
  374.      16MHz PC with 2MB 100nS RAM, no co-processor, 40MB HD, MS-DOS 3.31,
  375.      MS-Windows 3.0 and 3.1, a mouse and a 0.31 dp VGA monitor w/256KB
  376.      VRAM were used. No accelerator cards were used.
  377.  
  378.      Files Included On-Disk
  379.      ----------------------
  380.  
  381.      The unregistered copy of VB_APPS includes one or two 5.25" or
  382.      one 3.5" floppy diskette(s) with these files:
  383.  
  384.      - asckey.exe    VB_APPS executable files
  385.      - engarde.exe
  386.      - getfont.exe
  387.      - nowtimer.exe
  388.      - openup.exe
  389.      - vhscroll.exe
  390.      - vbw.exe
  391.      - ckey.exe
  392.      - file01.eng    external files: file01.eng is for engarde.exe,
  393.      - openfile.vbn    openfile.vbn is for openup.exe, exefiles.vbn is
  394.      - exefiles.vbn    for vbw.exe, and ckey.fle and merlin.pif are for
  395.      - ckey.fle         ckey.exe.
  396.      - merlin.pif
  397.  
  398.                 - Page 9 -
  399.  
  400.      - vb_apps.hlp    Windows help program for vb_apps
  401.      - vb_apps.txt    this document
  402.      - installz.exe    program to install/uninstall VB_APPS files
  403.      - readme.1st    text file with the latest information on VB_APPS
  404.      - vendor.doc    shareware vendor and BBS SysOp information
  405.  
  406.  
  407.      The registered copy of VB_APPS includes two 5.25" or one
  408.      3.5" floppy diskette(s) with these files:
  409.  
  410.      - vhscroll files: scroll.mak, scroll.frm
  411.      - engarde files: engarde.mak, engarde.frm
  412.      - nowtimer files: nowtimer.mak, nowtimer.frm
  413.      - asckey files: asckey.mak, asckey.frm
  414.      - getfont files: getfont.mak, getfont.bas, gtfntbas.bas, getfont.frm,
  415.                       prntdlg.frm.
  416.      - openup files: openup.mak, openglbl.bas, openup.frm, options.frm
  417.      - vbworkbench files: wrkbench.mak, glbl_wrk.bas, wrk.bas,
  418.                           wrkbench.frm, wrkopen.frm, wrk_time.frm,
  419.                           openbox2.frm, prnt.frm
  420.      - cryptokey files: ckey.mak, ckey.bas, ckey_mdl.bas, ckey.frm,
  421.                         newbox.frm, destbox.frm
  422.      - file01.eng    external files: file01.eng is for engarde.exe,
  423.      - openfile.vbn    openfile.vbn is for openup.exe, exefiles.vbn is
  424.      - exefiles.vbn    for vbw.exe, and ckey.fle and merlin.pif are for
  425.      - ckey.fle         ckey.exe.
  426.      - merlin.pif
  427.      - vb_apps.hlp    Windows help program for vb_apps
  428.      - vb_apps.txt    this document
  429.      - installz.exe    program to install/uninstall VB_APPS files
  430.      - readme.1st    text file with the latest information on VB_APPS
  431.      - vendor.doc    shareware vendor and BBS SysOp information
  432.  
  433.  
  434.      Before installing VB_APPS, ensure that all files listed above are
  435.      included on the VB_APPS disk(s).   Consult your DOS or MS-
  436.      Windows user's guide on how to view files on a diskette.  If any
  437.      files are missing, do not attempt to operate any program. Contact
  438.      Customer Support Dept. of Resolutions Now or the vendor that sold
  439.      you VB_APPS.
  440.  
  441.  
  442.      NOTE THAT AN EXTERNAL PROGRAM FILE MUST BE IN THE SAME DIRECTORY AS
  443.      THE ACTIVE EXECUTABLE FILE OR THE "VB" DIRECTORY (I.E. "C:\VB").
  444.      VB_APPS.HLP MUST ALSO BE IN THE SAME DIRECTORY AS THE ACTIVE
  445.      EXECUTABLE FILE OR THE "VB" DIRECTORY.
  446.  
  447.      AS STATED ON PAGE 11, YOU MUST INCLUDE THE PATH ON THE COMMAND LINE
  448.      UNLESS THE CURRENT DIRECTORY CONTAINS THE EXECUTABLE FILE. THIS IS
  449.      TRUE, REGARDLESS OF THE INCLUSION OF THE PATH IN THE AUTOEXEC.BAT
  450.      FILE.
  451.  
  452.                 - Page 10 -
  453.  
  454.      Backup Copies
  455.      -------------
  456.  
  457.      Before installing or running VB_APPS, make a backup copy of the
  458.      VB_APPS diskette(s).  Consult your DOS or MS-Windows user's
  459.      guide on how to make a copy of a diskette.
  460.  
  461.  
  462.  
  463.  
  464.      Read Documents Before Running VB_APPS
  465.      ---------------------------------------
  466.  
  467.      Read this document and readme.1st before running VB_APPS.
  468.  
  469.  
  470.  
  471.  
  472.      Running Installation Program    (INSTALLZ.EXE)
  473.      ----------------------------------------------
  474.  
  475.      Installz.exe installs (copies) or deletes VB_APPS files. Your
  476.      autoexec.bat, config.sys and win.ini files WILL NOT be altered.
  477.      ONLY INSTALL VB_APPS FROM THE DOS PROMPT.
  478.  
  479.      To install VB_APPS from DOS:
  480.  
  481.      1.  Insert VB_APPS disk 1 into correct floppy drive.
  482.      2.  Switch to the drive with Disk 1.
  483.      3.  At the prompt type INSTALLZ X ,where X is the number of program
  484.          disks to be installed. then press the return key. Only include
  485.          a number if you are installing more than one disk.
  486.      4.  Installz begins. From the main menu box, choose 1 of 2 options:
  487.  
  488.      OPTION 1 starts a query session to set source and destination
  489.      drives and directories.  Next, a full screen menu appears.  Answer
  490.      "Y" to confirm choices and initiate installation.  Answer "N" to
  491.      change a choice.  Once installation begins, Installz displays file
  492.      copy information.  Installz will then end and switch to the
  493.      destination drive and directory.
  494.  
  495.      OPTION 2 displays a query box.   Answer "Y" to start a query
  496.      session to retrieve drive and directory with an old (Unregistered)
  497.      copy of VB_APPS.  ALL  files in this directory are deleted when
  498.      installation begins.  Installz will then proceed as stated above.
  499.  
  500.      To delete VB_APPS files, run Installz by typing INSTALLZ without
  501.      any parameters.  Run Installz from the VB_APPS disk or move it to
  502.      another directory or drive before deleting VB_APPS files.  From
  503.      the main menu, choose option 3.
  504.  
  505.                 - Page 11 -
  506.  
  507.      OPTION 3 starts a query session to retrieve drive and directory
  508.      with VB_APPS files for deletion.  Only VB_APPS files must be in
  509.      this directory. All files in the stated directory are displayed.
  510.      A message states that all files shown will be deleted.  Confirm
  511.      deletion and the DOS Delete command will prompt you to confirm
  512.      deletion again.  Answer "Y" to delete files and its directory.
  513.      Installz will then end.
  514.  
  515.      All errors are self-explanatory. To correct most errors, Installz
  516.      displays a menu with options. Errors can also occur when copying
  517.      or deleting files and directories. In this case, DOS will display
  518.      an error message.  Installz  will  then  abort  and  go  to  the
  519.      destination drive.
  520.  
  521.      You should then review the contents of the directory with installed
  522.      VB_APPS files.  This directory should contain the files listed on
  523.      pages 8-9. Remedies: (1) run Installz again. Choose option 2 to remove
  524.      files before installing VB_APPS again. (2) Use DOS to copy necessary
  525.      files to destination drive and directories.
  526.  
  527.      DO NOT change the name of any file. A VB_APPS executable file will
  528.      not operate properly if a file name is changed.  Only move an
  529.      executable file if you include its external program file (if any).
  530.  
  531.  
  532.      Running a VB_APPS executable file
  533.      ---------------------------------
  534.  
  535.      You can run an executable file directly from DOS or Windows. Only
  536.      run an executable file if the corresponding external program file
  537.      is installed in the correct directory. See pages 8-9.
  538.  
  539.      To run an executable file from DOS:
  540.          1.  At the prompt of the root directory on the correct drive
  541.              (i.e. c:>), type WIN X\YY.EXE, then press the return key.
  542.             Note that (X) is the path (i.e. c:\dos) and YY.EXE is the
  543.             name of a VB_APPS executable file.
  544.          Or,
  545.          1.  Go to the directory where you installed a VB_APPS executable
  546.             file.  At its prompt, type WIN YY.EXE.  Again, note that
  547.             YY.EXE is the name of a VB_APPS executable file.
  548.  
  549.      To run an executable file from Windows:
  550.          1.  In the File or Program Manager, choose Run from the
  551.              File menu.
  552.          2.  Type X\YY.EXE and click the OK button in the Run dialog box.
  553.             Again, note that (X) is the path and YY.EXE is the name of a
  554.             VB_APPS executable file.
  555.  
  556.                 - Page 12 -
  557.  
  558.          Or,
  559.          1.  In the File Manager, go to the directory where you installed
  560.             a VB_APPS executable file and double click on the executable
  561.             file filename.
  562.          Or,
  563.          1.  In the Program Manger, go to the group window where you
  564.             installed a VB_APPS executable file icon.
  565.          2.  Double click on the icon.
  566.  
  567.                 - Page 13 -
  568.      SECTION THREE
  569.      =============
  570.  
  571.      VHSCROLL
  572.      ========
  573.  
  574.      VHScroll permits precise picture box or object movement with the
  575.      VScroll & HScroll bars. VHScroll is useful for users that do not
  576.      have add-on software with enhanced scroll bar features.  You can:
  577.  
  578.      1. Move a picture box left and right, up and down and it can return
  579.         to its exact initial positions.
  580.      2. Use TabStops on scroll bars in re-sizeable forms. VHScroll places
  581.         the cursor blink (blinking action that appears when scroll bar
  582.         has the focus) in the cursor box (scroll bar sliding lever).
  583.  
  584.      The single form sample App shows what VHScroll can do.  A letter-size
  585.      on-screen picture box in another picture box is controlled by both
  586.      vertical and horizontal scroll bars.  Move either scroll bar and the
  587.      corresponding Change procedure is activated.
  588.  
  589.      The following VScroll_Change procedure from VHScroll illustrates
  590.      how the vertical scroll bar moves Picture2 up or down.  In this
  591.      example, Picture2.Top = 2440 and VScroll1.Value = 0 on start up.
  592.      All values are in twips.  The user moves the VHScroll cursor box
  593.      one space (120 twips).
  594.  
  595.      Code from VHScroll                       Results of above example
  596.      ------------------                       ------------------------
  597.      Sub VScroll_Change ()
  598.        CurVal2% = VScroll1.Value              CurVal2% = 120
  599.        m% = CurVal2% - OldVal2%               m% = 120 - 0 = 120
  600.        Picture2.Top=Picture2.Top - 12 * m%    Picture2.Top = 2440 - 12
  601.                                                           * 120 = 1000
  602.        OldVal22% = CurVal2%                     OldVal2% = 120
  603.      End Sub
  604.  
  605.      Picture2.Top is now 1000.  It moved down by 1440.  Next, the user
  606.      moves the VScroll1 cursor box back to the topmost position (0 twips;
  607.      value = 0).  The results are:
  608.  
  609.      CurVal2% = 0
  610.      m% = 0 - 120 = -120
  611.      Picture2.Top = 1000 - 12 * (-120) = 1000 - (-1440) = 2440
  612.      OldVal2% = 0
  613.  
  614.      Picture2.Top is now at its initial Top position of 2440 twips.
  615.  
  616.      You can now use scroll bar TabStops with re sizeable forms. VHScroll
  617.      accomplishes this by setting the Visible property of the scroll
  618.      bars to zero in the Form_Resize procedure of the main window.  The
  619.      scroll bars alter their height or width and the Visible property
  620.      of the scroll bars is set to True in the same procedure.  This
  621.  
  622.                 - Page 14 -
  623.  
  624.      causes the scroll bar with the focus to loose the focus.  The
  625.      corresponding LostFocus procedure is then activated and the Set
  626.      Focus command resets the cursor blink in the scroll bar cursor box.
  627.  
  628.      Note - the only code required are the Dim statements, HScroll1_Change,
  629.             VScroll1_Change, HScroll1_LostFocus, VScroll1_LostFocus and
  630.             Form_Resize.  The values for VScroll1 & HScroll1 are (all
  631.             settings can be altered):
  632.  
  633.                               VScroll1           HScroll1
  634.             ---------------------------------------------
  635.             Max               600                400
  636.             Min               0                  0
  637.             LargeChange       60                 40
  638.             SmallChange       10                 10
  639.             TabStop           True               True
  640.  
  641.  
  642.      Review the following tables for more information.
  643.  
  644.      Controls         CtlName property
  645.      ---------------------------------
  646.      Picture box      Picture1
  647.      Picture box      Picture2
  648.      Label            Label1
  649.      Label            Label2
  650.      Label            Label3
  651.      Text box         Text1
  652.      VScroll          VScroll1
  653.      HScroll          HScroll1
  654.  
  655.  
  656.      Procedure                 Description
  657.      ----------------------------------------------------------------
  658.      HScroll1_Change            Moves Picture2 left or right.
  659.      HScroll1_LostFocus        Resets cursor blink in HScroll1 after
  660.                                Form1 re-sizes, if HScroll1 had focus.
  661.      VScroll1_Change            Moves Picture2 up or down.
  662.      VScroll1_LostFocus        Resets cursor blink in VScroll1 after
  663.                                Form1 re-sizes, if VScroll1 had focus.
  664.      Form_Load                 Shows title box and sets Picture1 and 2.
  665.      Form_Resize               Resets all controls if WindowState <> 1.
  666.      Menu_File1_Click          Ends App.
  667.      Menu_Help1_Click          Shows Help file with registration info
  668.                                or About box.
  669.      Title_MsgBox              Displays either Title box or About box.
  670.  
  671.  
  672.      Form              FormName          Module           Module Name
  673.      --------------------------          ----------------------------
  674.      Scroll.frm         Form1             make             Scroll.mak
  675.  
  676.                 - Page 15 -
  677.  
  678.      ENGARDE
  679.      =======
  680.  
  681.      NOTE:  EnGarde is only intended as an example of how to design and
  682.             implement a simple password add-on module. Do not use EnGarde
  683.             with confidential or mission critical applications.  Neither
  684.             Resolutions Now nor the author of EnGarde accepts any
  685.             responsibility for the use of EnGarde.
  686.  
  687.      EnGarde is a simple password protection add-on.  Insert it into the
  688.      Form_Load procedure of the main window of your App.  EnGarde code
  689.      must be the first code in this procedure.  EnGarde has user-defined
  690.      passwords.  You can alter its code to:
  691.  
  692.      - Exclude the external file, file01.eng, and use a built in non-
  693.        configurable password.
  694.      - Add more code to allow multiple valid user passwords.
  695.      - Add more code to make EnGarde operate in a network environment.
  696.  
  697.      When adding EnGarde in your App, only use the code in the EnGarde
  698.      Form_Load procedure.  A review of the code follows.
  699.  
  700.      EnGarde is designed as one or a series of input boxes. This greatly
  701.      reduces the bytes required.  An external file stores a password,
  702.      in random access mode.  The information appears garbled when
  703.      viewed.  You can rewrite EnGarde to include forms.
  704.  
  705.      MessageOne is the initial message shown in the main input box
  706.      when the user first encounters EnGarde.  MessageTwo appears
  707.      every time thereafter when the user encounters EnGarde.
  708.  
  709.      EnGarde then searches for file01.eng in the current directory
  710.      or the "VB" directory.  If not found, it displays an error
  711.      message and aborts.  If found, two variables are retrieved.
  712.      Initpass$ is initially set to empty so MessageOne will display
  713.      when the user first encounters EnGarde.
  714.  
  715.      On subsequent uses, EnGarde will give the user two chances to input
  716.      the correct password.  If the user enters the character "1", EnGarde
  717.      will prompt the user to enter the correct password in order to set
  718.      a new password.  This will only allow valid users to change a
  719.      password.  The user has two chances to enter the correct password.
  720.  
  721.      In the sample App, when a correct password is entered or a new
  722.      password is entered, the Form_Load procedure is exited and the App
  723.      is opened.  If your App has code other than EnGarde in this procedure,
  724.      place it directly after the line labeled "15".  Note that EnGarde
  725.      will not write to file01.eng unless the password is changed or the
  726.      sample App resets the contents of the external file.
  727.  
  728.                 - Page 16 -
  729.  
  730.      The single form sample App titled "U.S. Dept. of Fun" consists of a
  731.      multiple line text box.  Users can insert text and password protect
  732.      it.  EnGarde serves as an add-on module to accomplish this task.
  733.  
  734.      EnGarde is also used in Cryptokey (ckey.exe).  See page 38 or run
  735.      ckey.exe to see how it is used.
  736.  
  737.           Note that the originally set password is "1234", not
  738.           including the quotation marks.
  739.  
  740.      The property and procedure tables will not be listed because they
  741.      do not effect the use of EnGarde.  Additional tables:
  742.  
  743.  
  744.      Form              FormName          Module           Module Name
  745.      --------------------------          ----------------------------
  746.  
  747.      EnGarde.frm       Form1             make             EnGarde.mak
  748.  
  749.                 - Page 17 -
  750.  
  751.      NOWTIMER
  752.      ========
  753.  
  754.      NowTimer is a single form App with timers that display time in
  755.      hours, minutes and seconds (real time).  NowTimer consists of two
  756.      timers that operate simultaneously and independently.  Use NowTimer
  757.      to time events such as:
  758.  
  759.      - User responses
  760.      - An application start up and exit timer - log application use
  761.      - Beginning, delaying or ending any application execution
  762.  
  763.      To use NowTimer, click the Start button of either timer.  The
  764.      corresponding label caption will display the time as its caption
  765.      every second. Click the Stop button to end timing.  If you click
  766.      a Start button again, the timer restarts counting at zero. Delete
  767.      the last line of code in Command2_Click or Command4_Click pro-
  768.      cedure if you do not want to reset the corresponding timer to
  769.      zero when starting it.
  770.  
  771.      VB Workbench (VBW) uses NowTimer code to log time.  VBW adds
  772.      a pause function through a menu command.  See VBW instructions
  773.      on page 29 and its code for more information.  An overview of
  774.      NowTimer follows.
  775.  
  776.      On start up, both timers with their controls are displayed.  When
  777.      you click either Start button, TimerX_Timer procedure is implemented.
  778.      Note that the interval for each timer control is set to 1000 (one
  779.      second).  The Timer command actually increments the time.  The
  780.      TimerX_Timer procedure is used to continuously update the real
  781.      time clock display in the corresponding label.  The procedure is
  782.      continuously executed, even if the user is performing another task
  783.      (use VBW to confirm this).
  784.  
  785.      Nowtimer theoretically times up to 99:59:59 before an error occurs.
  786.      But it is set for a maximum time of 23:59:59. You can add code to
  787.      time events for days or years. A good example is the log program
  788.      of VBW.
  789.  
  790.      To prevent errors, when you click a Start button, it is disabled
  791.      until you click its corresponding Stop button.  Clicking a Stop
  792.      button disables the TimerX_Timer procedure.  In your App, you can
  793.      use any action to start or stop a NowTimer - not just command
  794.      buttons.
  795.  
  796.      To create more timers, create an additional Timer control for each
  797.      timer.  Assign a variable statement (i.e. Starter! = Timer) to
  798.      initiate  the  timer.   Its  is  a  local  or  global  declaration.
  799.      Place this statement where an action will start the timer (loading
  800.      a form, clicking a button, etc.).  TimerX_Timer procedure must
  801.      include the same code as shown in either Timer procedure.  Note
  802.      the different names for variables in both Timer procedures.
  803.  
  804.                 - Page 18 -
  805.  
  806.      Depending  on  the  speed  of  your  computer,  time may appear to
  807.      increment erratically from time to time. Since Nowtimer calculates
  808.      time using the Timer command, it is accessing your computer's clock.
  809.      Actually, Visual Basic is correctly compensating a lag that may
  810.      occur when executing the log code. Therefore, the time is accurate.
  811.      Test the time every minute by comparing the log time with your
  812.      favorite clock.
  813.  
  814.      You may not like the periodic erratic nature of the log timing. If
  815.      so, try the code below in place of the log time code. Note that
  816.      you must have a fast computer to accurately log time. Or else,
  817.      log time will continuously fall behind.   If you do not have
  818.      a fast computer, but still want to try the code below, change the
  819.      Timer control's interval. It is originally set to 1000 (1 second).
  820.      800 or 950 may suffice.
  821.  
  822.      In the first sample, the time is incremented by a variable (a!).
  823.      (a!) is a local or global variable. No timer command or its
  824.      variables are used (Starter! and StopNow!).
  825.  
  826.  
  827.      Sub Timer1_Timer ()
  828.        a! =a! + 1             'a! is seconds elapsed.
  829.        '86400 is a 24 hr. period. Timer max is 23:59:59, so reset to 0.
  830.        If a! > 86400 Then a! = 0     'Same code and comments as in
  831.        b! = a! / 86400               'NowTimer.
  832.        c! = Format$(b!, hh:mm:ss)    '
  833.        Label1.Caption = c$           '
  834.      End If
  835.  
  836.  
  837.      The only code added to Command2_Click procedure is:
  838.        a! = 0     'Resets counter to 0 when user clicks the stop button.
  839.  
  840.  
  841.      Another alternative is to replace the Format$ command with other
  842.      code. The length of the of code to follow may seem too long. But
  843.      Visual  Basic  appeared  to  execute  it faster than the Format$
  844.      command. Anyway, if the erratic display continues, you may have
  845.      learned something - how the Format$ command works in this case.
  846.      Finally, you can include the above code.
  847.  
  848.  
  849.      Sub Timer1_Timer ()
  850.        '                        'Replace code starting at b! = a!/86400.
  851.        '
  852.        b! = Fix((a!/3600)       'Get the hours.
  853.        c! = ((a!/3600) - b! * 3600
  854.        d! = Fix(c!/60)          'Get the minutes.
  855.        e! = ((c!/60) - d!) * 60 'Get the seconds.
  856.  
  857.                 - Page 19 -
  858.  
  859.        'Formats the hours; includes leading zero if necessary.
  860.        If b! < 10 Then
  861.           CurHour$ = "0" + Right$(Str$(b!),1)
  862.  
  863.        Else
  864.           CurHour$ = Right$(Str$(b!),2)
  865.        End If
  866.  
  867.        'Formats the minutes; includes leading zero if necessary.
  868.        If d! < 10 Then
  869.           CurMinute$ = "0" + Right$(Str$(d!),1)
  870.        Else
  871.           CurMinute$ = Right$(Str$(d!),2)
  872.        End If
  873.  
  874.        'Formats the seconds; includes leading zero if necessary.
  875.        If e! < 10 Then
  876.           CurSecond$ = "0" + Right$(Str$(e!),1)
  877.        Else
  878.           CurSecond$ = Right$(Str$(e!),2)
  879.        End If
  880.  
  881.        'Display the time in real time.
  882.        Label1.Caption = CurHour$ + ":" + CurMinute$ + ":" + CurMinute$
  883.  
  884.  
  885.      The tables for NowTimer controls and procedures follow.
  886.  
  887.  
  888.      Controls            CtlName property          Caption property
  889.      -----------------------------------------------------------
  890.  
  891.      Frame box           Frame1                    Timer 1
  892.      Frame box           Frame2                    Timer 2
  893.      Command button      Command1                  &Start
  894.      Command button      Command2                  S&top
  895.      Command button      Command3                  St&art
  896.      Command button      Command4                  St&op
  897.      Label               Label1
  898.      Label               Label2
  899.  
  900.  
  901.  
  902.      Procedure                 Description
  903.      ----------------------------------------------------------------
  904.  
  905.      Command1_Click            Initiates timing through Timer1_Timer
  906.                                procedure.
  907.      Command2_Click            Stops timing of Timer1_Timer procedure.
  908.  
  909.                 - Page 20 -
  910.  
  911.      Procedure                 Description
  912.      ----------------------------------------------------------------
  913.  
  914.      Timer1_Timer              Converts time to real time and displays
  915.                                it in Label1.
  916.      Command3_Click            Initiates timing through Timer2_Timer
  917.                                procedure.
  918.      Command4_Click            Stops timing of Timer2_Timer procedure.
  919.      Timer2_Timer              Converts time to real time and displays
  920.                                it in Label2.
  921.      Menu_File1_Click          Ends App.
  922.      Menu_Help1_Click          Shows Help file with registration info
  923.                                or About box.
  924.      Title_MsgBox              Displays either Title box or About box.
  925.  
  926.  
  927.  
  928.      Form              FormName          Module           Module Name
  929.      --------------------------          ----------------------------
  930.  
  931.      NowTimer.frm      Form1             make             nowtimer.mak
  932.  
  933.                 - Page 21 -
  934.  
  935.      ASCKEY
  936.      ======
  937.  
  938.      Asckey is a single form App that a) converts keyboard input to its
  939.      ASCII equivalent or b) converts ASCII values to its character
  940.      equivalent.  ASCII values are given only for a to z, 0 to 9, and
  941.      some special key characters.  Asckey is particularly useful to
  942.      Windows programmers that need to quickly retrieve these values.
  943.      An overview of its code and instructions for its use follow.
  944.  
  945.      When the App is loaded, Picture1 (which contains all character-to-
  946.      ASCII controls) is enabled and displayed.  Its menu command, File+
  947.      Find ASCII Value is disabled since it is opened.  See Case 0 under
  948.      Menu_File1_Click procedure.  Captions in Label1 give instructions,
  949.      which is to enter a valid keyboard character.  Its ASCII value is
  950.      immediately displayed.  The keyboard character is then highlighted
  951.      so you can enter another one without clearing it. The Text1_Change
  952.      and Text1_KeyPress procedure accomplishes this. If you enter a
  953.      character and no valid ASCII value is displayed, then there may
  954.      not be a valid ASCII value.  If a block type character appears as
  955.      the ASCII value, then Visual Basic or Windows does not support it.
  956.  
  957.      Choose File + Find Character and Picture1 will hide.  Picture2
  958.      displays.  Its menu command is disabled and File + Find ASCII Value
  959.      menu command is now enabled.  Code in Case 1 under Menu_File1_Click
  960.      procedure accomplishes this.  The ASCII-to-character interface is
  961.      slightly different.  Input data of no more than three numbers, then
  962.      click the OK button to get the character equivalent.  Text2_Change
  963.      and Text2_KeyPress procedures ensure that only 1 to 3 characters
  964.      are entered in the Text2 box.  The Command1_Click procedure converts
  965.      the ASCII entry into a character and displays it.  The text in the
  966.      Text2 box is highlighted to allow another entry without clearing the
  967.      text box. The property, procedure and additional information tables
  968.      follow.
  969.  
  970.  
  971.      Controls         CtlName property
  972.      ---------------------------------
  973.  
  974.      Picture box      Picture1
  975.      Picture box      Picture2
  976.      Label            Label1
  977.      Label            Label2
  978.      Label            Label3
  979.      Label            Label4
  980.      Command button   Command1
  981.      Text box         Text1
  982.      Text box         Text2
  983.  
  984.                 - Page 22 -
  985.  
  986.  
  987.      Procedure                 Description
  988.      ----------------------------------------------------------------
  989.  
  990.      Form_Load                 Shows title box.
  991.      Menu_File1_Click          Displays char-to-ASCII or ASCII-to-char
  992.                                picture box; ends App.
  993.      Command1_Click            For ASCII-to-char, converts ASCII to
  994.                                char and displays it.
  995.      Text1_Change              Highlights contents.
  996.      Text1_KeyPress            Converts char-to-ASCII.
  997.      Text2_Change              Gets length of contents and passes it to
  998.                                Text2_KeyPress to ensure maximum input
  999.                                of 3 characters.
  1000.      Text2_KeyPress            Allows only a maximum of 3 characters or
  1001.                                backspace character to pass to Text2 box.
  1002.      Menu_Help1_Click          Shows Help file with registration info
  1003.                                or About box.
  1004.      Title_MsgBox              Displays either Title box or About box.
  1005.  
  1006.  
  1007.  
  1008.  
  1009.      Form              FormName          Module           Module Name
  1010.      ----------------------------        ----------------------------
  1011.  
  1012.      Asckey.frm        Asckey            make             Asckey.mak
  1013.  
  1014.                 - Page 23 -
  1015.  
  1016.      GETFONT
  1017.      =======
  1018.  
  1019.      Getfont is a two form App that retrieves all available active screen
  1020.      or printer font names.  These font names are displayed on-screen or
  1021.      the user can get a print out.
  1022.  
  1023.      Getfont is useful for any user that wants to retrieve available
  1024.      font names.  Programmers can get the valid font name for use with
  1025.      the FontName command.  The FontName command under Windows 3.1 will
  1026.      use any font name retrieved, even font names with more than one
  1027.      word.
  1028.  
  1029.      Getfont is easy to use.  To display all available active screen
  1030.      font names, click on the "Screen Fonts" button.  To display all
  1031.      active available printer font names, click on the "Printer Fonts"
  1032.      button.  Both buttons are located in the button ribbon bar, below
  1033.      the menu bar.  Font names are loaded into the Combo1 list box.
  1034.      Choose a fontname from the Combo list box and its font type is
  1035.      displayed in label 3.  If printer font names are loaded, Visual
  1036.      Basic may not recognize a matching screen font type.  Label 4
  1037.      will state this if it occurs.
  1038.  
  1039.      To printout active font names, choose File + Print... .  A print
  1040.      dialog box appears.  Ensure that the correct printer is active and
  1041.      set to portrait mode.
  1042.  
  1043.      The option button that corresponds to the currently loaded font
  1044.      names (screen or printer) is checked.  You can choose to print
  1045.      either.  If the check box is not checked, only the font names are
  1046.      printed in (4 columns).  If the check box is checked, the font names
  1047.      are printed in the corresponding font types.  Font types are printed
  1048.      in one column.
  1049.  
  1050.      If screen font types are printing and Visual Basic does not handle
  1051.      a matching printer font type, an asterisk denoting this is placed
  1052.      before the font name.  Total number of font names are also listed.
  1053.  
  1054.      Font handling is limited by Visual Basic. Examples: a) GetFont can
  1055.      not distinguish and list TTF or another add-on font that is not a
  1056.      standard Windows 3.0 font; b) GetFont cannot distinguish between
  1057.      the different font styles (both Courier Light and Courier Extra
  1058.      Light may display in the combo list box as "Courier").
  1059.  
  1060.      Another limitation of Visual Basic: open Getfont and retrieve the
  1061.      font names of the printer on port LPT1. Now make the printer on
  1062.      port LPT2 active, then try to retrieve the font names from that
  1063.      printer. GetFont cannot get them. You must restart the application,
  1064.      then retrieve the font names.
  1065.  
  1066.                 - Page 24 -
  1067.  
  1068.      Sample times to print font names:
  1069.         - 35 seconds to start printing 50 printer font types to an Epson
  1070.           LQ compatible printer.
  1071.         - 2 minutes to start printing 41 printer font types to an HP II
  1072.           compatible laser printer.
  1073.         - 2 minutes and 20 seconds to start printing 34 screen font
  1074.           types to an HP II compatible laser printer.
  1075.  
  1076.      As noted in the Overview Section, under Printers Supported, Getfont
  1077.      is set to print on a dot matrix printer.  It will also print
  1078.      proportionally well on a laser printer.  Note that font names,
  1079.      whether displayed in the Combo1 list box or printed, are displayed
  1080.      and printed alphabetically. The property, procedure and additional
  1081.      tables follow.
  1082.  
  1083.  
  1084.      Controls         CtlName property          Caption
  1085.      -------------------------------------------------------
  1086.  
  1087.      Getfont.frm
  1088.      ------------
  1089.  
  1090.      Command button   Command1                  &Screen Fonts
  1091.      Command button   Command2                  &Printer Fonts
  1092.      Picture box      Picture1
  1093.  
  1094.      PrntDlg.frm
  1095.      -----------
  1096.  
  1097.      Command button   Command1                  O&K
  1098.      Command button   Command2                  &CANCEL
  1099.      Option button    Option1                   &Screen Fonts
  1100.      Option button    Option2                   &Printer Fonts
  1101.      Check box        Check1                    Print Font &Type
  1102.      Timer            Timer1
  1103.  
  1104.  
  1105.  
  1106.      Procedure                 Description
  1107.      ----------------------------------------------------------------
  1108.  
  1109.      Getfont.frm
  1110.      -----------
  1111.  
  1112.      Command1_Click            Load all available screen font names
  1113.                                into the Combo1 list box.
  1114.      Command2_Click            Load all available printer font names
  1115.                                into the Combo1 list box.
  1116.      Form_Load                 Show title box, center form and load
  1117.                                screen font names into Combo1 list box.
  1118.      Form_UnLoad               End App if System Menu's Close command
  1119.                                is chosen.
  1120.  
  1121.                 - Page 25 -
  1122.  
  1123.      Procedure                 Description
  1124.      ----------------------------------------------------------------
  1125.  
  1126.      Combo1_Click              Show font type (of font name clicked on
  1127.                                in Combo1 list box) in label 3.
  1128.      Menu_File1_Click          Show Print dialog box or end App.
  1129.      Menu_Help1_Click          Shows Help file with registration info
  1130.                                or About box.
  1131.      Title_MsgBox              Displays either Title box or About box.
  1132.  
  1133.  
  1134.      PrntDlg.frm
  1135.      -----------
  1136.  
  1137.      Command1_Click            OK button clicked. Proceed with printing.
  1138.                                Hide form and enable Timer1_Timer procedure.
  1139.      Command2_Click            Cancel button clicked. Cancel printing
  1140.                                request and unload form.
  1141.      Form_Load                 Centers print dialog box.
  1142.      Timer1_Timer              Print font names or font names and types.
  1143.                                Allows enough time for prntdlg.frm to hide.
  1144.      Get_XYPosition            Set new CurrentX and Y positions to print
  1145.                                or display next font name.
  1146.      Set_InitXYPos             Set initial CurrentX and Y to print or
  1147.                                print first font name on next printed page.
  1148.  
  1149.  
  1150.  
  1151.      Form              FormName          Module           Module Name
  1152.      -----------------------------       ----------------------------
  1153.  
  1154.      Getfont.frm       Getfont            make             Getfont.mak
  1155.      PrntDlg.frm       PrntDlg            global           Getfont.bas
  1156.  
  1157.                 - Page 26 -
  1158.  
  1159.      OPENUP
  1160.      ======
  1161.  
  1162.      Openup is a two form App that runs one or more (.exe, .bat, .com
  1163.      or .pif) program(s) simultaneously.  On start up, the main window
  1164.      displays in the bottom, left corner.  It is small and in that
  1165.      location so users can open and operate other Apps while Openup
  1166.      remains on-screen and easily accessible.   If you choose Options +
  1167.      Open All On Start up, you can minimize Openup on start up.  Choose
  1168.      Options + Minimize On File Open to minimize Openup when opening
  1169.      a file(s).
  1170.  
  1171.      App names are displayed in the list box on start up.  An external
  1172.      file, openfile.vbn, contains the names of executable files that
  1173.      display in the list box (the main list box).  Users can choose
  1174.      File + Open + All to open all files in the list box simultaneously,
  1175.      choose File + Open + File to open the highlighted file name only, or
  1176.      choose File + Open + Insert Choice to open a file not listed.
  1177.      When you choose the latter, an input box will display.  Insert a
  1178.      file name, including a path if necessary.
  1179.  
  1180.      You can add more file names or delete one or more from the list box.
  1181.      To do so, choose Options + Update File List.  The Update File List
  1182.      dialog box appears.  It is a modified open dialog box.  You can
  1183.      move to another directory or drive the same way you would in any
  1184.      open dialog box.  The main difference is that users cannot insert
  1185.      a directory, drive or file name.  Choose a file name by clicking
  1186.      on the File List box.
  1187.  
  1188.      Four option buttons at the bottom of the dialog box determine the
  1189.      action taken when the user clicks the OK button.  Users can open
  1190.      an App, add an App name to the main list box, open an App and add
  1191.      its name to the main list box, or delete a file name from the main
  1192.      list box.
  1193.  
  1194.      Users can also run all Apps listed in the list box on start up.
  1195.      Choose Options + Open All On Start up.  That menu command is then
  1196.      checked. On start up, all Apps listed in the main list box are
  1197.      opened, until you choose this menu command again to cancel it.
  1198.      The property, procedure and additional information tables follow.
  1199.  
  1200.  
  1201.      Controls         CtlName property          Caption
  1202.      -------------------------------------------------------
  1203.  
  1204.      Openup.frm
  1205.      ----------
  1206.  
  1207.      List box         List1
  1208.      Label            Label1                    Open:
  1209.      Label            Label2
  1210.  
  1211.                 - Page 27 -
  1212.  
  1213.      Options.frm
  1214.      -----------
  1215.  
  1216.      Frame box        Frame1
  1217.      Option button    Option1                   Open
  1218.      Option button    Option2                   Add
  1219.      Option button    Option3                   Open+Add
  1220.      Option button    Option4                   Delete
  1221.      Command button   Command1                  O&K
  1222.      Command button   Command2                  &CANCEL
  1223.      Directory box    Dir1
  1224.      Drive box        Drive1
  1225.      File box         File1
  1226.      List box         List1
  1227.      Label            Label1
  1228.      Label            Label2
  1229.      Label            Label3
  1230.      Label            Label4
  1231.  
  1232.  
  1233.      Procedure                 Description
  1234.      ----------------------------------------------------------------
  1235.  
  1236.      Openup.frm
  1237.      -----------
  1238.  
  1239.      Form_Load                 Show title box, position main window and
  1240.                                retrieve file names from external file.
  1241.      Form_Unload               Goes to Update_Exefiles_List before
  1242.                                ending Openup.
  1243.      List1_Click               Highlight file name in list box so choosing
  1244.                                File + Open + File Shown can open it.
  1245.      List1_DblClick            Highlights and opens file name in list box.
  1246.      Menu_File1_Click          Choose Open to display sub menu or Exit
  1247.                                to end Openup.
  1248.      Menu_File2_Click          Select Case to open one or all files.
  1249.      Menu_Help1_Click          Shows Help file with registration info
  1250.                                or About box.
  1251.      Menu_Options1_Click       Select Case to show Update File List
  1252.                                dialog box, set Open All Files On Start up
  1253.                                option, or set Openup windowstate when
  1254.                                opening a file(s).
  1255.      Run_Program               Opens App highlighted in main list box.
  1256.      Exit_Program              Goes to Update_ExeFiles_List before
  1257.                                ending Openup.
  1258.      Update_Exefiles_List      Open external file and save all file names
  1259.                                in main list box.
  1260.      Open_All_Files            Open all Apps whose file names are in
  1261.                                main list box, if any changes were made.
  1262.      Open_File_Not_Listed      Display "Insert Choice" input box.
  1263.      Display_Path              Displays path and filename of program
  1264.                                name chosen in List1 box. Abbreviate path
  1265.                                if necessary.
  1266.      Title_MsgBox              Displays either Title box or About box.
  1267.  
  1268.                 - Page 28 -
  1269.  
  1270.      Procedure                 Description
  1271.      ----------------------------------------------------------------
  1272.  
  1273.      Options.frm
  1274.      -----------
  1275.  
  1276.      Option1_Click             Set variable and Label5 caption to
  1277.                                "Open...". Go to Enable_Options_Controls, 
  1278.                                then Configure_Path procedures.
  1279.      Option2_Click             Set variable and Label5 caption to
  1280.                                "Add...". Go to Enable_Options_Controls,
  1281.                                then Configure_Path procedures.
  1282.      Option3_Click             Set variable and Label5 caption to
  1283.                    "Open+Add...". Go to Enable_Options_
  1284.                    Controls, then Configure_Path procedures.
  1285.      Option4_Click             Set variable and Label5 caption to
  1286.                    "Delete...". Go to Enable_Options_
  1287.                    Controls, then Configure_Path procedures.
  1288.      Form_Load                 Centers form on-screen.
  1289.      Command1_Click            OK button clicked. Set new directory. Or
  1290.                                Open, Add, Open+Add or Delete file name.
  1291.      Command2_Click            Cancel button clicked. Hide form.
  1292.      File1_Click               Filename chosen. If Option 1, 2 or 3 is
  1293.                                True then go to Configure_Path procedure.
  1294.      File1_DblClick            Filename chosen. Go to Command1_Click.
  1295.      Dir1_Click                Set variable to inform Options.frm that
  1296.                                user wants to change to new directory.
  1297.      Dir1_Change               When directory path changes, change
  1298.                                File1 path.
  1299.      Drive1_Change             Update Dir1 path.
  1300.      List1_Click               Filename to delete is chosen.
  1301.      List1_DblClick            Filename to delete is chosen. Go to
  1302.                                Command1_Click procedure.
  1303.      Configure_Path            Configure Option control choice,
  1304.                                directory path and File1 filename.
  1305.                                Display it in Label5. Abbreviate
  1306.                                if necessary.
  1307.      Enable_Options_Controls   Set Visible, Enable and TabIndex
  1308.                                properties of all controls.
  1309.      Check_For_FileName_       Ensures duplicate program name is
  1310.      Before_Adding             not placed in main list box.
  1311.  
  1312.  
  1313.      Form              FormName          Module           Module Name
  1314.      -----------------------------       ----------------------------
  1315.  
  1316.      Openup.frm        Openup             make             Openup.mak
  1317.      Options.frm       Options
  1318.  
  1319.                 - Page 29 -
  1320.  
  1321.      VBWORKBENCH
  1322.      ===========
  1323.  
  1324.      VBWorkbench (VBW) is an application that combines Openup with a
  1325.      log program. Every Openup feature is included. When VBW starts
  1326.      up, it appears exactly like Openup. The following instructions
  1327.      will concentrate on the log program. See Openup instructions to
  1328.      use VBW's identical features.
  1329.  
  1330.      The log program, which you can redesign as a stand alone application,
  1331.      is accessible by choosing Options + Show Log or press the F6 key.
  1332.      First, an explanation of the controls, then its entire operation,
  1333.      will follow.
  1334.  
  1335.      The text1 box, labeled "Developer" is for you to insert your company
  1336.      name and address. The text2 box, labeled, "Client" is for you to
  1337.      insert the client's name and address, if any. Fill in these two
  1338.      text boxes, especially if you log time for computer use while
  1339.      working for a client. This information will also be printed on the
  1340.      log report's heading.
  1341.  
  1342.      The text3 box, labeled "Fee", is to insert an hourly fee charged to
  1343.      the client. Only numbers 0-9 and a period character are allowed.
  1344.      This hourly fee multiplied by the total time is displayed in the
  1345.      log data frame box. The total fee and subtotal fees for each session
  1346.      is also printed on the log report.
  1347.  
  1348.      The log data frame box houses the following information:
  1349.  
  1350.      Session         timed period: [(Run+Stop) - (Run+Start)]. If you choose
  1351.                      Run+Pause, it simply pauses the timed period until
  1352.                      you choose Run+Resume or Run+Stop. Once Run+Stop is
  1353.                      chosen, that session ends. The timed period is added
  1354.                      to the total time. Choose Run+Start again and a new
  1355.                      session starts. The time is displayed as:
  1356.  
  1357.                                   days.hours:minutes:seconds
  1358.  
  1359.                      Therefore, theoretically 9999 days & 23:59:59 is the
  1360.                      maximum time allowed. VBW stops timing at 9999 days.
  1361.  
  1362.      Log Dates       all sessions between periods where you save changes
  1363.                      in a file is one log date. For instance, a file is
  1364.                      opened and several sessions are timed. Then changes
  1365.                      to the file are saved. That is one log date. The
  1366.                      instant the first session begins, the starting date
  1367.                      of that first session will be saved as the starting
  1368.                      date of that log period.
  1369.  
  1370.                 - Page 30 -
  1371.  
  1372.      Total           the total time of all sessions. Again, the is
  1373.                      displayed as shown above. Timing stops at 9999 days.
  1374.  
  1375.      Total Costs     total time multiplied by the hourly fee. The max
  1376.                      costs displayed is $9,999,999.00. If total costs
  1377.                      surpasses this amount, VBW stops the timing process
  1378.                      and total cost calculations. An overflow message is
  1379.                      displayed. You can continue timing only if the
  1380.                      hourly fee is reduced.
  1381.  
  1382.      Starting Date   the date when you began timing sessions.
  1383.  
  1384.      Timing a session is easy. There are three commands: Start, Pause/
  1385.      Resume and Stop. These commands are available through the Run menu
  1386.      bar command. As stated earlier in the explanation for a session,
  1387.      Start begins timing a log session. Pause temporarily halts the
  1388.      timing process until you choose Resume or Stop. Stop halts the
  1389.      timing of that session. Log timing is only as accurate as your
  1390.      system's clock.
  1391.  
  1392.      Saving log data
  1393.      ---------------
  1394.  
  1395.      On a first save attempt, a save dialog box displays. Only a file
  1396.      name to save can be entered into the text box. Change directories
  1397.      or drives by double clicking on the appropriate controls. Visual
  1398.      Basic 1.0+ Professional and VB 2.0+ users can use Window's built
  1399.      in common save dialog box if you want to get full save dialog box
  1400.      access. Note that all files are saved with a (.vbw) extension.
  1401.      Other extensions are invalid. The (.vbw) extension is added if the
  1402.      user does not include one. Note that the Openbox2.frm is working
  1403.      overtime as both an open and save dialog box.
  1404.  
  1405.      The random access mode is used to save a file. The file is saved as
  1406.      records of a fixed string length of 10. When the user saves a new
  1407.      file, the starting date, total time, total days and total number
  1408.      of sessions are saved in the first four record positions. These
  1409.      strings, except starting date, are continuously updated whenever
  1410.      the user saves any changes to the file.
  1411.  
  1412.      The next two records contain information that tracks the next
  1413.      position to write the new session log data and the number of records
  1414.      required for the client name. The second to Nth time you save data
  1415.      to the file will write three records each time, called the session
  1416.      log data. The last position of the third record must be tracked, so
  1417.      the next session log data can be written, starting in the next
  1418.      location. The next location is not the last position plus one, if
  1419.      you included a clients's name. The client's name is always patched
  1420.      on to the end of the file. This is because the user may change the
  1421.      client name or delete it altogether. Therefore, a pre-defined number
  1422.  
  1423.                 - Page 31 -
  1424.  
  1425.      of record locations cannot be given to the client's name.
  1426.  
  1427.      As mentioned above, the session log data, in record file allotments
  1428.      of three are saved. The first record position is the date the session
  1429.      began, the second is the number of days for that session and the
  1430.      third is the remaining hh:mm:ss. The following table illustrates
  1431.      the file position allocations and its contents:
  1432.  
  1433.      Position     Log data (in order of position) as stored in a file
  1434.      --------     ---------------------------------------------------
  1435.  
  1436.      1            starting date (StartDate$)
  1437.      2            total hh:mm:ss (TotalTime$)
  1438.      3            total days (AddDays$)
  1439.      4            total sessions (TotSessions$)
  1440.      5            session date (curlogdate$)
  1441.      6            number of days this session (SessionDate$)
  1442.      7            total remaining hh:mm:ss (reallogtime$)
  1443.      *              [same type of data recorded in positions 5,6,7
  1444.      *              (Session log data; updated 3 file locations on
  1445.      *              every save)]
  1446.      last N       client's name (N) depends on number of characters in
  1447.                   client's name divided by 10 [this is (c)]. Therefore,
  1448.                   (N) is last file position of session log data's third
  1449.                   record position (remaining hh:mm:ss) + (c) + I.
  1450.                   I is 1 if (c) is a fractional number; else, it is 0.
  1451.  
  1452.      When saving files, note that changing the client's name, but not
  1453.      logging any time will also cause VBW to prompt the user to save file
  1454.      changes. If no client's name is listed, a semi colon will be saved
  1455.      to indicate this. Of course, you can alter part of or the entire
  1456.      file save process, particularly if dBase compatibility is required.
  1457.      You can also use a text editor to edit any client file. Remember,
  1458.      each record position must remain as a string of 10 character spaces.
  1459.      Do not remove a file location or an error will occur.
  1460.  
  1461.      Printing log data
  1462.      -----------------
  1463.  
  1464.      All data saved is printed in the report form. The report form is
  1465.      an invoice for your client. You can also get hardcopies of logs for
  1466.      personal use. You can get up to 10 copies of the report, print out
  1467.      only the log totals or print out all log session information. Note
  1468.      that you can only print a report of a saved file (designed this way
  1469.      for simplicity). If you just timed a session, choose File + Save to
  1470.      save the file information.
  1471.  
  1472.      Now get a print out of that file. Choose File + Print. Set your
  1473.      printer for portrait mode, beforehand. Click the OK button. Review
  1474.  
  1475.                 - Page 32 -
  1476.  
  1477.      the layout and contents of the report. Its layout was setup for a
  1478.      printed form used at Resolutions Now. VB programmers, being a
  1479.      resourceful group, can surely design their own forms. Or blank
  1480.      paper may suffice.
  1481.  
  1482.      Note the heading (the top of the form that ends where log session
  1483.      data is printed). The external file (exefiles.vbn) saves your developer
  1484.      name and invoice number. Every time you print an invoice, its number
  1485.      is incremented. An (x) number of copies will have the same invoice
  1486.      number. The date the invoice was printed is under the invoice number.
  1487.      Also note the inclusion of the client's name, if any, and the hourly
  1488.      fee, if any.
  1489.  
  1490.      Data from each log session is printed, along with session costs.
  1491.      Look at the total cost and you may notice a slight difference
  1492.      between the sum of the session cost and the total cost. All costs
  1493.      are rounded to nearest penny and are correct. Maximum total cost
  1494.      calculated is $9,999,999.00.
  1495.  
  1496.      Note that the log dates are the session dates (curlogdate$). Its total
  1497.      time is (TotSessions$). The time to the left of the period is the
  1498.      number of days for that session (SessionDate$) and the time to the
  1499.      right of the period is the remaining hh:mm:ss (reallogtime$). The
  1500.      time to the left of the period for the total time is the total days
  1501.      (AddDays$) and to the right is the total remaining hh:mm:ss
  1502.      (TotalTime$).
  1503.  
  1504.      A page will list 15 log sessions. If there are more, another page
  1505.      is printed. At the bottom of each page, the current and total
  1506.      amount of pages are listed.
  1507.  
  1508.      Depending on the speed of your computer, time may appear to
  1509.      increment erratically from time to time. NowTimer calculates time
  1510.      using the Timer command, which is accessing your computer's clock.
  1511.      Actually, Visual Basic is correctly compensating a lag that may
  1512.      occur when executing the log code. Therefore, the time is accurate.
  1513.      Test the time every minute by comparing the log time with your
  1514.      favorite clock.
  1515.  
  1516.      You may not like the periodic erratic nature of the log timing. If
  1517.      so, try the code below in place of the log time code. Note that
  1518.      you must have a fast computer to accurately log time. Or else, the
  1519.      log time will continuously fall behind. If you do not have a fast
  1520.      computer, but still want to try the code below, change the Timer
  1521.      control's interval. It is originally set to 1000 (1 second). 800
  1522.      or 950 may suffice.
  1523.  
  1524.      As shown, the time is incremented by a variable (av!). (av!) is
  1525.      a global variable. No timer command or its variables are used
  1526.      (Starter! and StopNow!). You can replace the Format$ command
  1527.      with code shown under Nowtimer, pages 17-19.
  1528.  
  1529.                 - Page 33 -
  1530.  
  1531.      Sub Menu_Run1_Click (Index As Integer)
  1532.         Select Case Index
  1533.            Case 0      'Run + Start
  1534.              'If timing has started or paused, do not start again.
  1535.              If abcd$ = "0" Or abcd$ = "3" Then Exit Sub
  1536.              Label4.Caption = "0000."    'Reset session days.
  1537.              'Reset counter to zero.
  1538.              av! = 0
  1539.              'Go to Timer1_Timer procedure to start timing.
  1540.              Timer1.Enabled = -1
  1541.              '
  1542.              '       Same code in procedure after line of code above.
  1543.              '
  1544.            Case 1      'Run + Pause/Resume
  1545.              'If timing has started, do If...Then.
  1546.              If abcd$ = "0" Then
  1547.                 Timer1.Enabled = 0      'Stop timing.
  1548.                 PauseTime! = PauseTime! + av!
  1549.                 '
  1550.                 '      Same code in procedure, including Case 2,
  1551.                 '      after line of code above.
  1552.         End Select
  1553.      End Sub
  1554.  
  1555.  
  1556.      Sub Timer1_Timer ()
  1557.         'Time is incremented by 1 second by counter.
  1558.         av!  = av! + 1
  1559.     
  1560.         'Add PauseTime!, if any and calculate session time.
  1561.         If PauseTime! > 0 Then av! = av! + PauseTime!
  1562.  
  1563.        '
  1564.        '     Same code in procedure, starting at "If av! >= 86400 Then"
  1565.        '    
  1566.      End Sub
  1567.  
  1568.  
  1569.      Sub Calculate_Time ()
  1570.        'If timing has not paused do If...Then.
  1571.        If abcd$ <> "3" Then a! = av!
  1572.     
  1573.        'If timer has paused, log time is pause time.
  1574.        If abcd$ = "3" Then a! = PauseTime!
  1575.  
  1576.        '
  1577.        '     Same code in procedure, starting at "If av! >= 86400 Then"
  1578.        '
  1579.      End Sub
  1580.  
  1581.                 - Page 34 -
  1582.  
  1583.      The tables for VBW controls and procedures follow.
  1584.  
  1585.  
  1586.  
  1587.      Controls         CtlName property          Caption
  1588.      -------------------------------------------------------
  1589.  
  1590.      Wrkbench.frm
  1591.      ------------
  1592.  
  1593.      Controls, ctlname properties and caption properties are same as
  1594.      Openup.frm in Openup, pages 26-27.
  1595.  
  1596.      Wrk_Open.frm
  1597.      ------------
  1598.  
  1599.      Controls, ctlname properties and caption properties are same as
  1600.      Options.frm in Openup, page 27.
  1601.  
  1602.  
  1603.      WrkTime.frm
  1604.      -----------
  1605.  
  1606.      Text box         Text1
  1607.      Text box         Text2
  1608.      Text box         Text3
  1609.      Frame box        Frame1                    Log
  1610.      Label            Label1                    &Developer:
  1611.      Label            Label2            &Client:
  1612.      Label            Label3            &Fee:
  1613.      Label            Label4            0000.
  1614.      Label            Label5            Log Dates:
  1615.      Label            Label6            Session:
  1616.      Label            Label7            00:00:00
  1617.      Label            Label8            Total:
  1618.      Label            Label9            0000.
  1619.      Label            Label10            00:00:00
  1620.      Label            Label11            $0.00
  1621.      Label            Label12            Start Date:
  1622.      Label            Label13            12-14-92
  1623.      Label            Label14            0
  1624.      Label            Label15            Total Costs:
  1625.  
  1626.  
  1627.  
  1628.      Openbox2.frm
  1629.      ------------
  1630.  
  1631.      Label            Label1                    File &Name:
  1632.      Label            Label2                    &File:
  1633.      Label            Label3                    &Directory:
  1634.      Label            Label4                    D&rive:
  1635.  
  1636.                 - Page 35 -
  1637.  
  1638.      Command button   Command1                  O&K
  1639.      Command button   Command2                  &CANCEL
  1640.      File box         File1
  1641.      Directory box    Dir1
  1642.      Drive box        Drive1
  1643.  
  1644.  
  1645.      Print.frm
  1646.      ---------
  1647.  
  1648.      Label            Label1                    C&opies:
  1649.      Text box         Text1
  1650.      Check box        Check1                    &Totals Only
  1651.      Command button   Command1                  O&K
  1652.      Command button   Command2                  &CANCEL
  1653.  
  1654.    
  1655.  
  1656.      Procedure                 Description
  1657.      ----------------------------------------------------------------
  1658.  
  1659.      Wrkbench.frm
  1660.      ------------
  1661.  
  1662.      Same procedures as Openup.frm in Openup, page 27.
  1663.  
  1664.  
  1665.      Wrk_Open.frm
  1666.      ------------
  1667.      Same procedures as Options.frm in Openup, page 28.
  1668.  
  1669.  
  1670.      Wrk_Time.frm
  1671.      ------------
  1672.  
  1673.      Form_Load                 Center form, reset contents, get current
  1674.                                directory
  1675.      Menu_File_Click           Set enabled state for File+Print menu
  1676.                                command depending on status of current
  1677.                                file.
  1678.      Menu_File1_Click          Handles file menu bar selection. Get new
  1679.                                file or open or save a file.
  1680.      Menu_Run1_Click           Handles Run menu bar selection. Stop,
  1681.                                Pause/Resume or Stop timing a session.
  1682.      Menu_Help1_Click          Show registration information or About
  1683.                                box.
  1684.      Timer1_Timer              Times a session in real time. Displays
  1685.                                time on-screen.
  1686.      Text1_Change              Sets a condition to inform VBW whether
  1687.                                or not changes to developer's name
  1688.                                occurred. If yes, save on VBW exit.
  1689.      Text3_Change              Sets condition to inform VBW if changes
  1690.                                to fee occurred. If yes, save on VBW exit.
  1691.  
  1692.                 - Page 36 -
  1693.  
  1694.      Openbox2.frm
  1695.      ------------
  1696.  
  1697.      Form_Load                 Center form on-screen, set File1 pattern
  1698.                                to (*.vbw), put pattern in text1 box
  1699.                                and highlight it.
  1700.      Command1_Click            OK button clicked. Depending on state of
  1701.                                dialog box (open or save), either go to
  1702.                                new directory and/or drive, save file
  1703.                                or open file.
  1704.      Command2_Click            Cancel button clicked. Get current
  1705.                                directory path of dialog box and unload.
  1706.      Dir1_Click                Set counter to tell form to change to
  1707.                                chosen directory.
  1708.      Dir1_Change               Sets File1 path and pattern and puts
  1709.                                pattern in text1 box when directory
  1710.                                changes.
  1711.      File1_Click               Put chosen filename in text1 box.
  1712.      File1_DblClick            Filename chosen. Go to Command1_Click.
  1713.      File1_PathChange          Set Dir1 path to path of File1.
  1714.      Drive1_Change             Set directory path to new drive.
  1715.      Text1_GotFocus            Highlight contents of Text1 box.
  1716.      Text1_KeyPress            Intercept and preclude all input charac-
  1717.                                ters not 0-9, backspace or period.
  1718.      Configure_Path            Place current directory in label5.
  1719.                                Abbreviate if necessary.
  1720.      Configure_File            Configure directory path and filename of
  1721.                                file to be opened or saved. Pass it to
  1722.                                Command1_Click.
  1723.  
  1724.      Print.frm
  1725.      ---------
  1726.  
  1727.      Form_Load                 Center form, set initial value for text1
  1728.                                box and highlight it.
  1729.      Command1_Click            OK button clicked. Start printing.
  1730.      Command2_Click            Cancel button clicked. Cancel request to
  1731.                                print report.
  1732.      Timer1_Timer              Prints report to active printer.
  1733.      Text1_KeyPress            Ensures only 2 characters appear in
  1734.                                Text1 box.
  1735.      Text1_GotFocus            Highlights contents of Text1 box.
  1736.      Text1_Change              Counts number of characters in Text1 box.
  1737.                                Passed on to Text1_KeyPress.
  1738.      Print_Log_Heading         Prints heading part of report.
  1739.  
  1740.  
  1741.      Wrk.Bas
  1742.      -------
  1743.  
  1744.      Calculate_Time            Calculates session time after Run+Stop
  1745.                                of Wrk_Time.frm is chosen or VBW is
  1746.  
  1747.                 - Page 37 -
  1748.  
  1749.                                ready to exit. Results are displayed
  1750.                                and added to total time.
  1751.      Reset_Info                Clears log data, including client's
  1752.                                name, in Text2 box of Wrk_Time.frm.
  1753.                                Then go to Get_Log_Info.
  1754.      Check_FileName            Ensures a valid DOS filename is saved.
  1755.      Handle_File               Will go to Save_File if file has logged
  1756.                                time or client's name has changed.
  1757.      Enable_Options_Controls   Set visible, enabled and tabindex
  1758.                                properties of all controls in Wrk_Open.frm.
  1759.      Save_New_File             Prompts user to save a new file.
  1760.      Save_File                 Saves changes to an existing file. If file
  1761.                                is new, go to Save_New_File. If file is
  1762.                                an existing file is loaded, prompt user
  1763.                                first.
  1764.      Get_Log_Info              Get contents of variables to be saved when
  1765.                                user chooses to save a file.
  1766.      Update_Exefiles_List      If any changes were made to variables
  1767.                                stored in the external program file, save
  1768.                                them. Occurs when exiting VBW.
  1769.      Stop_Timer_For_Menu_      Stop timing a session, then go to Calculate_
  1770.      Choice                    Time. Occurs only when log window is hidden
  1771.                                and user wants to exit VBW.
  1772.      Title_MsgBox              Displays either Title box or About box.
  1773.      Display_Costs             Calculates total client cost and displays
  1774.                                it in log window.
  1775.      Open_File                 Opens chosen client file. Enacted by File+
  1776.                                Open in log window. If File+Save in log
  1777.                                window is chosen and an existing file is
  1778.                                loaded, the file's contents are updated
  1779.                                on-screen.
  1780.  
  1781.  
  1782.  
  1783.      Form              FormName          Module           Module Name
  1784.      -----------------------------       ----------------------------
  1785.  
  1786.      Wrkbench.frm      Wrkbench          make             Wrkbench.mak
  1787.      Wrk_Open.frm      WorkOpen          module           Wrk.bas
  1788.      Wrk_Time.frm      WorkTime          global           Glbl_Wrk.bas
  1789.      Openbox2.frm      Openform
  1790.      Print.frm         Prntform
  1791.  
  1792.                 - Page 38 -
  1793.  
  1794.      CRYPTOKEY
  1795.      =========
  1796.  
  1797.      Cryptokey is a multiple form application that operates as a Windows
  1798.      front end for PC Merlin v2.0+ for DOS. PC Merlin is not included
  1799.      with VB_APPS. Contact your favorite shareware vendor or BBS for
  1800.      more information.
  1801.  
  1802.      Cryptokey is an example of how to design a front end for a DOS
  1803.      program. Cryptokey is useful to current owners of PC Merlin that
  1804.      use Windows but prefer to retain files encrypted by PC Merlin.
  1805.  
  1806.      Cryptokey (ckey) configures the DOS command line for PC Merlin and
  1807.      passes it to PC Merlin; it does not cipher any files. The command
  1808.      line is long. The advantage of ckey is the speed at which you can
  1809.      configure and pass the command line to DOS. Only a correct command
  1810.      line is passed to PC Merlin. A typical command line:
  1811.  
  1812.        merlin c:\dos\hello.txt c:\winword\ /e /k:password /b /s /m:cbc
  1813.  
  1814.      The command line can be much longer if either directory path is
  1815.      longer, a new name for a file is included in the destination path,
  1816.      the key phrase (password) is longer, or vector switch (/v: ...) is
  1817.      included.
  1818.  
  1819.      Configuring the command line is easy. On start up, EnGarde prompts
  1820.      you for your password (see EnGarde, page 15). Note: the originally
  1821.      set password is "1234", not including the quotation marks.  Next,
  1822.      the main window appears on-screen. You can insert the source file
  1823.      (and path if necessary), then insert the entire destination
  1824.      directory (i.e. "c:\winword\workfile\"). Note that "\" is the last
  1825.      character of the path unless a new filename is included.
  1826.  
  1827.      Or, choose File + Choose Files to open the Source File dialog box.
  1828.      This dialog box is a modified open dialog box.
  1829.  
  1830.      Note that this dialog box is similar to a Windows 3.1 open dialog
  1831.      box. You can double click on the directory box to go to another
  1832.      directory. You can also click on the file box to choose a file,
  1833.      whose name will appear in the file name text box. You can also
  1834.      double click on the file box to pass the file name to Ckey.
  1835.  
  1836.      There are two differences in this dialog box. You can insert a new
  1837.      name for the file chosen by inserting it into the rename text box.
  1838.      A path command button is also included. Normally, users can click
  1839.      the OK button to go to a new path if it is inserted into the file
  1840.      name text box. But, PC Merlin can cipher one or more files by
  1841.      including wild cards in the source path. So, to go to another path
  1842.      without passing it to the command line, users can click the path
  1843.      button or double click on the directory box. To pass the a path,
  1844.      a file, or wild card options to the PC Merlin command line, click
  1845.      the OK button.
  1846.  
  1847.                 - Page 39 -
  1848.  
  1849.      Once a source file(s) is chosen, a message box will prompt you to
  1850.      decide if the source and destination paths are the same. If you
  1851.      choose the YES button, the source file(s) are inserted in the
  1852.      source file name text box in the main window and the same path
  1853.      is also inserted into the destination path text box. Choose the
  1854.      NO button to display the destination dialog box.
  1855.  
  1856.      The destination dialog box is also similar to a basic Windows open
  1857.      dialog box. Note that this dialog box does not include a file box
  1858.      (you must only pass a drive and/or directory path as a destination
  1859.      of the source file(s).
  1860.  
  1861.      There are also other differences. The text box is labeled "Path".
  1862.      Users can insert a new path to go to or to pass to the command line.
  1863.      If the text box is empty when the OK button is clicked to pass the
  1864.      path to the destination path box in the main window, the current
  1865.      path is passed.
  1866.  
  1867.      A Get button is also included. It performs the same function as
  1868.      the path button in the source file dialog box.
  1869.  
  1870.      Note that a new filename, if any, for the source filename is
  1871.      appended to the destination path automatically after a destination
  1872.      path is chosen.
  1873.  
  1874.      Once a source file and destination path are entered, insert the
  1875.      password. Ckey is set for a password that must be at eight to 64
  1876.      characters long, in accordance with PC Merlin instructions. You
  1877.      can alter the password code to include an 8 byte hexadecimal value
  1878.      also. See Check4_Click procedure in the ckey.frm which verifies
  1879.      the initialization vector. The vector is an 8 byte hexadecimal
  1880.      value.
  1881.  
  1882.      Next, choose an encryption method by clicking on either method
  1883.      option button.
  1884.  
  1885.      Next, you can choose an option from the Option frame box. The
  1886.      three options are switches: a)secure erase will erase the file
  1887.      from the source path if it is not the same as the destination
  1888.      path; b) brief mode will suppress on-screen information, there-
  1889.      fore increasing speed of ciphering; and c) vector will allow
  1890.      user to choose another initialization vector if the encryption
  1891.      mode is not equal to ECB.
  1892.  
  1893.      Finally, choose one of eight encryption modes. The default is ECB.
  1894.      Now the command line is configured. The process becomes fast after
  1895.      several uses.
  1896.  
  1897.      You can review the entire command line, after it is configured,
  1898.      by choosing File + View.
  1899.  
  1900.                 - Page 40 -
  1901.  
  1902.      Click the OK button to pass the command line to PC Merlin. Note
  1903.      that PC Merlin must be located at the root directory of the same
  1904.      drive as Ckey. Make sure that ckey.pif is located in the same
  1905.      directory as Ckey or in the same directory as your Windows system
  1906.      files. Ckey.pif will run PC Merlin in a DOS minimized window.
  1907.  
  1908.      Do not operate Ckey or any other application until PC Merlin ends
  1909.      operation. If the command line is incorrect, Ckey will intercept
  1910.      it and inform the user which command line parameter is incorrect.
  1911.  
  1912.      The tables for Cyptokey controls and procedures follow.
  1913.  
  1914.  
  1915.      Controls            CtlName property          Caption property
  1916.      -----------------------------------------------------------
  1917.  
  1918.      Ckey.frm
  1919.      --------
  1920.  
  1921.      Text box            Text1
  1922.      Text box            Text2
  1923.      Text box            Text3
  1924.      Label               Label1                    &Source File Name
  1925.      Label               Label2                    &Destination Path
  1926.      Label               Label3                    &Password
  1927.      Command button      Command1                  &Run
  1928.      Frame box           Frame1                    &Encryption Method
  1929.      Frame box           Frame2                    &Options
  1930.      Frame box           Frame3                    Encryption Mode
  1931.      Check box           Check 2                   Secure Erase
  1932.      Check box           Check 3                   Brief Mode
  1933.      Check box           Check 4                   Vector
  1934.      Option button       Option 7                  Encryption
  1935.      Option button       Option 8                  Decryption
  1936.      Option button       Option 9                  ECB
  1937.      Option button       Option 10                 CBC
  1938.      Option button       Option 11                 CFB
  1939.      Option button       Option 12                 CFB8
  1940.      Option button       Option 13                 OFB
  1941.      Option button       Option 14                 OFB8
  1942.  
  1943.  
  1944.      Newbox.frm
  1945.      ----------
  1946.  
  1947.      Text box            Text1
  1948.      Text box            Text2
  1949.      Label               Label1                    File &Name
  1950.      Label               Label2                    R&ename
  1951.      Label               Label3                    &Files
  1952.  
  1953.                 - Page 41 -
  1954.  
  1955.      Label               Label4                    &Directories
  1956.      Label               Label5                    D&rives
  1957.      Label               Label6
  1958.      File box            File1
  1959.      Directory box       Dir1
  1960.      Drive box           Drive1
  1961.      Command button      Command1                  &Ok
  1962.      Command button      Command2                  &Cancel
  1963.      Command button      Command3                  &Path
  1964.  
  1965.  
  1966.      Destbox.frm
  1967.      -----------
  1968.  
  1969.      Text box            Text1
  1970.      Label               Label1                    &Path
  1971.      Label               Label2                    &Directories
  1972.      Label               Label3                    D&rives
  1973.      Label               Label4
  1974.      Directory box       Dir1
  1975.      Drive box           Drive1
  1976.      Command button      Command1                  &Ok
  1977.      Command button      Command2                  &Get
  1978.  
  1979.  
  1980.  
  1981.      Procedure                 Description
  1982.      ----------------------------------------------------------------
  1983.  
  1984.      Ckey.frm
  1985.      --------
  1986.  
  1987.      Command1_Click            Run button clicked. Pass valid command
  1988.                                line to PC Merlin.
  1989.      Menu_FileSelection_Click  Chooses a file menu command.
  1990.      Menu_HelpSelection_Click  Shows Help file with registration info
  1991.                                or About box.
  1992.      Form_Load                 Run EnGarde code, center form and set
  1993.                                initial values for PC Merlin switches.
  1994.      Form_Unload               End Ckey if system menu Close command
  1995.                                clicked.
  1996.      Timer1_Timer              Hide on-screen PC Merlin operation
  1997.                                reminder message and set focus on text
  1998.                                one box.
  1999.      Check2_Click              Sets the secure erase option.
  2000.      Check3_Click              Sets the byte suppression option.
  2001.      Check4_Click              Sets the initialization vector option.
  2002.      Check7_Click              Sets the encryption method to encrypt.
  2003.      Check8_Click              Sets the encryption method to decrypt.
  2004.      Check9_Click              Sets the encryption mode to ecb.
  2005.      Check10_Click             Sets the encryption mode to cbc. 
  2006.      Check11_Click             Sets the encryption mode to cfb.
  2007.  
  2008.                 - Page 42 -
  2009.  
  2010.      Check12_Click             Sets the encryption mode to cfb8.
  2011.      Check13_Click             Sets the encryption mode to ofb.
  2012.      Check14_Click             Sets the encryption mode to ofb8.
  2013.      Text1_Change              Informs ckey that a new filename is
  2014.                                entered.
  2015.      Text1_GotFocus            Highlights contents of text box.
  2016.      Text1_Keypress            Intercepts space bar entry to preclude
  2017.                                this error.
  2018.      Text2_Change              Compares source and destination paths.
  2019.                                Sets secure erase option accordingly.
  2020.      Text2_GotFocus            Highlights contents of text box.
  2021.      Text2_Keypress            Intercepts space bar entry to preclude
  2022.                                this error.
  2023.      Text3_GotFocus            Highlights contents of text box.
  2024.      Text3_Keypress            Intercepts space bar entry to preclude
  2025.                                this error.
  2026.      Validate_DestPath         Ensures that a valid destination path
  2027.                                is entered in text 2 box.
  2028.      Set_Cursor_Focus          Set focus on text box with invalid
  2029.                                command line parameter if error occurs
  2030.                                when OK button is clicked.
  2031.      Validate_SourcePath       Verify existence of source path and
  2032.                                file(s).
  2033.      Configure_Command_Line    Configures command line for PC Merlin.
  2034.      Operate_Merlin            Run PC Merlin in minimized window.
  2035.      Title_MsgBox              Displays either Title box or About box.
  2036.  
  2037.  
  2038.      Newbox.frm
  2039.      ----------
  2040.  
  2041.      Command1_Click            OK button clicked. Pass source file
  2042.                                name to ckey.frm and new filename, if
  2043.                                any, to destination path.
  2044.      Command2_Click            Cancel button clicked. Close newbox.frm
  2045.                                and cancel any choices.
  2046.      Command3_Click            Path button clicked. Change to a new
  2047.                                drive and/or directory path.
  2048.      Form_Load                 Pass new pattern from text2 box to file1
  2049.                                box and highlight contents of text2 box.
  2050.      Dir1_Click                Go to Check_Dir1 procedure.
  2051.      Dir1_Change               Set file1 path to new directory path.
  2052.      File1_Click               Filename chosen. Display filename in
  2053.                                text2 box.
  2054.      File1_DblClick            Filename chosen. Go to Command1_Click.
  2055.      File1_PatternChange       Pass new pattern from text2 box to file1
  2056.                                box.
  2057.      File1_PathChange          When path changes, put pattern in text2
  2058.                                box.
  2059.      Drive1_Change             Set Dir1 path to new Drive1 path.
  2060.      Text2_Change              Check for a pattern or filename and set
  2061.                                text3 box accordingly.
  2062.  
  2063.                 - Page 43 -
  2064.  
  2065.      Text2_GotFocus            Highlights contents of text box.
  2066.      Text2_Keypress            Intercepts space bar entry to preclude
  2067.                                this error.
  2068.      Text3_GotFocus            Highlights contents of text box.
  2069.      Text3_Keypress            Intercepts space bar entry to preclude
  2070.                                this error.
  2071.      Hilite_Text2Box           Intercepts space bar entry to preclude
  2072.                                this error.
  2073.      Sort_Destination_File     Configures destination path and passes
  2074.                                it to ckey.frm if source path is equal
  2075.                                to destination path.
  2076.      Sort_Source_File          Configures source path (and pattern or
  2077.                                filename) and passes it to ckey.frm.
  2078.      Config_Dirfile            Configure source path and filename.
  2079.                                Verify its existence.
  2080.      Path_Err_Msg              Display error message if invalid path
  2081.                                is entered and path button is clicked.
  2082.      Check_Dir1                Puts directory box selection in text2
  2083.                                box in preparation for a path change.
  2084.      Configure_Path            Display current path in label 6.
  2085.  
  2086.  
  2087.  
  2088.      Destbox.frm
  2089.      -----------
  2090.  
  2091.      Command1_Click            OK button clicked. Pass the current path
  2092.                                to ckey.frm text1 box.
  2093.      Command2_Click            Get button clicked. Changes the path.
  2094.      Form_Load                 Center form, go to Config_DestPath
  2095.                                procedure and highlight contents of
  2096.                                text1 box.
  2097.      Dir1_Click                Go to Check_Dir1_Too procedure.
  2098.      Dir1_Change               Go to Config_DestPath, then Check_Dir1_Too
  2099.                                procedures.
  2100.      Drive1_Change             Set Dir1 path to new Drive1 path.
  2101.      Hilite_Text1Box           Set focus on and highlight contents of text
  2102.                                box.
  2103.      Text1_GotFocus            Highlights contents of text box.
  2104.      Text1_Keypress            Intercepts space bar entry to preclude
  2105.                                this error.
  2106.      Check_Dir1_Too            Puts directory box selection in text1
  2107.                                box in preparation for a path change.
  2108.      Config_DestPath           Display current path in label 4.
  2109.      Sort_Dif_Destination_File Configures destination path (and new
  2110.                                filename, if any) and passes it to
  2111.                                ckey.frm.
  2112.  
  2113.                 - Page 44 -
  2114.  
  2115.  
  2116.      Ckeymdl.bas
  2117.      -----------
  2118.  
  2119.      Validate_NewFileName      Ensures that new filename is in valid
  2120.                                DOS format.
  2121.      Invalid_NewFileName       If invalid new filename, set focus in
  2122.                                text3 box of newbox.frm. If invalid
  2123.                                source filename, set focus in text2 box
  2124.                                of newbox.frm.
  2125.  
  2126.  
  2127.  
  2128.  
  2129.      Form              FormName          Module           Module Name
  2130.      --------------------------          ----------------------------
  2131.  
  2132.      ckey.frm          ckey              make             nowtimer.mak
  2133.      newbox.frm        newbox            module           ckeymdl.bas
  2134.      destbox.frm       destbox           global           ckey.bas
  2135.  
  2136.                 - Page 45 -
  2137.  
  2138.      SECTION FOUR
  2139.      =============
  2140.  
  2141.      Visual Basic Functions
  2142.      ======================
  2143.  
  2144.      As a VB user, I have found some interesting methods and quirks
  2145.      while using Visual Basic.  Sharing these not so secret tips will
  2146.      hopefully help you.  Note that the following solutions may be
  2147.      expressed in many lines of code.  This is so you can easily
  2148.      comprehend the solutions.  You can rewrite them as fewer lines of
  2149.      code if necessary.  As Visual Basic users, you may have already
  2150.      discovered some of these.
  2151.  
  2152.      ******************************************************************
  2153.        Note that " --> " means that this line of code is connected to
  2154.               previous line of code; do not separate as shown.
  2155.      ******************************************************************
  2156.  
  2157.      Ending a program with the main window SysMenu "CLOSE"
  2158.      -----------------------------------------------------
  2159.  
  2160.      Ending a program with loaded but non-visible forms
  2161.      -------------------------------------------------
  2162.  
  2163.      Choosing SysMenu "CLOSE" of the main window will unload that window.
  2164.      Loaded but non-visible forms will not unload automatically.  The
  2165.      program will continue in run mode.  Programs converted to executable
  2166.      files will appear to end.
  2167.  
  2168.      To exit the program, simply type the END command in the Sub Form_
  2169.      Unload (Cancel As Integer) procedure of the main window.
  2170.  
  2171.  
  2172.      Ending a program with loaded, visible forms
  2173.      -------------------------------------------
  2174.  
  2175.      Again, simply type the END command in the Sub Form_Unload (Cancel
  2176.      As Integer) procedure of the main window.  This unconditionally
  2177.      exits the program - no changes are saved.
  2178.  
  2179.      To save any changes, write code to branch to code that will save
  2180.      changes.  Example:
  2181.  
  2182.     The VB Workbench program queries the user to save a new file
  2183.         or any changes to an old file.  See the code in the Sub Form_
  2184.         Unload (Cancel As Integer) procedure.  If a change occurs and
  2185.         the user chooses yes, it will automatically branch to a pro-
  2186.         cedure to save changes to an old file or branch to another
  2187.         procedure and allow the user to save a new file.
  2188.  
  2189.                 - Page 46 -
  2190.  
  2191.      Removing System Menu Commands
  2192.      -----------------------------
  2193.  
  2194.      The SysMenu command captions are shown below in Figure 1 with their
  2195.      corresponding indices.  When you use DLLs to remove one or more
  2196.      controls, beware.
  2197.  
  2198.      The minimize and/or maximize caption(s) will not appear in the
  2199.      form's SysMenu if the MIN and/or MAX property is set to False.
  2200.      But all indices remain the same.
  2201.  
  2202.      Example: In figure 2 the MAX property of the form is set to False.
  2203.      Since the indices remain the same, the DLL code to remove the Close
  2204.      and hyphen captions remain the same:
  2205.  
  2206.     R = RemoveMenu (HSysMenu, 6, MF_ByPosition)
  2207.     R = RemoveMenu (HSysMenu, 5, MF_ByPosition)
  2208.  
  2209.      See the Windows Programmer's Reference or ICONWORKS code for the
  2210.      API declarations to add/delete System Menu commands.
  2211.  
  2212.     Figure 1.                Figure 2.
  2213.  
  2214.     0    Restore                0    Restore
  2215.     1    Move                1    Move
  2216.     2    Size                2    Size
  2217.     3    Minimize            3    Minimize
  2218.     4    Maximize            5 or 7    -
  2219.     5    -                8    Switch To...
  2220.     6    Close
  2221.     7    -
  2222.     8    Switch To...    
  2223.  
  2224.  
  2225.  
  2226.      VBRUN100.DLL and distributing software
  2227.      --------------------------------------
  2228.  
  2229.      You probably know by now that any program that you develop with
  2230.      Visual Basic can run in any directory on your computer without
  2231.      needing VBRUN100.DLL in the same directory.  The program will
  2232.      first search for VBRUN100.DLL in the same directory, then look
  2233.      for the "VB" directory.  This is an important issue when
  2234.      distributing programs.  Of course, all programs for distribution
  2235.      should include VBRUN100.DLL.
  2236.  
  2237.      Exceptions are if the user has Visual Basic or other programs
  2238.      developed with it.  If the user has Visual Basic, VBRUN100.DLL
  2239.      must be in the "VB" directory, which cannot be in any sub directory.
  2240.      If the user has other programs developed with Visual Basic, but
  2241.      not Visual Basic, they can save the trouble of putting two or
  2242.      more copies of VBRUN100.DLL on their hard drive.
  2243.  
  2244.                 - Page 47 -
  2245.  
  2246.      Simply create a directory named "VB" at the root directory of their
  2247.      hard drive and move VBRUN100.DLL into that directory.  Then add "VB"
  2248.      to the PATH command of the autoexec.bat file.  All Visual Basic
  2249.      programs will find it and operate correctly.
  2250.  
  2251.  
  2252.      Adding existing files to your project
  2253.      -------------------------------------
  2254.  
  2255.      When you add an existing file to your current project, the current
  2256.      project and the project that originally contained the file will
  2257.      share this file.  To avoid conflicts, save the file (File + Save
  2258.      File As...) immediately after adding a file.
  2259.  
  2260.      Then choose File + Save Project to isolate the added file into
  2261.      your current project. Also change the Form Name to eliminate
  2262.      confusion of identical file names.  Choose FormName from the
  2263.      Properties drop down box.  Remember to rename all code that
  2264.      referred to the name(s) of non-existent forms.  Do this by
  2265.      choosing Code+Replace and click on the Module level check box
  2266.      before choosing OK.  Now you can edit the added file.
  2267.  
  2268.      Visual Basic will let you know the path and name of the added file
  2269.      until you close the project or code window.  Look at the title bar
  2270.      of the code window of this file.
  2271.  
  2272.  
  2273.      Designing Icons
  2274.      ---------------
  2275.  
  2276.      It is a good idea to design objects with black or dark borders
  2277.      when designing icons.  Users will be able to see objects regardless
  2278.      of the desktop background color in use.  Notice that most icons
  2279.      included with Visual Basic have objects with borders.
  2280.  
  2281.  
  2282.      Your Apps and the run command line
  2283.      ----------------------------------
  2284.  
  2285.      When starting your App from DOS or the Windows File or Program
  2286.      Manager, you must include the path with the filename unless you
  2287.      are in the directory that has this App.  You can avoid this if
  2288.      your program is in the path specified in your autoexec.bat file.
  2289.      If your App has an external file or help file, you must include
  2290.      the path unless you are in the directory that has this App.
  2291.  
  2292.      Example:   You may have several VB Apps in the VB directory.  When
  2293.                 you start one of these Apps from the run command line,
  2294.                 you did not include a path.  The installation program
  2295.                 of VB appended its path to the PATH command in your
  2296.                 autoexec.bat file.  But wait.  Move one App to a
  2297.  
  2298.                 - Page 48 -
  2299.  
  2300.                 directory whose path is not included in the PATH
  2301.                 command.  Try to start this App from a run command
  2302.                 line.  An error occurs.  Now include its path on the
  2303.                 run command line and presto...the App runs.
  2304.  
  2305.      This is an important point to remember.  Your users must be informed
  2306.      of this, even if your installation program appends the PATH command
  2307.      of the autoexec.bat file.  A user may delete the path for your App
  2308.      from the autoexec.bat file.
  2309.  
  2310.  
  2311.      Some guidelines for making help files
  2312.      -------------------------------------
  2313.  
  2314.      When using Microsoft's Help Compiler for Visual Basic, always give
  2315.      every topic a title.  If not, the Windows Help Engine will call
  2316.      this topic untitled. Under Windows 3.1+ this may render the History
  2317.      button useless.  Users will not have a title to correspond to the
  2318.      topic - only "Appname: (untitled)" will appear in the History
  2319.      window, where Appname is the name of your App.  Also, when you
  2320.      printout  the  topic,  the  Print  dialog  box  will  state 
  2321.      "Printing...(untitled)".
  2322.  
  2323.  
  2324.      ******************************************************************
  2325.        Note that " --> " means that this line of code is connected to
  2326.               previous line of code; do not separate as shown.
  2327.      ******************************************************************
  2328.  
  2329.      DLL to abort printing on dot matrix printers
  2330.      --------------------------------------------
  2331.  
  2332.      This code aborts the current job sent to the printer. Declare the DLL
  2333.      and constants at the global or module level.  Then prepare to get
  2334.      the current active port with the second DLL listed below.  Place
  2335.      the remaining three lines of code in a procedure that will abort
  2336.      a print job.
  2337.  
  2338.      Note that Curport$, the variable to get the port, is valid only
  2339.      for LPTx or COMx. To get the OS2, FILE or EPT port, use "Code
  2340.      AnyPort" below instead of "Code LPTPort".
  2341.  
  2342.         Declare Function Escape Lib "GDI" (ByVal hDC As Integer, ByVal
  2343.         -->  nEscape As Integer, ByVal nCount As Integer, lplnData As Any,
  2344.         -->  lpOutData As Any) As Integer
  2345.  
  2346.         Declare Function GetPrivateProfileString Lib "KERNEL" (ByVal
  2347.         -->  App$, Key As Any, ByVal Default$, ByVal ret$, ByVal Size%,
  2348.         -->  ByVal filename$) As Integer
  2349.  
  2350.         Const ABORTDOC = 2
  2351.  
  2352.                 - Page 49 -
  2353.  
  2354.      Get the current active port; call the 2nd DLL immediately
  2355.      proceeding start of print job. Then store CurPort$.
  2356.  
  2357.      "Code LPTPort"
  2358.  
  2359.      portline$ = Space$(81)
  2360.      gotport% = GetPrivateProfileString("Windows", ByVal "device",
  2361.       -->   "", portline$, 80, "WIN.INI")
  2362.      For inn% = 1 To 80
  2363.         If Mid$(portline$, inn%, 1) = Chr$(0) Then Mid$(portline$,
  2364.         -->  inn%, 1) = ","
  2365.      Next inn%
  2366.      'declare variable locally or globally
  2367.      CurPort$ = Left$(Right$(RTrim$(portline$), 6), 5
  2368.  
  2369.  
  2370.      3 remaining lines of code are placed in procedure where user will
  2371.      activate abort.
  2372.  
  2373.      winprintnum% = Printer.hDC      'gets the current active printer handle
  2374.      glad% = Escape(winprintnum%, ABORTDOC, 0, CurPort$, "")
  2375.      'tells Win/3 to end doc and allow further access to printer
  2376.      '(resets access)
  2377.      Printer.EndDoc
  2378.  
  2379.  
  2380.      "Code AnyPort".  This is code to retrieve name of port, regardless
  2381.                      of length of characters
  2382.  
  2383.      mptr = 1
  2384.      sptr = 1
  2385.      portline$ = Space$(81)
  2386.      gotport% = GetPrivateProfileString("Windows", ByVal "device", "",
  2387.                 -->   portline$, 80, WinIni$)
  2388.      For inn% = 1 To 80
  2389.         If Mid$(portline$, inn%, 1) = Chr$(0) Then Mid$(portline$, inn%,
  2390.            -->   1) = ","
  2391.      Next inn%
  2392.      sptr = Instr(mptr, portline$, ",")
  2393.      mptr = sptr + 1
  2394.      sptr = Instr(mptr, portline$, ",")
  2395.      mptr = sptr + 1
  2396.      sptr = Instr(mptr, portline$, ",")
  2397.      CurPort$ = RTrim$(Ltrim$(Mid$(portline$), mptr, sptr - mptr)))
  2398.  
  2399.                 - Page 50 -
  2400.  
  2401.      Saving files under the DOS format
  2402.      ---------------------------------
  2403.  
  2404.      This code ensures that only valid DOS filenames are saved. A save
  2405.      dialog box calls this procedure. Text1 box is in that dialog box
  2406.      and has the name of a file to be saved. "GoodName$" is a global
  2407.      variable. Code assumes no space character input is allowed and
  2408.      only a three character extension is valid. For more code to handle
  2409.      any valid DOS filename, see Validate_NewFileName in ckeymdl.bas
  2410.      module of ckey.exe.
  2411.  
  2412.      Sub Check_FileName ()
  2413.          'If no file name is inserted in text box, file name is bad.
  2414.          If Text1.Text = "" Then Go To Err_Filename    
  2415.          'First, look for period character that signifies existence
  2416.          'of an extension.
  2417.          getprd% = InStr(1, Text1.Text, ".")
  2418.          'If only an extension exists, file name is bad.
  2419.          If getprd% = 1 Then Go To Err_Filename
  2420.          'If none, add an extension (".xxx" is your program's extension).
  2421.          If getprd% = 0 Then Text1.Text = Text1.Text + ".xxx"
  2422.          'Get character length. If it is more than 12, file name is bad.
  2423.          Geo% = Len(Text1.Text)
  2424.          If Geo% > 12 Go To Err_Filename
  2425.  
  2426.          'Search each character and limit each to a-z or 0-9, except
  2427.          'period that signifies an extension.
  2428.          For jn% = 1 To Geo%
  2429.              Srch$ = Left$(Text1.Text, jn%)
  2430.              Chk$ = LCase$(Right$(Srch$, 1))
  2431.              If (Chk$ < LCase$("a") Or Chk$ > LCase$("z"))
  2432.              -->   And (jn% <> Geo% - 3) Then
  2433.                  If (Chk$ < LCase$("0") Or Chk$ > LCase$("9"))
  2434.              -->   And (jn% <> Geo% - 3) Then
  2435.                      Go To Err_Filename
  2436.                  End If
  2437.              End If
  2438.          Next jn%
  2439.  
  2440.          'If file name is valid, set to inform application.
  2441.          Goodname$ = "1"
  2442.      Exit Sub
  2443.  
  2444.      Err_Filename:    'Error code to execute if file name is bad.
  2445.          Beep
  2446.          Msg$ = "Invalid file name.  Valid name has 8 characters "
  2447.          Msg$ = Msg$ + Chr$(13) + "maximum and '.xxx' extension"
  2448.          MsgBox (Msg$), 48, yourprogramname$
  2449.          'If file name is invalid, set to inform application.
  2450.          Goodname$ = "2"
  2451.      End Sub
  2452.  
  2453.                 - Page 51 -
  2454.  
  2455.      Setting text boxes to limit user input
  2456.      --------------------------------------
  2457.  
  2458.      The following code allows input of up to an (x) amount of characters
  2459.      in a text box.  In the first example below, only a maximum input of 4
  2460.      characters is possible.  The TextX_Change and TextX_KeyPress(KeyAscii
  2461.      As Integer) procedures are required. Declare (a!) globally or locally.
  2462.  
  2463.      Sub Text1_Change ()
  2464.          a! = Len(Text1.Text)
  2465.      End Sub
  2466.  
  2467.      Sub Text1_KeyPress (KeyAscii As Integer)
  2468.         If a! = 4 Then
  2469.            'Backspace character is within parenthesis.
  2470.            If KeyAscii <> Asc("") Then
  2471.                KeyAscii = 0
  2472.                Beep
  2473.            End If
  2474.         End If
  2475.      End Sub
  2476.  
  2477.  
  2478.      In the next example, a maximum of one character can be displayed
  2479.      in the Text1 text box and it is highlighted.  This example is used
  2480.      in Asckey.
  2481.  
  2482.      Sub Text1_Change ()
  2483.         Text1.SelStart = 0                  'Highlights text1 box every time
  2484.         Text1.SelLength = Len(Text1.Text)   'a valid key is pressed.
  2485.      End Sub
  2486.  
  2487.      Sub Text1_KeyPress (KeyAscii As Integer)
  2488.         cbs$ = Chr$(Ascii)          '1st 3 lines store key input, clears
  2489.         Text1.Text = ""             'text1 box and displays key input;
  2490.         Text1.Text = cbs$           'ensures only 1 char will display.
  2491.         '
  2492.         '                           'Same code as in Asckey procedure.
  2493.         '
  2494.      End Sub
  2495.  
  2496.  
  2497.      In the final example, Text2 text box allows a maximum of three
  2498.      characters.  When the corresponding Command button is clicked,
  2499.      the characters are automatically deleted and the text box resets
  2500.      for another set of characters, with a maximum of three. This
  2501.      example is also used in AscKey. Declare charnum! and charcnt!
  2502.      globally or locally.
  2503.  
  2504.      Sub Text2_Change ()
  2505.         charnum! = Len(Text2.Text)
  2506.      End Sub
  2507.  
  2508.                 - Page 52 -
  2509.  
  2510.      Sub Text2_KeyPress (KeyAscii As Integer)
  2511.        'If key pressed <> backspace and <> to a number then kill it.
  2512.        'Backspace character is within parenthesis.
  2513.        If KeyAscii <> Asc("") Then
  2514.           If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
  2515.               KeyAscii = 0
  2516.               Beep
  2517.               Exit Sub
  2518.           End If
  2519.        End If
  2520.  
  2521.        'If 3 numbers are in text2 box and command1 button pressed then
  2522.        'store key input, clear text2 box and display key input;
  2523.        'reset counters.
  2524.           If charnum! = 3 And charcnt! = 1 Then
  2525.               atm$ = Chr$(Ascii)
  2526.               Text2.Text = ""
  2527.               Text2.Text = atm$
  2528.               charnum! = 1
  2529.               charcnt! = 0
  2530.           End If
  2531.  
  2532.        'If 3 numbers are in text2 box kill all input except backspace key.
  2533.        If charnum! = 3 Then
  2534.           'Backspace character is within parenthesis.
  2535.           If KeyAscii <> Asc("") Then
  2536.               KeyAscii = 0
  2537.               Beep
  2538.           End If
  2539.        End If
  2540.      End Sub
  2541.  
  2542.      For...Next Loops
  2543.      ----------------
  2544.  
  2545.      The range of counting in Visual Basic For...Next loops is X1 to Xn,
  2546.      where X1 is the first number to start the counter and Xn is the
  2547.      last number.  Note that if Xn > X1, then Xn must be the last number
  2548.      you want the counter to end at, minus one.
  2549.  
  2550.      Example:  the range you want is 1 to 4.  Set the counter at 1 to 3.
  2551.                The For...Next loop will loop four times.
  2552.  
  2553.  
  2554.      Mathematical functions and Visual Basic variables
  2555.      -------------------------------------------------
  2556.  
  2557.      When performing math functions, be careful.  For instance, if you
  2558.      are dividing two numbers and want the answer to be a fraction, do
  2559.      not use integer variables (variable%).  Use long (variable!). Use
  2560.      of integer variables will result in integers. This was not obvious
  2561.      to me for quite a while.
  2562.  
  2563.                 - Page 53 -
  2564.  
  2565.      Code that unconditionally branches to other procedures
  2566.      ------------------------------------------------------
  2567.  
  2568.      When developing applications, be aware of code that may branch
  2569.      unconditionally to another procedure.  Note the use of certain
  2570.      commands, especially on application start up (which will slow
  2571.      down start up).
  2572.  
  2573.      The code below will branch to another procedure.  After executing
  2574.      the procedure, Visual Basic returns and resumes execution with the
  2575.      next command.  Again, give special attention to below code when
  2576.      including it in the Form_Load() procedure of any form.
  2577.  
  2578.      Move...            'Any of these commands will branch to
  2579.      FormX.Width = Y1        'the Form_Resize procedure. Combine
  2580.      FormX.Height = Y2        'the last 4 commands into one Move
  2581.      FormX.Top = Y3        'command to only cause one branching.
  2582.      FormX.Left = Y4
  2583.  
  2584.      ComboX...   [X is Combo control number (i.e. Combo2.  "..." is
  2585.                  a control property (i.e. ListIndex.  A typical
  2586.                  command is Combo2.ListIndex]
  2587.                  This code will branch to the ComboX_Click procedure.
  2588.  
  2589.      ListX.ListIndex = Y [X is the List control number and Y is the
  2590.                          index number of the control]
  2591.                          This code will branch to the ListX_Click
  2592.                          procedure.
  2593.  
  2594.      File1.FileName = Text1.Text    'will branch to File1_DblClick
  2595.                                     'procedure. Usually used in an open
  2596.                                     'or save dialog box with a file box,
  2597.                                     'directory and drive boxes, and a
  2598.                                     'text box.
  2599.  
  2600.      Dir1.Path = XXX        'will branch to Dir1.Change procedure.
  2601.  
  2602.  
  2603.      Handling long directory path names in dialog box label captions
  2604.      ---------------------------------------------------------------
  2605.  
  2606.      This code abbreviates long directory paths listed in a label
  2607.      on open and save dialog boxes. Assume current directory path
  2608.      is listed in label 5. Note that tgf% equation automatically
  2609.      sets the character limit for a label of any width. Characters
  2610.      must be in lowercase.  To use uppercase, set denominator in
  2611.      tgf% equation to a higher number (experiment!).
  2612.  
  2613.      The abbreviated directory path removes the leftmost part of the
  2614.      path and shows the current working path.  For example, if the
  2615.      current path is
  2616.  
  2617.                 - Page 54 -
  2618.  
  2619.            c:\dos\mathman\integer\fraction
  2620.  
  2621.      and its length is to long for label 5, it can be abbreviated
  2622.      to resemble abbreviated paths seen in most Windows dialog boxes.
  2623.      The path may appear as:
  2624.  
  2625.            c:\...\integer\fraction
  2626.  
  2627.      You can alter the code to remove the rightmost or any part of the
  2628.      path.  Do not remove the current working sub-directory.
  2629.  
  2630.      'See this code in the options.frm of Openup, the wrk_open.frm of
  2631.      'VBW. This code is altered in Openup and the wrk_open.frm of VBW
  2632.      'to include a preceding caption and/or trailing filename.
  2633.  
  2634.      Sub Configure_Path ()
  2635.          k$ = Right$(Dir1.Path, 1)
  2636.  
  2637.          'If the root directory is the current path then display it.
  2638.          If k$ = "\" Then
  2639.              Label5.Caption = Dir1.Path
  2640.  
  2641.          'Else, make sure directory path string fits in label 5. If
  2642.          'not, abbreviate it.
  2643.          Else
  2644.  
  2645.              'Set maximum number of characters to appear in label 5.
  2646.              tgf% = Fix(Label5.Width / 110)
  2647.  
  2648.              'Get length of entire string initially targeted for
  2649.              'label 5 to compare to tgf%
  2650.              kmd% = Len(Dir1.Path)
  2651.  
  2652.              'Set space allocated for directory path if it must be
  2653.              'abbreviated.
  2654.              mvn% = tgf% - 2
  2655.  
  2656.              'If length of initial caption >= available maximum
  2657.              'caption space, it will not display properly. Execute
  2658.              'code in If...Then statement.
  2659.              If kmd% >= tgf% Then
  2660.  
  2661.                  'Get total amount of directory path characters that
  2662.                  'will fit in space allocated for it.
  2663.                  jfg$ = Right$(Dir1.Path, mvn%)
  2664.                  sdfgk! = Len(jfg$)
  2665.                  getchar! = 1
  2666.  
  2667.                 - Page 55 -
  2668.  
  2669.                  'Loop to knock off leftmost directory path characters.
  2670.                  'Abbreviation must at least show current directory.
  2671.                  Do Until (qpb$ = "\") Or (getchar! = sdfgk! + 1)
  2672.                      wwm$ = Left$(jfg$, getchar!)
  2673.                      qpb$ = Right$(wwm$, 1)
  2674.                      getchar! = getchar! + 1
  2675.                  Loop
  2676.  
  2677.                  'Get the longest valid rightmost directory path.
  2678.                  ccb$ = Mid$(jfg$, getchar!, sdfgk!)
  2679.  
  2680.                  'Show abbreviated path in label 5.
  2681.                  If getchar! = sdfgk! + 1 Then
  2682.                    Label5.Caption = Left$(Dir1.Path, 2) + "\...\" + ccb$
  2683.                  Else
  2684.                    Label5.Caption = Left$(Dir1.Path, 2) + "\...\" + ccb$
  2685.                  End If
  2686.  
  2687.              'If length of initial caption < available maximum
  2688.              'caption space, display entire directory path.
  2689.              Else
  2690.                  Label5.Caption = Dir1.Path
  2691.              End If
  2692.          End If
  2693.      End Sub
  2694.  
  2695.                 - Page 56 -
  2696.  
  2697.      SECTION FIVE
  2698.      ============
  2699.  
  2700.      Other Software by Resolutions Now
  2701.      ---------------------------------
  2702.  
  2703.      Raffle Do
  2704.      ---------
  2705.  
  2706.      Raffle Do outputs raffle ticket templates to laser printers.
  2707.      Raffle Do also includes Numset (see information below).
  2708.      Additional features include:
  2709.  
  2710.      - Choose either 4x1UP or 4x2UP raffle ticket template. 4x1UP
  2711.        template has four large tickets; 4x2UP template has eight
  2712.        smaller tickets.
  2713.      - Print up to one million tickets, numbered 0 to 999999.
  2714.      - You can start at any number between (0 and 999996) and end
  2715.        at any number between (3 and 999999).
  2716.      - One of the best advantages of Raffle Do is its ability to print
  2717.        only one template for replacement purposes. Don't worry when
  2718.        one or more templates become unusable. Simply print backup
  2719.        copies of one or more templates.
  2720.  
  2721.      Numset is an automated numbering system. Numset is an alternative
  2722.      to small numbering machines & can perform many of the same tasks.
  2723.  
  2724.      - You can sequentially number any sheet that will run through you
  2725.        laser or compatible printer.  The range is 0 to 999999.  Number
  2726.        documents, self-adhesive labels, pictures, tickets, forms, etc.
  2727.      - You can repeat a sequence of numbers up to 9999 times.
  2728.      - You can skip a number (print only all even or all odd numbers).
  2729.      - Numbers can have the same type of number format as raffle
  2730.        tickets (leading zeros without "No.")
  2731.      - All numbers can have leading and trailing text.
  2732.  
  2733.  
  2734.      To order Raffle Do, choose Registration from the Help menu of any
  2735.      VB_APPS application. Search for "RaffleDo Registration" to display
  2736.      registration information.  Read the registration information, then
  2737.      go to the Payment Form.  Choose Print Topic from the File Menu of
  2738.      the help window to get a printout.  Follow instructions listed on
  2739.      the form.  An invoice is also available.
  2740.  
  2741.      Or to order, you can get a printout of this manual. Registration
  2742.      information is on page 58 and the payment form is on page 59.
  2743.      Follow the instructions listed on those two pages.
  2744.  
  2745.                 - Page 57 -
  2746.  
  2747.      INSTALLZ
  2748.      ========
  2749.  
  2750.      Installz is a basic installation utility for programmers and all
  2751.      DOS users alike. DOS users can run Installz to delete unwanted
  2752.      files and its directory, then make a directory and copy files in
  2753.      one step. Programmers will also like features that install files
  2754.      from one or more disk and uninstallation. Forget about programming.
  2755.      Get advantages of an installation program designed for average DOS
  2756.      users. Uses DOS COPY or PKUNZIP.
  2757.  
  2758.      Installz is an executable (.exe) application that is more secure
  2759.      and faster than batch files. Installz is only about 50 kilobytes.
  2760.  
  2761.      - Use familiar step by step installation screens or quick command
  2762.        line entry.
  2763.      - Install files on any drive or directory.
  2764.      - Copy files from any drive or directory.
  2765.      - Instantly make a destination directory.
  2766.      - Ensures that valid source and destination paths are entered.
  2767.      - Install files from one or more floppy disk(s).
  2768.      - Delete all files in a directory before installation.
  2769.      - Delete all files and remove its directory (uninstallation).
  2770.  
  2771.      The only limitations are that Installz cannot be customized and
  2772.      users cannot write to files or retrieve file size. Installz will
  2773.      copy all files located in the source directory unless PKUNZIP is
  2774.      used.
  2775.  
  2776.      Evaluate Installz. VB_APPS includes Installz as its installation
  2777.      program. The Installz instruction manual is not included with
  2778.      VB_APPS, so first read information in the Installz on-disk help
  2779.      section. At the DOS prompt of the directory with Installz, type
  2780.      INSTALLZ HELP and press the return key. Review information that
  2781.      is available through menu options 1, 2, and 4.
  2782.  
  2783.  
  2784.      To order Installz, choose Registration from the Help menu of any
  2785.      VB_APPS application. Search for "Installz Registration" to display
  2786.      registration information. Read the registration information, then
  2787.      go to the Payment Form. Choose Print Topic from the File Menu of
  2788.      the help window to get a printout.  Follow instructions listed on
  2789.      the form. An invoice is also available.
  2790.  
  2791.      Or to order, you can get a printout of this manual. Registration
  2792.      information is on page 58 and the payment form is on page 59.
  2793.      Follow the instructions listed on those two pages.
  2794.  
  2795.                 - Page 58 -
  2796.  
  2797.      Registration Information
  2798.      ========================
  2799.  
  2800.      Note the prices and S&H charges for each title. Use it to fill out
  2801.      the payment form on page 59. For more information contact the
  2802.      Customer Accts. Dept. When you register, you get these benefits:
  2803.  
  2804.      - A registered copy of the software, version 1.0. The unregistered
  2805.        and registered copies of Installz (and Raffle Do) include all
  2806.        features. A registered copy of VB_APPS includes all code.
  2807.      - Free assistance by mail to registered users for 90 days.
  2808.      - A 10% discount off the price of the latest version (above 1.0)
  2809.        of any software ordered.
  2810.      - A 10% discount off the price of the second (or more) Resolutions
  2811.        Now registered shareware title. (Example: order Installz and get
  2812.        a 10% discount off of Raffle Do and/or VB_APPS, regardless of
  2813.        how many titles you order).
  2814.  
  2815.      All products and prices are single user. Contact the Customer Acct.
  2816.      Dept. for prices for using software on networks. Network users
  2817.      qualify for the same on-site duplication prices.
  2818.  
  2819.      Product        Quantity      Price Each         S & H (per pkg.)
  2820.      ---------------------------------------         ----------------
  2821.      VB_APPS        1 - 4         $30.00             $ 3.00 inside U.S.
  2822.      version 1.0    5 - 10        $28.00             $ 6.00 to Canada
  2823.      (registered    11 - 24       $26.00             $12.00 overseas
  2824.      copy)          25 +          $24.00
  2825.      ---------------------------------------
  2826.      Raffle Do      1 - 4         $50.00             $ 6.00 inside U.S.
  2827.      version 1.0    5 - 10        $45.00             $10.00 to Canada
  2828.      (registered    11 - 24       $40.00             $20.00 overseas
  2829.      copy)          25 +          $35.00
  2830.  
  2831.      Printed        1 - 4         $10.00  'manual available only
  2832.      instruction    5 - 10        $ 9.00  'with registered copy
  2833.      manual for     11 - 24       $ 8.00  'of Raffle Do
  2834.      Raffle Do      25 +          $ 7.00
  2835.      ---------------------------------------
  2836.      Installz       1 - 4         $20.00             $ 2.50 inside U.S.
  2837.      version 1.0    5 - 10        $19.00             $ 5.00 to Canada
  2838.      (registered    11 - 24       $18.00             $10.00 overseas
  2839.      copy)          25 +          $17.00
  2840.  
  2841.      On-Site duplication of registered software
  2842.      ------------------------------------------
  2843.      Product     Price Each            Master Disk
  2844.      ----------------------------------------------------
  2845.      VB_APPS     Subtract $3.00/copy   1 required: $30.00
  2846.      Raffle Do   Subtract $5.00/copy   1 required: $50.00
  2847.      Installz    Subtract $2.00/copy   1 required: $20.00
  2848.  
  2849.                 - Page 59 -
  2850.  
  2851.      PAYMENT FORM
  2852.      ============
  2853.  
  2854.      To order any Resolutions Now product, complete this form and mail it
  2855.      to the address below. Use only a street address for mailing. We can
  2856.      not ship products to Post Office boxes.  The method of payment is
  2857.      either a check or money order drawn on U.S. accounts only. Make all
  2858.      checks and money orders payable to Resolutions Now.  NOTE: Illinois
  2859.      residents must add applicable sales tax.
  2860.  
  2861.      Date: __________________
  2862.  
  2863.      Company: __________________________________________________________
  2864.      Name: _____________________________________________________________
  2865.      Street: ___________________________________________________________
  2866.      City: ______________________________ State: _______________________
  2867.      Country: ___________________________________ Zip: _________________
  2868.      Phone: Work(_____)___________________ Home(____)___________________
  2869.      What did you get a copy of this software from: ____________________
  2870.      ___________________________________________________________________
  2871.  
  2872.  
  2873.      PRODUCT NAME                     QTY.    PRICE EACH  AMOUNT
  2874.      --------------------------------|-------|-----------|------------
  2875.      ________________________________|_______|___________|____________
  2876.      ________________________________|_______|___________|____________
  2877.      ________________________________|_______|___________|____________
  2878.      ________________________________|_______|___________|____________
  2879.      ________________________________|_______|___________|____________
  2880.      ________________________________|_______|___________|____________
  2881.                                              |           |
  2882.      All sales are final. All orders are     | Sub Total |
  2883.      shipped within 3-4 weeks after receipt  |___________|____________
  2884.      of order by UPS or U.S. mail.           |           |
  2885.                                              | Sales Tax |
  2886.      Contact Customer Accounts Dept. for S&H |___________|____________
  2887.      fees for bulk orders.                   |           |
  2888.                                              | S & H     |
  2889.                                              |___________|____________
  2890.      Illinois residents must add applicable  |           |
  2891.      sales taxes.                            | TOTAL     |
  2892.                                              |___________|____________
  2893.  
  2894.      Choose disk format: ( ) 5.25" 360K disk(s); ( ) 3.5" 720K disk(s)
  2895.  
  2896.      Mail check or money order (payable to Resolutions Now) along with
  2897.      this payment form to:
  2898.  
  2899.              Resolutions Now
  2900.              Product Fulfillment Dept.
  2901.              P.O. Box 443
  2902.              Blue Island, IL. 60406-0443
  2903.