From donkiely@crl.com Fri 28 Apr 95 15:33:05
Path: nntp.crl.com!howland.reston.ans.net!cs.utexas.edu!uunet!world!news.mtholyoke.edu!news.byu.edu!hamblin.math.byu.edu!park.uvsc.edu!not-for-mail
From: knosack@park.uvsc.edu (Kris Nosack)
Newsgroups: comp.lang.basic.visual.misc,comp.lang.basic.visual.announce,comp.answers,news.answers
Subject: FAQ: comp.lang.basic.visual General Frequently Asked Questions
Supersedes: <visual-basic-faq-general-1-794471409@freenet.buffalo.edu>
Followup-To: comp.lang.basic.visual.misc
Date: 21 Mar 1995 06:30:18 -0000
Organization: Visual Basic FAQ Maintainers
Lines: 823
Approved: vbasic-request@cc.umanitoba.ca, news-answers-request@MIT.Edu
Distribution: world
Expires: 23 Apr 1995 06:30:12 (Z)
Message-ID: <visual-basic-faq-general-1-795767412@freenet.buffalo.edu>
Reply-To: ac150@freenet.buffalo.edu (Peter G. Millard)
NNTP-Posting-Host: park.uvsc.edu
Summary: General information and frequently asked questions concerning
         Microsoft's Visual Basic products.
Keywords: FAQ VISUAL BASIC GENERAL INFORMATION
X-Posting-Frequency: Posted on the 5th of each month.
X-Content-Currency: This FAQ changes regularly.  When a saved or printed copy
                    is over 6 months old, please obtain a new one.
Xref: nntp.crl.com comp.lang.basic.visual.misc:10111 comp.lang.basic.visual.announce:78 comp.answers:4281 news.answers:37386

Posted-By: auto-faq 3.1.1.2
Archive-name: visual-basic-faq/general-info

Last Revised: 01/01/95


GENERAL INFORMATION
about Microsoft's Visual Basic 
the COMP.LANG.BASIC.VISUAL newsgroup
======================================

[[NOTES FROM THE MAINTAINER:
I was really surprised to see how long it had been since I'd revised
this FAQ. For all those needing some new material out there, my
sincerest apologies. There has been an enormous amount of change in the
make-up of the entire comp.lang.basic.visual hierarchy, and I hope you
take time to examine the new sections of this document. As always, if
you have anything to contribute to this document, please mail me at the
address shown below.]]

PREFACE:
This document is a compilation of frequently asked questions and their
answers about Visual Basic in general which have been gathered from the
comp.lang.basic.visual newsgroup. Although some efforts have been made
to find obvious errors, there is no guarantee that the information in
this document is error-free. The FAQ maintainer, or anyone else
associated with this document, assume NO liability for the content or
use of this document. If you find any errors, please report them to the
address given below.

Most FAQs (including this one) are available at the anonymous ftp
archive site "rtfm.mit.edu".  All four parts of the VB FAQ may be found
in the directory "pub/usenet/comp.lang.basic.visual".

You can also have the VB FAQs e-mailed to you by sending a message to
"mail-server@rtfm.mit.edu" with ONLY the text "send
usenet/comp.lang.basic.visual/*" in the body of the message.

As the FAQ maintainers, we don't have time to explore all of the aspects
of Visual Basic.  we rely on your submissions to improve the quality and
inclusiveness of this document.  If you have found a VB hint, tip,
trick, work-around, etc., please write it up and send it to us!  Direct
any comments/suggestions/flames to one of these addresses:

Peter Millard        (ac150@freenet.buffalo.edu)  - General and VBDOS FAQ
Jan Steinar Haugland (Jan.Haugland@uib.no)        - VB/Win FAQ

==========================================
Table of Contents


I.    Structure of the COMP.LANG.BASIC.VISUAL Hierarchy
II.   The COMP.LANG.BASIC.VISUAL Charter:
III.  The COMP.LANG.BASIC.VISUAL.DATABASE Charter:
IV.   The COMP.LANG.BASIC.VISUAL.3RDPARTY Charter:
V.    The COMP.LANG.BASIC.VISUAL.ANNOUNCE Charter:
VI.   The COMP.LANG.BASIC.VISUAL.MISC Charter:
VII.  What is Visual Basic and Where can I get it?
VIII. What's the difference between VB/Win & VBDOS?

IX.   What are the features of the Professional vs. the Standard
      editions of the VB products?
      A. VB/Win
      B. VBDOS
X.    How does VB deal with OS/2?
XI.   What to do BEFORE you post. 
XII.  What are some good 3rd party books to learn vb?
XIII. What are some other VB resources and where can I get them?
XIV.  Where can I get good Public domain, shareware, or freeware
      software for VB?
      A. FTP
          ftp.cica.indiana.edu:/pub/pc/win3/programr/vbasic
          ftp.microsoft.com:
      B. BBS
      C. Compuserve
      D. America On-Line
XV.   Specific Question and Answer sections
      A.  VB/Win
      B.  VBDOS
X.    Appendix for FAQ POST #1

==========================================

I.    Structure of the COMP.LANG.BASIC.VISUAL Hierarchy

      The fall of 1994 brought about some drastic changes in the
      structure of the Comp.Lang.Basic.Visual Hierarchy. These changes
      were due to the creation of 4 new newsgroups and the eventual
      status change of the original group.

      The New groups divide up the discussions concerning specific
      applications of Visual Basic and types of tools used in the
      development process. The basic outline of groups is shown below:

      COMP.LANG.BASIC.VISUAL             Holding Group
        |--------- .DATABASE             Un-Moderated
        |--------- .3RDPART              Un-Moderated
        |--------- .MISC                 Un-Moderated
        |--------- .ANNOUNCE             Moderated

      The original CLBV newsgroup will eventually be phassed out as a
      discussion group and will be a hierarchy name used to contain the
      child groups. Please make a concerted effort to use the new
      groups as soon as they are available at your site. Although it
      has been quite some time since the creation, I understand that
      some sites are just now (mid-November of '94) beginning to see
      the new groups. Once the new groups "arrive" at your site, please
      refrain from posting to the actual comp.lang.basic.visual group;
      please use the new .misc group for general postings.

      The DATABASE sub-group is dedicated to the discussion of the uses
      of Visual Basic in database applications, and various database
      specific tools.

      The 3RDPARTY sub-group is dedicated to discussions and questions
      concerning add-ons to the Visual Basic environment. These add-ons
      can take the form of VBX or OCX controls, DLL Libraries or LIB
      Libraries, or development utilities which enhance the IDE. 

      The MISC sub-group replaces the current clbv newsgroup. This is
      the place for discussion not appropriate in the other un-
      moderated groups. 

      The ANNOUNCE group is a moderated group which is the appropriate
      place to post announcements concerning bug fixes (from vendors),
      new product announcements, Usenet management postings (such as
      RFD's, CFV's, and such for related groups), and other vendor
      support postings. 


II.   The COMP.LANG.BASIC.VISUAL Charter:

      COMP.LANG.BASIC.VISUAL is an unmoderated forum to share
      information about Microsoft's Visual Basic for Windows and
      MS-DOS, as well as the new "Application Basic" embedded in MS
      applications such as Word for Windows, Excel, and Access.

      Microsoft provides no Internet support channel for Visual Basic,
      so this group will let Visual Basic users get together to help
      each other, without requiring them to filter through unrelated,
      broader Windows programming issues.

III.  The COMP.LANG.BASIC.VISUAL.DATABASE Charter:
      This group will contain discussion about the various database
      programming issues using Visual Basic. Disucssions should be
      limited to topics pertaining only to database applications and
      tools. Discussions will not be limited in any way to specific
      database engines (however, the applications of the built-in JET
      engine will most like dominate).

      This will be an unmoderated group.

IV.   The COMP.LANG.BASIC.VISUAL.3RDPARTY Charter:
      The creation of a dedicated group to hold postings concerning
      various tools which add on to the basic Visual Basic product.
      These tools would include additional controls (VBX's), both
      commercial, shareware, and freeware. Discussions will also cover
      additional .DLL's and their applications in the Visual Basic
      environment. Note that discussion concerning API's should _NOT_
      be posted to this group as they are inherent to the VB base
      product. Discussions about API calls should be taken up in the
      .misc group (see below). This group would also house discussions
      on various development tools (eg SPYWORKS, etc...) and their    
      uses.

      This group will also contain questions and answers to people
      looking for various tools to accomplish specific tasks.
      Additionally, it is hoped that various commercial vendors that
      supply such tools would take part in discussions concerning their
      respective products as a forum for general tech support for those
      tools.

      This will be an unmoderated group.

V.    The COMP.LANG.BASIC.VISUAL.ANNOUNCE Charter:
      It has become apparent that an "official" information group could
      benefit all participants in the various subgroups of the 
      comp.lang.basic.visual hierarchy. Acceptable posts to this group
      would include FAQ posts, shareware announcements, other usenet
      administrative posts (like this entire discussion), etc...

      This will be a moderated group.

VI.   The COMP.LANG.BASIC.VISUAL.MISC Charter:
      The .misc group is required by Usenet guidelines, and will be a
      place for any discussions of topics which are not covered by the
      other three groups. Topics might include queries on Visual Basic
      methods, or API commands, applications of the standard set of
      controls, general use of the BASIC language, general discussion
      about programming techniques, general concepts of event-driven
      programming, etc... 

      The .misc group would basically replace the current
      comp.lang.basic.visual discussion group where all of the above
      topics (and more) are being discussed daily. The split of the
      other groups should drastically reduce the amount of volume in
      this "catch all" group.

      This will be an unmoderated group.

VII.  What is Visual Basic and Where can I get it?

      Visual Basic (often abbreviated 'VB') is a programming language
      initially developed by Microsoft to provide programmers with a
      quick and easy method of developing Windows applications.

      Visual Basic provides the programmer with an integrated
      environment where s/he can use tools to create a point and shoot
      interface and use event driven programming techniques.  A
      developer can quickly and easily create a user interface, then
      write the code to respond to specific events which occur as a
      result of user input. 

      The integrated development environment (IDE) has sophisticated
      editing and debugging tools which allow you to attach code
      quickly to the interface created for each event which is
      applicable for any type of object on the interface. 

      Currently, there are two different "flavors" of Visual Basic. The
      original language was developed for Windows (often abbreviated
      'VB/Win') and will only create apps for it. Visual Basic for DOS
      (often abbreviated 'VBDOS') came along later as the demand for
      point-and-shoot applications grew. The two flavors are similar in
      programming techniques (they both use event-driven subroutines),
      however they remain vastly different products. 

      All current versions of Visual Basic are commercial applications,
      and thus should be availible at your local computer store. You
      can also get in contact with Microsoft.

VIII. What's the difference between VB/Win & VBDOS?

      VB/Win gives you the capability of creating applications which
      run in Windows, while VBDOS gives you the ability to develop apps
      which do not need Windows to run and run in text mode using the
      extended character set to give the user the feeling of a
      graphical environment, while still remaining in a text mode. 

      VB/Win applications are compiled into a pseudo-code (p-code) file
      with an "EXE" extension.  When run, the p-code file accesses a
      run-time Dynamic Linked Library (DLL) (VBRUNx00.DLL) which
      interprets the p-code into Windows(tm) Aplication Programming
      Interface (API) instructions.  VB/Win cannot create a stand-alone
      application (i.e. an executable which does not need the
      VBRUNx00.DLL.).  Currently, applications developed using a
      particular version of VB/Win requires the same version of the
      run-time DLL.  Therefore, a VB application developed in VB/Win
      version 3.0 will only work if the run-time DLL VBRUN300.DLL is
      installed in either the WINDOWS or SYSTEM directories.

      VBDOS can create both types of applications. Those that require a
      run-time module, or those that are a stand-alone .exe file. In
      addition to being able to use the standard run-time modules,
      VBDOS Professional allows the creation of custom run-time
      modules. (A feature which VB/Win does not support.)

IX.   What are the features of the Professional vs. the Standard
      editions of the VB products?

      A. VB/Win

          Both editions (version 3.0) include all of the basic graphic
          primitives (controls) that make Windows(tm) such a nice
          Graphical User Interface (GUI) to work with; such as: text
          boxes, message boxes, drop-down menus, combo boxes, Multiple
          Document Interface, File controls, etc.  Version 3.0 added
          database capabilities by tying into the Microsoft Access
          database engine (a DLL that handles all the actual database
          file manipulation).
      
          The Professional Edition includes: more reference materials
          (manuals, Knowledge Base, Windows API information, etc.),
          more extensive database capabilities (ability to create
          databases), additional controls for serial port
          communications, masked text boxes, 3D "sculpted" controls,
          etc., Pen API support, and more!  Serious programmers and
          developers would be best served by the professional edition. 
          Most VB/Win users on the comp.lang.basic.visual newsgroup
          feel that the added features of the Professional Edition make
          it well worth the extra cost.  The Standard Edition is
          sufficient for small and fairly simple programs and "hobby"
          programmers.  Since Microsoft offers an upgrade path from the
          Standard to the Professional Edition, those who aren't sure
          they need the Professional Edition can start with the
          Standard Edition and move up when they're ready.
      
      B. VBDOS

          Both version of VBDOS load and run all existing QBasic and
          QuickBasic programs. With little or no effort, your QBasic
          and QuickBasic programs can use the compiler in Visual Basic
          for MSDOS to take advantage of optimized code generation and
          greater string capacity. The professional edition has the
          capability of loading and running Basic PDS programs designed
          for MS-DOS. 

          Both editions of VBDOS allow you to incrementally add forms,
          dialog boxes, and controls to existing applications without
          rewriting them. 

          The Professional editions of VBDOS includes 286 and 386/486
          specific code generation in its native code compiler. Also
          included is a high-speed alternate floating-point math
          library. The MOVE Overlay technology found in MS C/C++ 7.0
          allows compiled programs to be up to 16MB! Also included is
          the MS Source Profiler which allows you to fine tune your
          applications, stub files which allow you to remove run-time
          functionality your program does not use. The Professional
          edition also includes a powerful ISAM (Indexed Sequential
          Access Method) Database engine for developing database
          applications which can use database files up to 128MB.

          Here are the additional features you will find in the
          professional edition of Visual Basic for MS-DOS: 

          Feature                   Notes
          -----------------------------------------------------
          Help toolkit              create on-line help
          Setup toolkit             create distribution disks
          CodeView debugger         version 4.02
          Financial toolkit         functions from Microsoft Excel
          Present. graphics kit     make charts and graphs
          Matrix math toolkit       matrix operations
          Create custom controls    requires MS MASM
          Create custom rtms        Put your modules into RTM.
          Microsoft mouse driver    version 8.2a
          (NOTE: RTM = Runtime Module)
          
X.    How does VB deal with OS/2?

      As the positive attributes of 32 bit Operating systems become
      more well known, more and more developers are turning to either
      Microsoft's Windows NT or IBM's OS/2. Both offer preemptive
      multitasking and memory protection. Both offer the ability to run
      DOS and Windows programs thereby providing easy migration to an
      advanced operating system. 

      [I have been using OS/2 as a development OS for over a year while
      using various compilers, etc... including VBDOS Pro 1.0 and
      VB/Win Pro 3.0.  If anybody is willing to contribute items of
      note about running VB/Win and/or VBDOS under NT, and running them
      under Insignia's SOFTWindows on a Power-Mac I would add it to
      this section (hint, hint :)]

      VB/Win runs quite well under OS/2 ver 2.1. At the time of this
      writting, the "jury" is still out about running it under WARP. Be
      sure to run it under a full-screen windows session (as it
      improves performance dramatically). In addition, be sure to do
      extensive checking of your code on "real" windows before
      distributing it. This insures that all API functions, and other
      emulations (on the part of OS/2) work correctly. Some settings
      you may want to tweak are: DPMI usage should be 'enabled', not
      'auto', priority should be set to 100. Disable EMS (set to 0) and
      make sure XMS is set to an appropriate level.

      VBDOS runs very well under OS/2 ver 2.1 also. Be sure to set the
      DPMI setting to 'enabled', not 'auto' to completely take
      advantage of this type of memory usage. You may experience some
      problems with the Linker that comes with OS/2 when linking stand-
      alone applications. Use the linker that came with VB and these
      problems should disappear.

XI.   What to do BEFORE you post. 

      First, consult the manuals included with Visual Basic.  The
      manuals *generally* do a good job explaining most of the basics
      of Visual Basic.  Expect to be flamed if you post a question to
      the newsgroup that is plainly answered in the manual! 

      Second, check the Knowledge Base (KB). The Knowledge Base is a
      file that documents many of the most common problems / bugs /
      questions that the VB technical support folks at Microsoft have
      encountered. The Knowledge Base comes standard with the
      Professional Edition, but Standard Edition users can get a copy
      of the Knowledge Base via ftp (see section VII), CompuServe,
      America On-line, or your local BBS. The file *should* be named
      something like "vbkb". Currently there are 2 versions of the
      VB/Win KB available. The huge one (~4.5 Mb, compressed) contains
      utilities which provide full text search. If you have a high
      speed connection to the net this is well worth the extra download
      time. The other file is a normal WinHelp file w/out the text
      search. 

      Third, check the FAQ.  Since you are reading this document, I
      don't think much needs to be said here.  As a side note: PLEASE,
      encourage those who post frequently asked questions which are
      covered in this document to get and read the FAQ!  If we don't,
      people will just keep posting those same questions over and over. 
      Help us break this cycle of over-dependency on knowledgeable and
      kind-hearted newsgroup users.

      Forth, thoroughly test the problem you are encountering.  You are
      more apt to get some useful help if you can speak intelligently
      about the problem you are having and what you have done to try
      and fix or get around the problem.

      Finally, post to one newsgroup in the COMP.LANG.BASIC.VISUAL
      hierarchy.  Helping each other with Visual Basic problems and
      questions is a lot about what this newsgroup is about.  If you've
      done your homework, you will probably be met with helpful
      responses to your inquiry.  Since both VB/Win and VBDOS users
      read these newsgroups, please prefix the subject line of your
      post with a note that indicates which type of VB you're using
      (i.e. "Subject: [VB/Win] Problem with DoEvents", "Subject:
      [VBDOS] Question on ISAM parameters").

      When you do post to a newsgroup in the hierarchy, decide which
      group your subject matter pertains to and only post to that
      group. If you are unsure which group is the correct one, post it
      to the .misc group. DO NOT cross-post the article to all groups
      in the hierarchy, as this clearly defeats the reasons behind
      splitting the group in the first place. If you need more guidance
      as to which group is the proper one, consult the charters (see
      above sections) for general guidelines as to the contents of a
      specific newsgroup. These charters designate what topics will be
      discussed in which newsgroups. If you still aren't sure, you
      could post to the .misc group or you can fire off some e-mail to
      me (better to waste my bandwidth as opposed to the entire nets, I
      guess). 
 
XII.  What are some good 3rd party books to learn vb?

      We (the editors) have compiled a list of various books which
      cover a wide range of VB/Win subjects. Many of the books are
      personal reccommendations from various people on the net. The
      remaining books came from a keyword search of 'VISUAL' at the
      internet site BOOKS.COM. This site can be used to purchase books
      via credit card or you can use their database of books to find
      information as I have done. A complete list can be found at the
      end of this document. 

XIII. What are some other VB resources and where can I get them?

      The Knowledge Base (often abbreviated 'KB') is a file that
      documents many of the most common problems, bugs, questions,
      tips, fixes and work-arounds that the VB technical support folks
      at Microsoft have encountered.  The KB comes standard with the
      Professional Edition, but Standard Edition users can get a copy
      of the Knowledge Base via ftp (see section VIII), CompuServe,
      America On-line, or perhaps even your local BBS.  Many answers to
      common VB problems can be found in the KB.  This file is a must-
      have!

      Visual Basic Tips and Tricks is a compilation of useful VB code
      examples, a listing of the latest VB file versions and dates, and
      other useful information that isn't in the Knowledge Base.  VB
      Tips and Tricks is a Windows help file put together by Dave
      McCarter of DPM Computer Solutions.  It can be found at many
      places (including ftp.cica.indiana.edu) as "VBTIPSxx.ZIP", where
      xx is the version number (larger numbers represent newer
      versions).  It is updated on a monthly basis.

XIV.  Where can I get good Public domain, shareware, or freeware
      software for VB?

      A. FTP
      VB/windows ftp sites:
      ---------------------
      ftp.cica.indiana.edu:/pub/pc/win3/programr/vbasic
          Best/largest source for Visual Basic files, utilities,
          example programs, VBXs, etc.

      ftp.microsoft.com:
          Microsoft's anonymous ftp site.  There is a lot on this site
          so look around.  Here are some of the more useful
          directories:
          /Softlib/MSLFILES
               Get the Knowledge Base for VB here!  VBKB.EXE (929K) is
               the regular KB in windows help format. VBKB_FT.EXE
               (2,563K)is the same as VBKB.EXE but with text searching
               added.  Lot's of other good files in this directory.
          /MSDN
               Contains LOTS of Windows programming files and examples! 
               Get the index file MSDN-IDX.ZIP for a description of the
               files in this directory.  Suggestion: search the index
               file for the text "Visual Basic".
          /MSDN/VBTECH
               VB specific files.
          /DEVTOOLS/LANG/VB/PUBLIC
               Misc. VB files and updates.                          

      B. BBS
      I have received 2 requests for submission into this section from
      Sysops of VB specific BBS's. They are as follows:

      ----FROM: mloewen@cpumagic.scol.pa.us
          I [the poster, not the editor] run a public BBS in
          Bellefonte, PA, which caters to programmers and UNIX users. 
          I have a fairly large-sized BASIC file section, with some
          Visual BASIC  files uploaded from users, and culled from
          various FTP sites.  I would  certainly welcome additional
          users interested in VB.

          The BBS is called the Centre Programmers Unit BBS, and can be
          reached at  814-353-0566.  The system is up 24 hours a day, 7
          days a week, and has a  USR Dual Standard (14.4HST/V.32bis)
          online.  There is no charge for access,  but I enforce a file
          upload/download ratio.  Here's my welcome screen:

                                                                    
                           You are invited to call:
                                                   
                         The Centre Programmers Unit
                               Bellefonte, PA 
      
                      A gathering point for UNIX users,
                         and programmers of all types.
      
        System size: 1.5Gb                 Online: 24 hours, 7 days
      
            Modem: USR Dual Standard: 1200-14400 baud
                   MNP 1-5, v.32, v.32bis, v.42, v.42bis, HST
      
       (814) 353-0566                            Sysop: Mike Loewen
      
      MSDOS programming tools and libraries, UNIX source, GNU, X
                   Select USENET Newsgroups. Linux.

           BBS users should login as 'bbs', 8N1, no password required.
                 email: mloewen@cpumagic.scol.pa.us

      ----FROM: goldsman@krusty.gtri.gatech.edu (Michael G. Goldsman)
          Atlanta Visual Basic BBS
          (404) 872-0311
          8 bits, no parity, 1 stop bit, Max Baud: 14400
          Access: Free
          Hours: 24
      
          This BBS is devoted to VB and nothing but VB. Conferences and
          file areas are available for a variety of VB topics. It has
          lots of shareware controls and tools to support Visual Basic
          developers. We will soon carry the VB Usenet newsgroups.

          Sysop: Andy Dean
          Voice Line: (404) 872-8728
      
      C. Compuserve
          Compuserve does have a fairly active basic forum. To acces
          this forum, type GO MSBASIC. Microsoft employees have been
          known to frequent this forum. May be useful for those last
          ditch pleas for some useful tidbit of information.

          Some Useful files in the MSBASIC forum:
          - VBBK05.ZIP:  List of books/mags dealing with VB.
          - MLIST4.ZIP:  Multi-column listbox. No 64K limit. 

          In addition, the Visual Basic Programmer's Journal (VBPJ)
          also maintains forum space on Compuserve. If anybody can
          provide brief details on these forums, I will gladly add
          them. As I have no access to Compuserve, I cannot gather that
          information at this time. 

      D. America On-Line
          America On-Line has a good selection of VB files and an
          active message area for discussing Visual Basic.

XV.   Specific Question and Answer sections

      A.  VB/Win - refer to the post titled: "comp.lang.basic.visual
          VB/Win Frequently Asked Questions".

      B.  VBDOS - refer to the post titled: "comp.lang.basic.visual
          VB/DOS Frequently Asked Questions".

X.    Appendix for FAQ POST #1
      ========================
      BOOK LIST for VB/Win
      ========================

      ---From: ian@monty.demon.co.uk (Ian Piper)

          Here, in descending order of usefulness (in my own personal
          opinion) are the VB books I use the most:

          1. Visual Basic Programmers guide to the Windows API, by
          Daniel Appleman. ISBN1-56276-073-4. If you only want to get
          one book on VB, this is the one. It covers the ground from
          simple to advanced programming very well. 

          2. The Waite Group's VB How-To, several authors, ISBN
          1-878739-09-3. This is the ISBN number for version 1 - I
          think it's been updated by now. Lots of examples to
          demonstrate each point. This is a close second.

          3. Visual Basic Utilities, by Paul Bonner, ISBN
          1-56276-106-4. This has some excellent learning stuff in it
          and also some advanced stuff, including how to write your own
          DLLs (!) using GFA-BASIC.

          4. Fun programming with VB, several authors, ISBN
          1-56529-106-9. This uses a half-dozen or so projects to
          illustrate how various programmers designed and built apps
          using VB.

          5. Windows 3.1 programming for mere mortals, by Woody
          Leonhard, ISBN 0-201-60832-4. This covers VB and WordBasic.
          Some very neat examples.

      ---From: tivadar@interaccess.com (John Quarto-vonTivadar)

          I found the following VERY useful, to the point that I don't
          even use the manuals anymore:

          6. The Visual Guide to Visual Basic for Windows, by Richard
          Mansfield, published by Ventura Press. This is a encyclopedia
          of the language itself. It supposes that you DO know how to
          program so basically (if you pardon the pun) it's a guide to
          VB's slang. I use this for referencing the grammar when i get
          a bug.

      ---From: idavidson@csu.edu.au (Ian Davidson)

          7. Visual Basic How-To, Robert Arnson, Daniel Rosen, Mitch
          Waite &  Jonathon Zuck: The Waite Group, 1992.  ISBN
          1-878739-09-3.  Includes  disk.  Many practical examples &
          some sample custom controls.Introduces & expands on the use
          of API's.  An excellent book suitable for Beginners thru
          Advanced - one of my most-often-used  references.

          8. Learn Programming and Visual Basic with John Socha, John
          Socha:  Sybex, 1992.  ISBN 0-7821-1057-6.  Includes disk.  A
          useful introduction for absolute beginner programmers thru
          intermediate.


      -- From Gary Cornell:
          There's a new version of my book - it's been enlarged and
          updated. It's now called the Visual Basic 3 For Windows
          Handbook.
               
              Author   : Cornell, Gary
              Title    : Visual Basic 3 For Windows Handbook
              ISBN     : 0078819318 Dewey #  : 005.10
              Publisher: Osborne McGraw Hill
              Date Pub : 01/93

      --from Wallace Wang: 72662,1711 (Compuserve)
          Here's the information you requested. Thanks for including my
          book in your listing:

          Publisher name: IDG Books Publisher 
          address: 155 Bovet Road, Suite 310
                   San Mateo, CA 94402 
          Phone number: (415) 312-0650 
          Fax number: (415) 358-1260

          Book name: Visual Basic 3 For Dummies 
          Author name: Wallace Wang 
          When released: March 1994 

          50-word description: This book takes readers, 
               step-by-step, to understanding, learning, and writing
               Visual Basic programs. Explains how to use the most
               common features of Visual Basic for creating user
               interfaces and writing BASIC code. Includes a friendly
               dose of humor and easy to read explanations, this book
               also includes suggestions for finding additional
               information about Visual Basic. Intended audience: 

          Beginners Price: $19.95
          Disk of examples: No.

      ---From Christian Wolkersdorfer
          Here are several German specific books for VB. They are from
          a database query of the ELIS-database Erlangen / Nuernberg /
          Germany.
      
Autor            : Craig, John C.
Titel            : The Microsoft Visual Basic workshop
Schlagwort       : VisualBASIC
Impressum        : Redmond Microsoft Press 1991
ISBN/ISSN        : ISBN 1-55615-386-4
Kollationsvermerk: XIV, 302 S. : graph. Darst. 1 Diskette
zus. Verf.       : John Clark Craig
--------
Autor            : Frater, Harald
                   Paulissen, Dirk
Titel            : Das grosse Buch zu Multimedia
Auflage          : 1. Aufl.
Schlagwort       : MPC
Impressum        : Duesseldorf Data-Becker 1994
ISBN/ISSN        : ISBN 3-8158-1105-8
Kollationsvermerk: 699 S. : Ill., graph. Darst. 1 CD-ROM
zus. Verf.       : Harald Frater ; Dirk Paulissen
zus. Titel       : Multimedia total ; alles rund um den MPC
                   Level 1 und 2, Multimedia-Praesentationen
                   planen und realisieren, Erklaerungen,
                   Anleitungen, Beispiele in Wort, Bild und Ton,
                   Multimedia-Programmierung mit Visual Basic
--------
Autor            : Frater, Harald; Schueller, Markus
Titel            : Das grosse Windows-3-Buch
Auflage          : 5., erw. Aufl.
Schlagwort       : Windows 3.0
Impressum        : Duesseldorf Data-Becker 1991
ISBN/ISSN        : ISBN 3-89011-287-0
Kollationsvermerk: 978 S. Diskette 3 1/2
zus. Verf.       : Frater ; Schueller
zus. Titel       : [Multitasking, Prioritaetssteuerung,
                   Windows-Optimierung, Windows-Programmierung
                   mit Visual Basic, Windows im Netzwerk]
--------
Autor            : Heiligensetzer, Stefan; Monadjemi, Peter
Titel            : Visual Basic
Schlagwort       : VisualBASIC
Impressum        : Haar bei Muenchen Markt & Technik Verl.
1992
ISBN/ISSN        : ISBN 3-87791-025-4
Kollationsvermerk: 746 S. : graph. Darst. 2 Disketten
zus. Verf.       : Stefan Heiligensetzer ; Peter Monadjemi
zus. Titel       : das Kompendium ; Einfuehrung, Arbeitsbuch, 
                   Nachschlagewerk
--------
Autor            : Kofler, Michael
Titel            : Windows-Programmierung mit Visual Basic
Auflage          : 1. Aufl.
Schlagwort       : Visual BASIC
Impressum        : Bonn ; Muenchen u.a. Addison-Wesley 1992
ISBN/ISSN        : ISBN 3-89319-389-8
Kollationsvermerk: 557 S. : Ill., graph. Darst. 1 Disk 5,25
zus. Verf.       : Michael Kofler
--------
Autor            : Maslo, Andreas
Titel            : Das Vieweg-Buch zu Visual Basic
Schlagwort       : VisualBASIC
Impressum        : Braunschweig Vieweg 1992
ISBN/ISSN        : ISBN 3-528-05203-1
Kollationsvermerk: 349 S. : graph. Darst. 1 Diskette
zus. Verf.       : Andreas Maslo
zus. Titel       : eine umfassende Anleitung zur
                   Programmentwicklung unter Windows
--------
Autor            : Maslo, Andreas
Titel            : Das Vieweg-Buch zu Visual Basic 2.0 fuer
Windows
Schlagwort       : VisualBASIC
Impressum        : Braunschweig u.a. Vieweg 1993
ISBN/ISSN        : ISBN 3-528-05320-8
Kollationsvermerk: 591 S. : graph. Darst. 1 Diskette
zus. Verf.       : Andreas Maslo
zus. Titel       : eine umfassende Anleitung zur komfortablen 
                   Entwicklung von Windows-Programmen
--------
Autor            : Maslo, Pia; Dittrich, Stefan
Titel            : Das grosse Buch zu Visual Basic 3.0 fuer
Windows
Auflage          : 1. Aufl.
Schlagwort       : VisualBASIC 3.0
Impressum        : Duesseldorf Becker 1993
ISBN/ISSN        : ISBN 3-89011-636-1
Kollationsvermerk: 900 S. : graph. Darst. 1 Diskette 3.5
zus. Verf.       : Pia Maslo ; Stefan Dittrich
--------
Autor            : Wiens, Thomas
Titel            : Visual Basic fuer Windows 2.0
Auflage          : 1. Aufl.
Schlagwort       : VisualBASIC 2.0 / Windows
Impressum        : Vaterstetten bei Muenchen IWT-Verl. 1993
ISBN/ISSN        : ISBN 3-88322-449-9
Kollationsvermerk: 331 S. : Ill.
zus. Verf.       : Thomas Wiens
zus. Titel       : [Windows-Applikationen schnell und einfach
                   programmiert] Clever programmieren
--------
Autor            : Wollschlaeger, Peter
Titel            : Visual Basic
Schlagwort       : VisualBASIC
Impressum        : Haar bei Muenchen Markt-und-Technik-Verl.
1992
ISBN/ISSN        : ISBN 3-87791-246-X
Kollationsvermerk: 294 S. : graph. Darst. 1 Beil.
zus. Verf.       : Peter Wollschlaeger
zus. Titel       : erfolgreich starten - sicher nutzen
Workshop         : PC



      ---From EDITOR: 
          The following books were those I found using a keyword
          search of 'VISUAL' at the internet site BOOKS.COM. This
          site can be used to purchase books via credit card or
          you can use their database of books to find information
          as I have done. 

          Author   : Nelson, Ross
          Title    : The Microsoft VB for Windows Primer
          ISBN     : 1556154771          Dewey #  : 005.10
          Publisher: Microsoft Pr        Date Pub : 11/92
      
          Author   : Orvis, William
          Title    : Do It Yourself Visual Basic for Windows
          ISBN     : 0672302594          Dewey #  : 005.10
          Publisher: Sams          Date Pub : 11/92

          Author   : Craig, John Clark
          Title    : Microsoft VB Workshop/Book and Disk
          ISBN     : 1556153864          Dewey #  :   5.26
          Publisher: Microsoft Pr        Date Pub : 09/91
      
          Author   : Murray, William H./Pappas, Chris H.
          Title    : Using VB : Writing Windows Apps
          ISBN     : 0201581450          Dewey #  :   5.43
          Publisher: Addison Wesley Pub. Co.
          Date Pub : 01/92

      ========================
      BOOK LIST for VBDOS
      ========================

          Author   : Hergert, Douglas A.
          Title    : Visual Basic Programming With DOS
          Applications
                   / Book and Disk
          ISBN     : 0553370995          Dewey #  : 005.00
          Publisher: Bantam Doubleday Dell Pub
          Date Pub : 07/92



-- 
Kris Nosack      knosack@park.uvsc.edu

>>>--->  Be strange, but not a stranger!  <---<<<

From donkiely@crl.com Fri 28 Apr 95 15:33:13
Path: nntp.crl.com!howland.reston.ans.net!gatech!udel!news.mathworks.com!uhog.mit.edu!news.mtholyoke.edu!news.byu.edu!hamblin.math.byu.edu!park.uvsc.edu!not-for-mail
From: knosack@park.uvsc.edu (Kris Nosack)
Newsgroups: comp.lang.basic.visual.misc,comp.lang.basic.visual.announce,comp.answers,news.answers
Subject: FAQ: comp.lang.basic.visual VB/DOS Frequently Asked Questions
Supersedes: <visual-basic-faq-dos-1-794471430@freenet.buffalo.edu>
Followup-To: comp.lang.basic.visual.misc
Date: 21 Mar 1995 06:30:42 -0000
Organization: Visual Basic FAQ Maintainers
Lines: 264
Approved: vbasic-request@cc.umanitoba.ca, news-answers-request@MIT.Edu
Distribution: world
Expires: 23 Apr 1995 06:30:40 (Z)
Message-ID: <visual-basic-faq-dos-1-795767440@freenet.buffalo.edu>
Reply-To: ac150@freenet.buffalo.edu (Peter G. Millard)
NNTP-Posting-Host: park.uvsc.edu
Summary: Frequently asked questions concerning Visual Basic for DOS.
Keywords: FAQ VISUAL BASIC DOS
X-Posting-Frequency: Posted on the 5th of each month.
X-Content-Currency: This FAQ changes regularly.  When a saved or printed copy
                    is over 6 months old, please obtain a new one.
Xref: nntp.crl.com comp.lang.basic.visual.misc:10113 comp.lang.basic.visual.announce:80 comp.answers:4283 news.answers:37388

Posted-By: auto-faq 3.1.1.2
Archive-name: visual-basic-faq/dos

Last-Modified: 06/10/94

                   VISUAL BASIC FOR DOS (VBDOS)
                Commonly asked Questions & Answers
                         Section IX - B
               -----------------------------------

PREFACE:
This document is a compilation of frequently asked questions and their
answers about Visual Basic for DOS which have been gathered from the
comp.lang.basic.visual newsgroup.   Although some efforts have been
made to find obvious errors, there is no guarantee that the information in
this document is error-free.  The FAQ maintainer, or anyone else
associated with this document, assume NO liability for the content or use
of this document.  If you find any errors, please report them to the address
given below.

Most FAQs (including this one) are available at the anonymous ftp archive
site "rtfm.mit.edu".  All four parts of the VB FAQ may be found in the
directory "pub/usenet/news.answers/visual-basic-faq".

You can also have the VB FAQs e-mailed to you by sending a message
to "mail-server@rtfm.mit.edu" with ONLY the text "send
usenet/news.answers/visual-basic-faq/*" in the body of the message.

As the FAQ maintainer, I don't have time to explore all of the aspects of
Visual Basic.  I rely on your submissions to improve the quality and
inclusiveness of this document.  If you have found a VB hint, tip, trick,
work-around, etc., please write it up and send it to me!
  Peter Millardac150@freenet.buffalo.edu   - VBDOS FAQ maintainer

Table of Contents:
1.   How do I use (create) global variables in VBDOS?
2.   Does VBDOS make standalone .exe files?
3.   What is the current version of the VBDOS compiler?
4.   How do I not make a text box beep when I hit the enter key?
5.   How does Visual Basic handle shelled tasks? How do I find out
     when they are finished.
6.   How do I break lines of long text into multiple lines of text in
     the msgbox?
7.   What's the difference between MODAL and MODELESS
     forms?
8.   When/Why should I use Option Explicit?
9.   Why doesn't PRINT or CLS from a frm module work?
10.  How do I invoke FKey traps which won't be triggered by other
     keys which share the same KeyCode?
11.  How do I boost memory available to VBDOS.EXE (the IDE)?
12.  My program runs in the IDE, but won't run when compiled??
13.  MISC. Programming TIPS:

-----------------------------------------------------------------------------

1.   How do I use (create) global variables in VBDOS?
     1.1. VBDOS provides the user with two types of global variables.
          These are both used in declarations of variables.

          To share variables between all subs and functions in a specific
          module, use the SHARED keyword. This makes that specific
          variable global _in that module_. For example:

                  DIM SHARED CancelFlag AS INTEGER

          would make the variable CancelFlag a global variable in that
          module.

          To share global variables between separate modules, use the
          COMMON keyword. For example:

                 COMMON SHARED CancelFlag AS INTEGER

          would make the variable global between all modules that this
          common statement appears in, and since we are using the
          SHARED keyword also, this will also be shared in all the subs
          and functions in the modules which this declare statement
          appears. All COMMON statements must be matched between
          modules which the variables should be global in. For example,
          if you have one set of 10 COMMON statements in one module,
          and a different set of 10 COMMON statements in another
          module in the same project, you will get a 'Type Mismatch
          Error'. Make all COMMON blocks identical in all the modules
          in a specific project. (See Misc. Programming Tips Below).

2.   Does VBDOS make standalone .exe files?
     2.1. VBDOS can compile programs in two different ways (user
          option). It can compile programs to use a RUNTIME file (like
          a DLL) or can be compiled as a standalone .exe file. 

3.   What is the current version of the VBDOS compiler?
     3.1. VBDOS is currently at version 1.0

4.   How do I not make a text box beep when I hit the enter key?
     4.1. Put "something else" in your _KeyPress event, depending on
          what you really want. This code example makes *nothing*
          happen, for an extended period of time:

          Sub Text1_KeyPress (KeyAscii As Integer)
              If KeyAscii = 13 Then   '13 is Key_Return
                   KeyAscii = 0  '0 (zero) is nothing
              End If
          End Sub

          This might not be a very nice thing to do, since your users
          usually have some intention when they press Enter. Usually
          they will want to jump to the next control, like the Tab key
          does. You will then change the line KeyAscii=0 to KeyAscii=9
          (Key_Tab) in the example above. 

          BTW, you'll also find this in the Microsoft VB
          KnowledgeBase. They add that you should set the MultiLine
          property to False. Of course.

5.   How does Visual Basic handle shelled tasks? How do I find out
     when they are finished.
     5.1. In VBDOS, all shelled tasks are completed before control
          returns to the program. No tasks are done while the DOS
          command is being executed.

6.   How do I break lines of long text into multiple lines of text in the
     msgbox?
     6.1. Use the append a chr$(13) to the end of the string to break
          lines into multiple lines. EG:

               msg$ = "This is line 1" + chr$(13)
               msg$ = msg$ + "This is line 2"
               MSGBOX msg$

7.   What's the difference between MODAL and MODELESS forms?
     7.1. Modal forms are forms which require user input before any
          other actions can be taken place. In other words, a modal form
          has exclusive focus until it is dismissed. When showing a
          modal form, the program pauses at the SHOW command until
          the modal form is either hidden or unloaded. The internal
          MSGBOX and INPUTBOX$ forms are examples of modal
          forms. To show a form modally, use the syntax:
          MyForm.SHOW 1

     7.2. Modeless forms are those which are shown but do not require
          immediate user input. Most child forms (in a MDI application)
          are typically modeless. To show a form modeless, use the
          syntax: MyForm.SHOW

8.   When/Why should I use Option Explicit?
     8.1. Opinions vary greatly on this subject. The main reason to use
          the OPTION EXPLICIT statement at the top of all modules is
          to minimize the amount of bugs introduced into your code by
          misspelling a variable name. Most variants of BASIC
          (including VB) have the capability to create variables 'on the
          fly' (without any declarations). This capability can be a double
          edged sword.

          At the minimum, it is suggested to use the DEFINT A-Z
          statement in leu of OPTION EXPLICIT. This statement will
          cause any variables which are created on the fly to be created
          as integers as opposed to single precisions. (Integers take up
          less memory). 

          The OPTION EXPLICIT statement causes VB to 'disable' it's
          ability to create variables on the fly. Thus, all variables must be
          declared using a DIM or REDIM statement. All variables not
          declared will cause an error when the OPTION EXPLICIT
          statement is used. This will eliminate any bugs when a variable
          is misspelled.

9.   Why doesn't PRINT or CLS from a frm module work?
     9.1. To print information to the screen bypassing the desktop, the
          commands must be issued from a .BAS module. All
          PRINT/CLS output from a form module is directed to the nul:
          device.

10.  How do I invoke FKey traps which won't be triggered by other keys
     which share the same KeyCode?
     10.1.     To trap the only FKeys in events you need to use a
               combination of the KeyDown, KeyPress, and KeyUp
               events. 

          The basic concept for this is that _all_ keys trap the UP &
          DOWN events, while only 'printable' characters trigger the
          KeyPress event. Thus, when a character key is pressed, it will
          trigger the KeyDown, the KeyPress, then the KeyUp events (in
          that order). While a FKey (or arrow, or tab, etc...) will trigger
          the KeyDown, then the KeyUp events (in that order). 

          The following code uses a textbox tag property to decide
          whether a printable character is pressed or not.

               SUB Text1_KeyDown()
                    Text1.tag = "key"
               END SUB

               SUB Text1_KeyPress()
                    Text1.tag = ""
               END SUB

               SUB Text1_KeyUp()
                  IF Text1.tag = "key" then
                    '--PUT F-KEY HANDLER HERE----
                  ELSE
                    '--PUT OTHER KEY HANDLERS HERE----
                  END IF
               END SUB

11.  How do I boost memory available to VBDOS.EXE (the IDE)?
     11.1.     Try to have as much EMM available as possible.
               VBDOS.EXE allocates subroutines & functions which are
               < 16K into EMM.
     11.2.     To make more conventional mem availble, use the /S:n
               switch. This will make VBDOS.EXE use a specific
               amount of conventional memory. A good compromise
               between speed & memory is /S:340. The lower the n
               value, the slower the environment runs.
     11.3.     Running out of DGROUP usually causes most 'out of
               memory' errors. Possible causes are:
          11.3.1.Too many subs & functions exist. Each one takes up
               46 bytes of DGROUP.
          11.3.2.   Large static arrays. All static arrays are stored in
                    DGROUP. If a DIM statement is for a COMMON
                    SHARED statement, the array becomes static. Make
                    the COMMON SHARED statement appear before
                    the DIM statement to make the array Dynamic &
                    therefore will not be stored in DGROUP.
          11.3.3.   Variable Overhead. Each var has a 4 byte overhead
                    for _each_ module. For multiple modules projects
                    which use lots of Global (COMMON) statements,
                    this overhead is repeated for _each_ module.
     11.4.     Possible causes for running out conventional memory:
          11.4.1.   Not enough EMM.
          11.4.2.   Subs or functions which exceed 16K.
          11.4.3.   Large arrays. Non-variable length string arrays can
                    be stored in EMM using the /ea switch.

12.  My program runs in the IDE, but won't run when compiled??
     12.1.     Arrays are dynamic by default in the IDE, but when they
               are compiled, they are static by default. Therefore, they
               are stored in DGROUP instead of the far heap. Use
               '$DYNAMIC to make all arrays dynamic or use REDIM
               instead of DIM.
     12.2.     Program generates a "program memory overflow" during
               compile. You need to break a single module into multiple
               ones.

     
13.  MISC. Programming TIPS:
     13.1.     When useing the form designed, to continuously draw
               controls of a specific type, hold down the control key
               when clicking on the appropriate control from the tool-
               box.
     13.2.     Use the INCLUDE statement to manage large numbers of
               COMMON SHARED statements, user defined data types,
               or external function DECLARES. To use an include file,
               simply put all the VBDOS statements that will be shared
               into a single file. Save the file as something appropriate.
               (Typical naming convention is to use an extension of .BI
               for basic include files). Then simply insert the line:
                        'INCLUDE: 'foobar.bi'
               into either your .BAS module, or the module level code
               in a form. 

-- 
Kris Nosack      knosack@park.uvsc.edu

>>>--->  Be strange, but not a stranger!  <---<<<

From donkiely@crl.com Fri 28 Apr 95 15:33:24
Path: nntp.crl.com!howland.reston.ans.net!gatech!udel!news.mathworks.com!uhog.mit.edu!news.mtholyoke.edu!news.byu.edu!hamblin.math.byu.edu!park.uvsc.edu!not-for-mail
From: knosack@park.uvsc.edu (Kris Nosack)
Newsgroups: comp.lang.basic.visual.misc,comp.lang.basic.visual.announce,comp.answers,news.answers
Subject: FAQ: comp.lang.basic.visual VB/Win Shareware VBX List
Supersedes: <visual-basic-faq-vbx-shareware-1-794471436@cs.uchicago.edu>
Followup-To: comp.lang.basic.visual.misc
Date: 21 Mar 1995 06:30:50 -0000
Organization: Visual Basic FAQ Maintainers
Lines: 493
Approved: vbasic-request@cc.umanitoba.ca, news-answers-request@MIT.Edu
Distribution: world
Expires: 23 Apr 1995 06:30:48 (Z)
Message-ID: <visual-basic-faq-vbx-shareware-1-795767448@cs.uchicago.edu>
Reply-To: harris@cs.uchicago.edu (Adam Harris)
NNTP-Posting-Host: park.uvsc.edu
Summary: Listing of Shareware VBX's for Visual Basic for Windows.
Keywords: FAQ VISUAL BASIC VBX SHAREWARE
X-Posting-Frequency: Posted on the 5th of each month.
X-Content-Currency: This FAQ changes regularly.  When a saved or printed copy
                    is over 6 months old, please obtain a new one.
Xref: nntp.crl.com comp.lang.basic.visual.misc:10114 comp.lang.basic.visual.announce:81 comp.answers:4284 news.answers:37389

Posted-By: auto-faq 3.1.1.2
Archive-name: visual-basic-faq/shareware-vbx-list

NOTICE: A greatly updated version of the Shareware Custom Controls list
        will be available sometime.  It will be posted to comp.lang.basic.visual
        as soon as it is done.  In the mean time this older list will have
        to do.


                         Shareware Custom Controls

                               20-Feb-94
    Inaccuricies and editorializing are the sole responsibility of 
    Adam Harris (harris@cs.uchicago.edu), who would appreciate any 
    corrections or dissenting opinions.  Archive names are from 
    major ftp sites.  Names at your favorite site may vary.  All 
    prices are in US$ and do not include S&H charges (usually $2-$3).

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  Alarm

Control: alarm1.vbx                    Archive: alarm11.zip
 Author: Mabry Software                  Price: $10.00
    Ver: 1.1
 Keywds: schedule

Triggers events, like the timer, but using specific times rather than 
intervals.  Wildcard matching elegantly allows you to trigger events at 
regular intervals (i.e., every 10 minutes).

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 BarCode

         
Control: barcod1.vbx                     Archive: barcod11.zip
 Author: Mabry Software                    Price: $15.00
    Ver: 1.1                               
 Keywds: data

Generates bar codes, in 4 different styles.  Can be bound to a data 
field.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  BmpLst

Control: bmplst1.vbx                   Archive: bmplst16.zip
 Author: Mabry Software                  Price: $20.00
    Ver: 1.6
 Keywds: list, graphic

List box with pictures, vertically aligned over a caption.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 Calendar

Control: calendar.vbx                  Archive: vbcal.zip
 Author: Rijnhaave Office Automation     Price: $0.00
    Ver:
 Keywds: calendar

Wierd and buggy date entry box with pop-up calendar.  No customization, 
no documentation.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 CTLWhWnd

Control: ctlwhwnd.dll                  Archive: vbhwnd.zip
 Author: Jonathan Zuck                   Price: $0.00
    Ver:
 Keywds: api

One function, ControlhWnd, which returns the hWnd for a given control.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 EndTask

Control: entask.dll                    Archive: entask.zip
 Author: Jeff Simms                      Price: $0.00
    Ver:
 Keywds: task

Intercepts "End Task" from the Task Manager.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                         File and Disk Space Info

Control: dfinfo1.vbx                   Archive: dfinfo14.zip
 Author: Mabry Software                  Price: $15.00
    Ver: 1.4
 Keywds: disk, file

Two controls provide technical statistics of a drive and extended file 
information, respectively.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        File Manager Drag and Drop

Control: fmdrop1.vbx                   Archive: fmdrop10.zip
 Author: Mabry Software                  Price: $15.00
    Ver: 1.0
 Keywds: file, drag-drop

Enables drag and drop of single or multiple files from the File Manager 
or what have you.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                              Four Controls

Control: <see below>                   Archive: vb4ctrls.zip
 Author: Jeng Long Jiang                 Price: $0.00
    Ver:
 Keywds: graphic, status

Four graphic controls:  vmeter.vbx and hmeter.vbx are "flooding" status 
gauge controls; spin.vbx (!) is a spin tool.  The best of the lot seems 
to be 3dlabel.vbx, which is actually a button which holds states like a 
toolbar button.  No documentation.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                               FXTools Demo

Control: fximage.vbx                   Archive: fxtool.zip
 Author: ImageFX                         Price:
    Ver: 1.0
 Keywds: demo, graphic

Demo of the FXTools suite of VB controls (fxlabel.vbx and fximage.vbx).  
An impressive collection of wipes, fades, block text, drop shadows, etc.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                            Grinning Jack Deck

Control: vbcards.dll                   Archive: vbcards.zip
 Author: Richard R. Sands                Price: $0.00
    Ver: 1.01p
 Keywds: game

Provides a bitmap collection of cards, including a joker, and basic card 
API.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 GT Icon

Control: gticon.dll                    Archive: gticon.zip
 Author: George R. Torralba              Price: $0.00
    Ver:
 Keywds: icon, drag-drop

Assigns and retrieves the DragIcon property of controls.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                               GT List Box

Control: gtlist.vbx                    Archive: tlstvbx2.zip
 Author: George R. Torralba              Price: $15.00
    Ver: 2.0
 Keywds: list, graphic

List box with some extra properties to let you set tab positions, 
control the existance of scroll bars, color items in the list, or 
associate bitmaps with items.  [Free for non-commercial use.]

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                              GT Toolbar Kit

Control: gttbar.vbx                    Archive: gttbar01.zip
 Author: George R. Torralba              Price: $15.00
    Ver: 1.0
 Keywds: toolbar, graphic, status

GT Toolbar provides a toolbar button, represented by a cell of a toolbar 
bitmap.  Registered users can use the picture property to define their 
own toolbar graphics.  (You can't force the button to stay in down 
state, unfortunately.)  GT Panel is a stripped down 3d panel useful for 
as a container for toolbars or status boxes.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                             Ini File Manager

Control: inicon2.vbx                   Archive: inicon26.zip
 Author: Mabry Software                  Price: $5.00
    Ver: 2.6
 Keywds: ini

Provides an interface to reading and writing ini files, including 
win.ini, or application specific ini files.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  InpOut

Control: inpout.dll                    Archive: inpout.zip
 Author: Jay Munro                       Price: $0.00
    Ver:
 Keywds: io

An INP and OUT replacement, written in assembler and used like the 
QuickBasic routines.  Includes source.  (For some reason Mr. Munro saw 
fit to include Software Assist's SCFILE package -- the dll is actually 
very small.)

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  JoyStk

Control: joystk1.vbx?                  Archive: joystk10.zip
 Author: Mabry Software                  Price: $15.00
    Ver: 1.0
 Keywds: io

Provides an interface to up to two joysticks.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 MailSlot

Control: mslot1.vbx                    Archive: mslot10.zip
 Author: Mabry Software                  Price: $30.00
    Ver: 1.0
 Keywds: mail

Mail slot interface.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                Menu Event

Control: menuev2.vbx                   Archive: menuev21.zip
 Author: Mabry Software                  Price: $10.00
    Ver: 2.1
 Keywds: menu, status

Emits menu events while the highlight travels over entries in the menu 
bar, before the _click event is called.  Good in combination with 
dynamic status boxes.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                             Message Blaster

Control: msgblast.vbx                  Archive: tbox100.zip
 Author: Ed Staffin                      Price: $0.00
    Ver: 1.1
 Keywds: toolbar, graphic

Provides a floating palette, complete with tiny title bar, which you can 
use in conjunction with an MDI form.  Message notification is rather 
crude and hacky.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                               MhFormScroll

Control: mhfs200.vbx                   Archive: mhfs200.zip
 Author: MicroHelp                       Price: $0.00
    Ver: 2.0
 Keywds: scroll

Add scroll bars to a form or a container.  Crashed my computer, so I 
don't know if it works.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 MListBox

Control: mlistbox.vbx                  Archive: mlist110.zip
 Author: Mike Warning                    Price:
    Ver: 1.1
 Keywds: list

Multiple selection list box with ability to find strings, associate 
numeric data with list items, and set tabs with some precision.  
Variable pricing scheme.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                MouseWatch

Control: mwatch.dll                    Archive: mwatch.zip
 Author: User Friendly, Inc.             Price: $0.00
    Ver:
 Keywds: mouse, status

Dynamically tracks mouse position, emitting _KeyDown events to the 
form.  Good for dynamic hinting, a la Word Perfect.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 OpenDlg

Control: opendlg.vbx                   Archive: opendl.zip
 Author: Zane Thomas                     Price: $0.00
    Ver:
 Keywds: graphic

Does the same thing as cmdialog.vbx.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                         PBClone Windows Library

Control: pcbwin.dll                    Archive: pcbwin.zip
 Author: Thomas Hanlin III               Price: $19.95
    Ver: 1.0
 Keywds: math, utility

A suite of utility routines:  number of floppy or comm ports, checksums, 
bit operations, etc.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                              Percentage Bar

Control: percnt2.vbx                   Archive: percnt23.zip
 Author: Mabry Software                  Price: $10.00
    Ver: 2.3
 Keywds: graphic, status

Very nice 3D style percentage bar, effectively replacing threed's 
flooding SSPanel.  Doesn't have wierd flood types like SSPanel 
(circular, right to left), but does include text color reversal over the 
flood, bevelled floods, and no flashing at all.  A much more standard 
look.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  Prompt

Control: prompt.vbx                    Archive: prompt11.zip
 Author: Andrew S. Dean                  Price: $15.00
    Ver: 1.1
 Keywds: cli

Textbox variant for command-line-style input.  Includes argument parsing 
into words and a history capacity.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  QCards

Control: qcard.dll                     Archive: qcard.zip
 Author: Stephen Murphy                  Price: $0.00
    Ver:
 Keywds: game

Deck of cards with card support functions.  Can work with 2 decks at a 
time, no jokers.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  RoText

Control: rotext1.vbx?                  Archive: vbrotfnt.vbx
 Author: Mabry Software                  Price: $15.00
    Ver:
 Keywds: label, font, graphic

Provides rotatable labels, TrueType only.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  SoundX

Control: soundx1.vbx                   Archive: soundx12.zip
 Author: Mabry Software                  Price: $10.00
    Ver: 1.2
 Keywds: matching

Metaphone and Soundex text matching algorithms let you search by phonic 
affinity.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 spSound

Control: winsound.dll                  Archive: spsoun.zip
 Author: Alfred J. Giordano              Price: $0.00
    Ver:
 Keywds: sound

Provides low-level port-based sound routines.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                ToolButton

Control: toolbutn.vbx                  Archive: vbtool20.zip
 Author: Brett Foster                    Price: $0.00
    Ver: 2.0b
 Keywds: toolbar, help, graphic

Full-feature toolbar buttons, with up to 6 states (for attributes).  Use 
your own image and break it into cells of graphic buttons, or use the 
suite of standard buttons.  Also includes ContextHelp control (same vbx) 
to assist with help management.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 VBCTL3D

Control: vbctl3d.vbx                   Archive: vb3d.zip (?)
 Author: Bernd Beeks & Jeff Sims         Price: $29.00
    Ver: 1.32
 Keywds: graphic

When added to a form, transforms standard controls into embedded, 3d 
controls.  Covers labels, message boxes, check boxes, even menus and 
user-specified controls (by class name).  Does not allow you to specify 
bevel width or depth.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 VBPoint

Control: vbpoint.dll                   Archive: vbptr.zip
 Author: Jonathan Zuck                   Price: $0.00
    Ver:
 Keywds: api

Two routines: convert long pointers (LP) to VB strings, and copy strings 
to another address (another LP).

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                     VideoSoft Custom Control Library

Control: vsvbx.vbx                     Archive: 3dctrls or v
 Author: VideoSoft                       Price: $45.00
    Ver: 2.2a
 Keywds: matching, graphic

Three controls:  3D Elastic, a smart container which resizes it's 
contents automatically, embeds contained controls in true 3d style, and 
can be nested to provide code-free window splitter bars; Awksome, a text 
parser based on the AWK language; and IndexTab, which groups controls 
with a hypercard looking tabbed notepad.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 VTSocket

Control: vtsocket.vbx                  Archive: vtsocket.zip
 Author: Visual Technology Products      Price: $50.00
    Ver: 1.0b
 Keywds: comm

Windows sockets support.  Does not support UDP sockets, out of band, or 
broadcasting.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                 WinSock

Control: vbwsk.vbx                     Archive: vbwsk01a.zip
 Author: Brian Syme                      Price: $0.00
    Ver: 0.1a
 Keywds: comm

Provides access to Windows Sockets API.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                                  ZipInf

Control: zipinf1.vbx                   Archive: zipinf10.zip
 Author: Mabry Software                  Price: $10.00
    Ver: 1.0
 Keywds: compress

Provides thorough information about the files in a zip archive.  Does 
not uncompress files or deal with other sorts of archives.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

-- 
Kris Nosack      knosack@park.uvsc.edu

>>>--->  Be strange, but not a stranger!  <---<<<

From donkiely@crl.com Fri 28 Apr 95 15:33:53
Path: nntp.crl.com!howland.reston.ans.net!swrinde!sgiblab!uhog.mit.edu!news.mtholyoke.edu!news.byu.edu!hamblin.math.byu.edu!park.uvsc.edu!not-for-mail
From: knosack@park.uvsc.edu (Kris Nosack)
Newsgroups: comp.lang.basic.visual.misc,comp.lang.basic.visual.announce,comp.answers,news.answers
Subject: FAQ: comp.lang.basic.visual VB/Win Commercial VBX List
Supersedes: <visual-basic-faq-vbx-commercial-1-794471443@acs.ucalgary.ca>
Followup-To: comp.lang.basic.visual.misc
Date: 21 Mar 1995 06:30:59 -0000
Organization: Visual Basic FAQ Maintainers
Lines: 1588
Approved: vbasic-request@cc.umanitoba.ca, news-answers-request@MIT.Edu
Distribution: world
Expires: 23 Apr 1995 06:30:57 (Z)
Message-ID: <visual-basic-faq-vbx-commercial-1-795767457@acs.ucalgary.ca>
Reply-To: blpwang@acs.ucalgary.ca (Alvin Wang)
NNTP-Posting-Host: park.uvsc.edu
Summary: Listing of Commercial VBX's for Visual Basic for Windows.
Keywords: FAQ VISUAL BASIC VBX COMMERCIAL
X-Posting-Frequency: Posted on the 5th of each month.
X-Content-Currency: This FAQ changes regularly.  When a saved or printed copy
                    is over 6 months old, please obtain a new one.
Xref: nntp.crl.com comp.lang.basic.visual.misc:10115 comp.lang.basic.visual.announce:82 comp.answers:4285 news.answers:37390

Posted-By: auto-faq 3.1.1.2
Archive-name: visual-basic-faq/commercial-vbx-list

              Commercial Visual Basic for Windows Products
    Search for "NEW" to see the entries added this week

    Last-modified: 10/18/94
    Author: Alvin Wang
    All rights reserved.  Permission given for non-profit 
    redistribution as long as copyright retained.


    Inaccuracies and editorializing are the sole responsibility of 
    Alvin Wang (blpwang@acs.ucalgary.ca), who would appreciate any 
    corrections or dissenting opinions.  

    All prices are in US funds unless otherwise stated.

 Contacting the Editor
 3553 31 Street NW, Suite 100
 Calgary, AB, T2L 2K7
 Fax (403) 282-1238
 
 New Reviews of Products
 

 AREAS Covered 
 Accounting Source
 Charting Libraries
 Communications Libraries
 Database Access Libraries
 Debuggers
 Drawing Libraries
 Email Libraries
 File Viewers
 General Libraries
 GIS Libraries
 Grid Libraries
 Help File Creation Tools
 Hypertext Libraries
 Imaging Libraries
 Mainframe Access Libraries
 Midi Libraries
 Misc Libraries
 Multimedia Libraries
 Network Libraries
 Pen Libraries
 Print Tools
 Programming Tools
 Project Management Tools
 Report Writers
 Scientific/Statistical Libraries
 Source Code Management
 Special Effects Libraries
 Speech Libraries
 Spelling Libraries
 Spreadsheet Libraries
 Telephone Management Libraries
 Test Tools
 Text Libraries
 Word Processing Libraries
 User Interface Libraries
 
 Appendix A - Addresses of companies

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - ACCOUNTING SOURCE
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Accounting System Developer's Kit
 Author: Bayou City Systems                     Price: $
    Ver:                                    Royalties: Depends
    Keywds: ACCT SOURCE AP GL AR PAY

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Solomon IV for Windows
 Author: Solomon Software                       Price: $??
    Ver:                                    Royalties: ??
    Keywds: ACCT SOURCE AP GL AR PAY SQL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - CHARTING LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                ChartPro
 Author: Sub Systems Inc.                       Price: $399.00
    Ver:                                    Royalties: None
    Keywds: DLL Chart CSOURCE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Graphics Server SDK
 Author: Pinnacle Publishing Inc                Price: $249.00
    Ver: 2.0                                Royalties: ??
    Keywds: DLL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - COMMUNICATIONS LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Crystal Comm
 Author: Crystal Software                       Price: $179
    Ver:                                    Royalties: None
    Keywds: DLL COMM

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                PDQComm for Windows
 Author: Crescent Software                      Price: $149.00
    Ver:                                    Royalties: None
    Keywds: VBX COMM

 I have found this product to be very well written.  I am waiting for
 the latest version.  The technical support group was very helpful
 with my problems with previous versions.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

             Microhelp Communications

 Author: MicroHelp Inc.                         Price: $149
    Ver:                                    Royalties: None
    Keywds: DLL COMM

     
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - DATABASE ACCESS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
             
                Aware/VBX
 Author: FarPoint Technologies                  Price: $69.95
    Ver: 1.0                                Royalties: None
 Keywds: Data-Access VBX

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Bridgit
 Author: Unelko Corp                            Price: $69.95
    Ver: 3.0                                Royalties: None
 Keywds: Data-Access DLL DBASE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                CodeBasic
 Author: Sequiter Software                      Price: $249.95
    Ver:                                    Royalties: None
 Keywds: Data-Access VBX DBASE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
               
                Controls for Btrieve
 Author: Smithware Inc                          Price: $249.95
    Ver:                                    Royalties: None
 Keywds: Data-Access VBX Btrieve

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Multilink/VB2               
 Author: Q+E                                    Price: $399
    Ver: 2.0                                Royalties: None
 Keywds: Data-Access VBX

 This is the only control that I am aware of that offers Query by 
 Example.  It is a very impressive and stable tool.  The error handling
 is more robust than the JET engine.  It over 30 databases but I only
 tested a few.  They all worked fine.  I really like the ease of use but
 there are more tools available for the JET engine.
       
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Paradox Engine
 Author: Borland International                  Price: $495
    Ver: ??                                 Royalties: ??
 Keywds: DLL PARADOX
 
 I used this with C and found it to be very reliable and reasonably
 quick.
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Visual Basic Pro
 Author: Microsoft                              Price: $495
    Ver: 3.0                                Royalties: None
 Keywds: Data-Access VBX
 Commnt: The JET engine is the standard.

 This is the standard.  You need the data access control for many of 
 the third party tools.  It is the engine supplied with Access 1.0.
 The biggest problem that I have is the lack of support for Access
 security.  The phone support is impossible but I like the Fax Back 
 support.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Visual/db Database Manager
 Author: AJS Publishing                         Price: $149 Network $299
    Ver: ??                                 Royalties: ??
 Keywds: Data-Access VBX DBASE
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Watcom SQL for Windows
 Author: Watcom                                 Price: $395
    Ver: ??                                 Royalties: ??
 Keywds: DB SQL
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - DEBUGGING TOOLS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
               PinPoint
 Author: Avanti Software Inc.                   Price: $199
    Ver: ??                                 Royalties: NA
 Keywds: DEBUG
   
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - DRAWING/GRAPHICS LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                3D Tools for VB

 Author: Micro System Options                   Price: $149
    Ver:                                    Royalties: ??
    Keywds: DLL 3D RENDER

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                VBX Artist

 Author: Bennet-Tec Information Systems         Price: $250/$275
    Ver:                                    Royalties: None
    Keywds: VBX DRAWING

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Visio

 Author: ShapeWare Corporation                  Price: $199
    Ver: 2.0                                Royalties: None
    Keywds: OLE DRAWING

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - EXPERT SYSTEMS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
              M.4

 Author: Teknowledge Corporation                Price: $199
    Ver:                                    Royalties: None
    Keywds: VBX EXPERT
 

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - FILE VIEWERS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
              VBVIEWER

 Author: Microhelp Inc.                         Price: $99
    Ver:                                    Royalties: None
    Keywds: VBX VIEW
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - GENERAL LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                QuickPak Professional for Windows

 Author: Crescent Software                      Price: $199.00
    Ver:                                    Royalties: None
    Keywds: VBX CALENDAR METER FORM PICTURE HYPERTEXT ETC

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                VB/Muscle

 Author: MicroHelp Imc.                         Price: $199.00
    Ver: 2.1
 Keywds: DLL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - GIS LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Map Server 2
 Author: Geosoft Ltd                            Price: 299 Pounds
    Ver:                                    Royalties: None
 Keywds: DLL MAPPING

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - GRID LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
                Data Widgets 
 Author: Sheridan Software Systems              Price: $129
    Ver:
 Keywds: Grid Data-Aware VBX

 This grid has a different way of implementing pull downs, which 
 takes a bit of fiddling to get working but it is worth it.  There 
 is a great deal of speed improvement since it only reads in as much
 as required.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Grid/VBX
 Author: FarPoint Technologies                  Price: $??
    Ver: 1.0                                Royalties: None
 Keywds: Grid Data-Aware VBX

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                
                TrueGrid Pro 

 Author: APEX Software Corporation              Price: $99.95
    Ver: 2.1c
 KeyWds: Grid Data-Aware VBX

 A very easy to use grid.  The nicest feature is that memo fields can be 
 pulled down for in place editting.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - HELP FILE CREATION TOOLS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        ForeHelp
 Author: ForeFront                              Price: $ 395
    Ver: 1.03                                   Royalties: None
 KeyWds: HELP 

 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
                        HelpBreeze
 Author: Solutionsoft                           Price: $ 349
    Ver: 1.6                                    Royalties: None
 Demo File: HLPBRZ.ZIP on CICA
 KeyWds: HELP WINWORD
 
 This program creates help files and needs Word for Windows 2.x or 6.x.
 There are benefits to using a program that needs Winword since you can
 import your manual and turn it into your help file.  The program runs on
 top of Word by adding a toolbar and more selections to your pulldown menus.
 The jumps are simulated quite well.  The icons on the new toolbar are
 just the first letter of the command so its good that it has popup help 
 balloons.  
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        Windows Help Magician

 Author: Software Interphase Inc.               Price: $
    Ver: ???                                             Royalties: None
 KeyWds: HELP
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - HYPERTEXT LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        Hypertext Manager

 Author: Braintree Ltd.                         Price: $89
    Ver: ???                                             Royalties: None
 KeyWds: HYPERTEXT
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - IMAGING LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        Accusoft Image Format Library

 Author: Accusoft Corporation                   Price: $295.00
    Ver: 4.0                                             Royalties: None
 KeyWds: VBX JPEG IMAGE 

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                      ImageKnife/VBX PRO

 Author: Media Architects                       Price: $299.00
    Ver: ??                                 Royalties: None
 KeyWds: VBX JPEG IMAGE DATA-AWARE TWAIN

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        ImageMan/VB

 Author: Data Techniques Inc.                   Price: $299
    Ver: 3.0                                             Royalties: None
 KeyWds: VBX JPEG IMAGE 

 Their support is pitiful.  I have been waiting for my free upgrade for 
 six months and the response is always that it is in the mail.  I could have
 bought an upgrade for the cost of long distance calls but I wouldn't
 be sure that I would get it.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        Imagestream/VB

 Author: Visual Tools                           Price: $295.00
    Ver: ??                                              Royalties: None
 KeyWds: VBX JPEG IMAGE 

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        Lead Tools/VB

 Author: LEAD Technologies                      Price: $295.00
    Ver:                                      Royalty: None
 KeyWds: VBX JPEG IMAGE 

 A very reliable VBX.  It's forte is its proprietary CMP compression but
 it reads and writes most others.  That is most but not all.  Some of the
 newer programs promise more but I can't compare.  The tech support is
 very responsive.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        Metaview Imaging Control for VB

 Author: Metafile Information Systems           Price: $995.00
    Ver: 2.1                                  Royalty: None
 KeyWds: VBX TIF IMAGE ANNOTATE

 This VBX enables you to add hotspots and stickies to TIFF images.  The demo
 needs more work to demonstrate the features better.  It read the Winfax TIFF
 but not the Coreldraw or Microsoft Chart TIFF.  Unfortunately, the manual was
 only 56 pages and didn't explain what kind of TIFF was required.  It just
 implied that it could read all TIFFs.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        Picture++

 Author: Rainbow Imaging                        Price: $425.00
    Ver:                                                      Royalty: ??
 KeyWds: IMAGE 

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        Vision Tools

 Author: Evergreen Technologies                 Price: $495.00
    Ver:                                                      Royalty: $195-$95
 KeyWds: VBX IMAGE MEDICAL

 The only control that I have found that accesses medical images but
 you should contact them to see if yours if covered.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - MAIL ACCESS LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                VB/NotesLink

 Author: Brainsorm Technologies                Price: $795
    Ver: ??                                Royalties: ??
 Keywds: VBX NOTES

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Open Mail System

 Author: Raindrop Software                     Price: $??
    Ver: 1.0                               Royalties: ??
 Keywds: DLL MAIL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - MAINFRAME ACCESS LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                QuickApp

 Author: DCA                                   Price: $??
    Ver: ??                                Royalties: None
 Keywds: VBX MAINFRAME

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Rumba SDK

 Author: WallData                              Price: $7500
    Ver: ??                                Royalties: None
 Keywds: VBX MAINFRAME

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                TransPortal Pro

 Author: Frustrum Group                        Price: $??
    Ver: ??                                Royalties: None
 Keywds: DLL MAINFRAME 3270 5250 VT100

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - MIDI LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        VB MIDI

 Author: Artic Software               Price: $59.00
    Ver:                          Royalties: ??
 KeyWds: VBX MIDI


       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - MISC LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        AutoData SDK II

 Author: AutoData Systems             Price: $295.00
    Ver:                          Royalties: None
 KeyWds: DLL OCR BARCODE DATA ENTRY FORM

                        Gantt/VBX

 Author: Addsoft                      Price: $249.00
    Ver:                          Royalties: None
 KeyWds: GANTT VBX NEW

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - MULTIMEDIA LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Media Shop

 Author: Motion Works                 Price: $299.00
    Ver:                          Royalties: ??
 KeyWds: VBX ANIMATE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                MediaKnife/VBX

 Author: Media Architects             Price: $299.00
    Ver:                          Royalties: ??
 KeyWds: VBX ANIMATE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        NETWORK LIBRARIES         
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                IPX Toolkit

 Author: Intelec Systems              Price: $295.00
    Ver:                          Royalties: None
 KeyWds: VBX Network

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                NetPak Pro For Windows

 Author: Crescent Software            Price: $179.00
    Ver:                          Royalties: None
 KeyWds: VBX Network

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                MicroHelp Network Library

 Author: MicroHelp                    Price: $99.00
    Ver:                          Royalties: None
 KeyWds: VBX Network

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - PEN LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - PRINT TOOLS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Code Print Pro

 Author: Pinnacle Publishing Inc      Price: $99.00
    Ver: 3.0                      Royalties: NA
 KeyWds: PRINT TOOL CODE NEW
 It works quite well.  You run it and it appears in your menu and
 intercepts control keys.  You can print highlighted area, 
 current procedure, current module, and the entire program.  The output
 is pleasant and I just wanted the ability to print a single module.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                IntelliPrint

 Author: Alliance Software Specialists  Price: $49.99
    Ver:                            Royalties: NA
 KeyWds: PRINT TOOL CODE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Pretty Printer

 Author: Aardvark Software            Price: $79.99
    Ver:                          Royalties: NA
 KeyWds: PRINT TOOL CODE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                PrintVB for VB

 Author: Kyle Brant Software          Price: $37.95
    Ver:                          Royalties: NA
 KeyWds: PRINT TOOL CODE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - PROGRAMMING TOOLS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        Installit/VBX
 Author: HPI                                   Price: $??
    Ver: ??
 Keywds: INSTALL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        PCVS for VB
 Author: Intersolv                             Price: $??
    Ver: ??
 Keywds: PROJECT

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        VB Assist
 Author: Sheridan Software Systems             Price: $179
    Ver: ??
 Keywds: PROG TOOL ASSIST

 It isn't as closely integrated as I would like but the ability to
 size and place controls is more than worth the hassle.  If you are 
 creating screens with lots of fields, this is highly recommended to 
 save lots of fiddling.  There are lots of other features too.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        VB Compress
 Author: Whippleware                           Price: $99.95
    Ver: ??
 Keywds: COMPRESS NEW
 This product did what it was expected to do.  I compressed a large
 program that I was working on by 25%.  It identified all the unused
 variables, procedures, etc.  The program execution wasn't fast but
 it did the job.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        VB Project Works
 Author: Young Software Works                  Price: $??
    Ver: ??
 Keywds: PROJECT

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        Version Stamper-VB
 Author: DesaWare                              Price: $??
    Ver: 1.0
 Keywds: VERSION

 If you distribute software based on VB, you probably have a problem
 insuring that your clients have the correct version of all the VBXs and
 DLLs required.  I often have a problem with users deleting files and 
 restoring incorrect versions.  This program is distributed with your 
 application and solves that problem.  It passed all the simple tests
 that I tried.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - PROJECT MANAGEMENT TOOLS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Microsoft Project

 Author: Microsoft                             Price: $695
    Ver: 4.0                               Royalties: $695
 Keywds: OLE PROJECT

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - REPORT WRITERS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Crystal Reports Pro

 Author: Crystal Services                      Price: $129.00
    Ver: 3.0                               Royalties: None
 Keywds: VBX REPORT ODBC
 
 Crystal works fine with DOS files but its ODBC 

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Focus Report Writer

 Author: Crystal Services                      Price: $395.00
    Ver: 3.0                               Royalties: NA
 Keywds: REPORT ODBC

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                MicroHelp Report Generator

 Author: MicroHelp Inc.                        Price: $189.00
    Ver: ??                                Royalties: None
 Keywds: VBX REPORT

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                R&R Report Writer

 Author: Concentric Data Systems Inc.          Price: $249-395
    Ver: ??                                Royalties: None
 Keywds: REPORT
 This report writer had the most painful method of passing parameters
 that I have ever seen.  You have to use a common file to pass parameters.
 The only nice feature that I found was the compatibility with a DOS version.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                R&R SQL Report Writer

 Author: Concentric Data Systems Inc.          Price: $249-395
    Ver: ??                                Royalties: None
 Keywds: REPORT NEW
 The SQL version had the same parameter passing method but it had the 
 advantage of handling multiple detail records in ODBC unlike Crystal.
 It used a user created SQL statement with a union statement.  This 
 wasn't a very nice method to use but it worked.  Unfortunately, it
 didn't allow the use of a Sybase TEXT datatype in the union statement.
 Tech Support claimed that this was due to a bug in Sybase but I didn't
 verify it.  The first three times that I called Tech Support an idiot 
 answered so I had lost patience by then.  

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
                ReportSmith

 Author: Borland International                 Price: $299
    Ver: ??                                Royalties: None
 Keywds: OLE REPORT
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - SCIENTIFIC/STATISTICAL LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                QuickPak Scientific

 Author: Crescent Software                     Price: $149.00
    Ver: ??                                Royalties: ??
 Keywds: DLL MATH

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                SPSS Developer's Kit

 Author: SPSS                                  Price: $495
    Ver: ??                                Royalties: ??
 Keywds: STAT OLE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - SOURCE CODE MANAGEMENT LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                PVCS

 Author: Intersolv                             Price: $
    Ver: ??                                Royalties: NA
 Keywds: SCM NEW

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - SPECIAL EFFECTS LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                FXTools/VB

 Author: ImageFX                               Price: $129.00
    Ver: ??                                Royalties: None
 Keywds: VBX FX

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - SPEECH LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        Phonetic Engine 400
 Author: Speech Systems Inc.                    Price: $1195+
    Ver: ??                                 Royalties: $995+
 Keywds: VBX SPEECH

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - SPELLING LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                  Sentry Spelling-Checker Engine
 Author: Wintertree Software Inc.                Price: $299
    Ver: 2.3                                 Royalties: None
 Keywds: SPELL DLL

      =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

               Microhelp SpellPro

 Author: MicroHelp Inc.                        Price: $129.00
    Ver: ??
 Keywds: VBX SPELL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Spell Time
 Author: Sub Systems                            Price: $389
    Ver: ??                                 Royalties: None
 Keywds: SPELL DLL CSOURCE

      =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

               SpelTool VB

 Author: Turbo Toolware                        Price: $??
    Ver: ??
 Keywds: VBX SPELL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                VT-Speller
 Author: Visual Tools                           Price: $149
    Ver: ??                                 Royalties: None
 Keywds: VBX SPELL OLE

        =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - SPREADSHEET LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Excel
 Author: Microsoft                              Price: $$
    Ver: 5.0                                Royalties: $$
 Keywds: OLE Spreadsheet

 The documentation is sparse on OLE Automation but it is well worth the 
 effort.  The problem is the cost in dollars and resources of using this
 solution.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Formula One
 Author: Visual Tools                           Price: $295
    Ver: 1.0                                Royalties: None
 Keywds: VBX Spreadsheet OLE

 The only VBX that I know is Excel compatible.  I like Excel because I 
 used to teach it so I found this very easy to use and much cheaper than
 Excel.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Spread/VBX
 Author: Farpoint                               Price: $245
    Ver: 2.0                                Royalties: None
 Keywds: VBX Spreadsheet

 It is not as easy to use as Excel.  The demo application was very 
 helpful.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - TELEPHONE MANAGEMENT TOOLS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                VB Voice
 Author: Pronexus                               Price: $395
    Ver: 2.0                                Royalties: None
 Keywds: VBX TELEPHONE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Visual Voice for Dialogic Version 1.02
 Author: Stylus Innovation                      Price: $495  - 2 line
                                                       $995  - 4 line
                                                       $1895 - Unlimited
    Ver: 2.0                                Royalties: None
 Keywds: VBX TELEPHONE DIALOGIC
 4-line software plus 4-line Dialogic hardware $1995

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                Visual Voice for MWave 1.0
 Author: Stylus Innovation                      Price: $495
    Ver: 2.0                                Royalties: None
 Keywds: VBX TELEPHONE MWAVE

 Software and single-line MWave hardware $695.  I'm having a lot of
 problems with the MWave board that may have nothing to do with the SW.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


Visual Fax 1.0 (supports up to ten faxmodems in a single PC)
Pricing: $495
                Visual Fax 1.0
 Author: Stylus Innovation                      Price: $495
    Ver: 2.0                                Royalties: None
 Keywds: VBX FAX

 Supports up to ten faxmodems in a single PC.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - TEST TOOLS
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                SQA Team Test

 Author: SQA Inc.                               Price: $
    Ver: ??                                 Royalties: NA
    Keywds: TEST

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - TEXT LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                ZyIndex Developer's Toolkit

 Author: ZyLAB                                  Price: $
    Ver: ??                                 Royalties: ??
    Keywds: VBX TEXT SEARCH

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - Thesaurus LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                ThesDB Thesaurus Database
 Author: Wintertree Software Inc.               Price: $299
    Ver: 2.1                                 Royalties: None
 Keywds: THESAURUS DLL

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - VIRTUAL REALITY
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                WorldToolKit

 Author: SENSE8                                 Price: $795
    Ver: 2.0                                Royalties: ??
    Keywds: VBX VR

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Category - WORD PROCESSING LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                ALLText

 Author: Bennet-Tec Information Systems         Price: $125/$150
    Ver: 3.0                                Royalties: None
    Keywds: VBX TEXT

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                ALLText HT/Pro

 Author: Bennet-Tec Information Systems         Price: $350/$375
    Ver: 3.0                                Royalties: None
    Keywds: VBX TEXT HYPERTEXT DATA-AWARE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                Word

 Author: Microsoft                              Price: $495
    Ver: 6.0                                Royalties: $495
    Keywds: OLE WP TEXT SPELL

 OLE Automation requires WordBasic and the documentation is hard to find.
 It performs much faster than DDE once you get past loading word.  
 Another massive product from Microsoft.
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        USER INTERFACE LIBRARIES
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        3D Gizmos
 Author: MicroHelp                    Price: $9.00
    Ver: ??                          Royalties: None
 KeyWds: VBX UI DATA-AWARE

 The look is very nice but the lookups cause a lot of overhead in loading
 a screen.  It preloads all the lookup data so a few good sized lookups
 and your user will fall asleep waiting for the screen.

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
                        3D Widgets
 Author: Sheridan Software Systems    Price: $109.00
    Ver: ??                          Royalties: None
 KeyWds: VBX UI DATA-AWARE

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        Custom Control Factory
 Author: DesaWare                     Price: $??
    Ver: 2.0                         Royalties: None
 KeyWds: UI


       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        Kollibri
 Author: European Software Connection Price: $249.00
    Ver: ??                          Royalties: None
 KeyWds: VBX UI

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                NICE ( Natural Interface for Computing Environments )
 Author: NCR                          Price: $
    Ver:                          Royalties: None
 KeyWds: VBX UI

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                VB/Magic Controls

 Author: AJS publishing Inc.          Price: $149.00
    Ver:                          Royalties: None
 KeyWds: VBX UI

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                SpyWorks/VB

 Author: DesaWare                     Price: $149.00
    Ver:                          Royalties: None
 KeyWds: VBX UI

 If you like msgblast.vbx, you'll love this tool.  It allows you to
 do some amazing things with VB that you thought would require C++.
 The examples are quite impressive.  The other capabilities like 
 checking to see how much resources are being consumed are very useful.
 Basically, this allows you to do anything that can be done in Windows
 using VB.  This is at the expense of making it much easier to crash
 Windows.
 
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        ToolsKan VB

 Author: Kansmen Corp                 Price: $99.00
    Ver: 1.0                      Royalties: None
 KeyWds: VBX UI

       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

                        VSVBX

 Author: AJS publishing Inc.          Price: $49.00
    Ver:                          Royalties: None
 KeyWds: VBX UI TAB AWK ELASTIC


       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Appendix A - Addresses of Companies
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
       =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 Aarvark Software
 800-482-2742
 201-833-4355
 201-833-1216           Fax
 Compuserve 70544,1372
 972 Sheffield Road
 Teaneck, NJ, USA       07666
 Products: Pretty Printer

 Accusoft Corporation
 800-525-3577
 508-898-2770
 508-898-29662          Fax
 112 Turnpike Road
 PO Box 1261
 Westborough, MA, USA   01581
 Products: Accusoft Image Format Library
 
 ADDSoft
 800-229-0559
 402-491-4141
 402-491-4152                   Fax
 1065 North 115th Street
 Omaha, NE 68154
 Products: Gantt/VBX

 AJS Publishing 
 800-992-3383
 310-215-9135           Fax
 PO Box 83220
 Los Angeles, CA, USA   90083
 VB/MAgic Controls
 
 Alliance Software Specialists
 414-859-2124
 AllianceSS@AOL.com
 7911 - 30th Avenue Suite 3A
 Kenosha, WI 53142-4611
 
 APEX Software Corporation
 412-681-4343
 412-681-4384                   Fax
 Internet information:  truegrid@apexsc.com
 Internet orders:       tgorders@apexsc.com
 CompuServe:            71053,1062
 Anonymous FTP:         ftp.apexsc.com (demos and patches)
 Mailing list:          tglist-request@apexsc.com (announcments, patch notices)
 4516 Henry Street
 Pittsburgh, PA, USA    15213
 Products: Truegrid, Agility
 
 Artic Software
 800-892-0677
 414-534-4309
 PO Box 28
 Waterford, WI  53185-0028
 Products: VB MIDI

 Avanti Software Inc.
 800-758-7011
 415-329-8999
 415-329-8722
 Compuserve: 76260,266
 385 Sherman Avenue, Unit 6
 Palo Alto, CA, USA     94306
 Products: PinPoint

 AutoData Systems
 800-662-2192
 612-941-8180
 612-941-7312                   Fax
 10365 West 70th Street
 Eden Prairie, MN USA           55344-3446

 Bayou City Systems
 713-777-3736
 713-777-3746                   Fax
 8535 Triple Crown Drive
 Houston, TX, USA               77071
 Products: Accounting Systems Developer Kit

 Bennet-Tec Information Systems
 516-433-6283
 516-822-2679                   Fax
 71201.1075@compuserve.com
 10 Steuben Drive
 Jericho, NY, USA               11753
 Products: AllText, Alltext Pro, VBX Artist, Picscroll, FileIcon&DragDrop
 ScatterPlot3D, Tlist
 Comment: The second price is the cost for non-US customers.  The only company
 with a differential pricing policy.

 Borland
 800-366-6464 ext 8034  USA
 800-461-3327           Canada
 408-461-9000
 408-461-8088                   Fax
 1800 Green Hills Road
 Scotts Valley, CA              95067-0001
 Products: Visual Solutions, Paradox Engine

 Brainstorm Technologies
 617-492-3399
 24 Thorndike Street
 Cambridge, MA USA 02141
 Products: VB/NotesLink

 Braintree
 800-745-4645
 718-224-4728                   Fax
 42-42 204th Street
 Bayside, NY, USA               11361
 Products: Hypertext Manager. Ad Hoc Data Viewer, Security Toolkit

 Concentric Data Systems Inc.
 508-366-1122
 508-366-2954                   Fax
 110 Turnpike Road
 Westboro, MA, USA              01581
 Products: R&R Report Writer

 Crescent Software
 800-352-2742           Toll Free Sales
 203-438-5300           Tech Support
 203-431-4626           Fax
 11 Bailey Avenue
 Ridgefield, CT USA     06877-4505
 Products: QuickPak Pro, PDQComm, QuickPak Scientific, NetPak PRk, XREF
 
 Crystal Services
 800-663-1244                   USA
 800-877-2340                   Canada
 604-681-2934                   Fax
 604-681-3450                   Fax Back
 604-669-8379                   Tech Support
 604-681-7163                   Fax
 604-681-9516                   BBS
 604-681-3450                   Fax Back
 72223.2632@compuserve.com
 1050 West Pender Street, Suite 2200
 Vancouver, BC, Canada   V6E 3S7
 Products: Crystal Reports, Crystal Reports Pro, Crystal Reports Server

 Crystal Software
 906-822-7992
 906-822-7994                   Fax
 329 Fire Lake Road
 Crystal Falls, MI, USA 49903
 Products: CrystalCOMM

 Data Techniques Inc.
 800-868-8003
 704-682-4111
 704-682-0025                   Fax
 704-682-4356                   BBS
 Products: ImageMan/VB

 DCA
 800-348-3221 ext 59BB
 Products: QuickApp

 Desaware
 408-377-4770
 408-371-3530                   Fax
 5 Town & Country Village #790
 San Jose, CA 95128
 Products: Custom Control Factory, Spyworks VB, Version Stamper/VB
 
 Distinct 
 408-781-0781
 408-366-2101           Fastfacts
 408-741-0795           email
 mktg@distinct.com
 Products: Distinct TCP/IP

 EllTech Development
 800-553-1327
 404-928-8960
 404-924-2807                   Fax
 4374 Shallowford Industrial Parkway
 Marietta, GA, USA              30066
 Products: Compression Plus, Fax Plus
 
 European Software Connection
 913-832-2070
 913-832-8787                   Fax
 PO Box 1982
 Lawrence, KS, USA      66044-1982
 Products: Kollibri
 
 Evergreen Technologies
 207-326-8300
 207-326-8333                   Fax
 Main Street, PO Box 795
 Castine, Maine, USA            04421
 Products: Vision Tools

 Farpoint Technologies
 804-378-0432
 804-378-1015                   Fax
 569 Southlake Blvd
 Richmond, VA, USA      23236
 Products: Aware/VBX, Grid/VBX, Spread/VBX

 ForeFront
 303-499-9181
 5171 Eldorado Springs Drive
 Boulder, CO, USA       80303
 Products: ForeHelp

 Frustrum Group Inc.
 800-548-5660
 212-338-0721
 212-984-0690                   Fax
 90 Park Avenue, Suite 1600
 New York, NY, USA      10016
 Products: TransPortal Pro

 Geosoft Ltd
 44-532-344000
 44-532-465071                  Fax
 Unit 3M Springfield House
 Hyde Terrace
 Leeds LS2 9LN, UK
 Products: Map Server 2

 HPI
 800-448-4154
 205-880-8705                   Fax
 205-880-8785                   BBS
 sales@instalit.com
 917C Willowbrook Drive
 Huntsville, AL, USA    35802
 Prpducts: Installit/VBX
 
 ImageFX
 716-272-8030
 2021 Brighton-Henrietta TL Rd.
 Rochestor, NY, USA             14623
 Products: FXTools

 Imagesoft Incorporated
 516-767-2233
 516-767-9067           Fax
 516-767-9074           BBS
 UUCP Address: mcdhup!image!info
 2 Haven Avenue
 Port Washington, NY, USA 11050
 Products: ObjectTrieve for VB
 
 Information Builders
 212-736-4433
 212-967-6406                   Fax
 Products: Focus Report Writer for Windows

 Intelec Systems
 501-221-3600
 501-221-7412           Fax
 10201 West Markham, Suite 101
 Little Rock, AR, USA           72205
 Products: IPX Toolkit

 Intersolv
 800-547-7827
 44-727-812812
 1700 NW 167th Place
 Beaverton, OR, USA     97006
 Products: PCVS for VB

 Kansmen Corp
 408-263-9881
 Products: ToolsKan VB

 Kyle Brant Software
 317-297-9801
 5441 Fenmore Rd.
 Indianapolis, IN 46208
 
 LEAD Technologies
 800-637-4699
 704-549-5532
 704-548-8161                   Fax
 8701 Mallard Creek Rd.
 Charlotte, NC, USA             28262
 Products: LEADTOOLS/VB

 Media Architects
 503-297-5010
 503-297-6744                   Fax
 503-297-9425                   BBS
 71662.371@compuserve.com
 1075 NW Murray RD, Suite 230
 Portland, OR, USA              97229-5501
 Products: ImageKnife/VBX Pro, MediaKnife VBX

 Metafile Information Systems Inc.
 507-286-9232
 507-286-9065                   Fax
 421 First Avenue SW
 Rochester, MN,USA              55902
 Products: Metaview Imaging Control

 MicroHelp Inc.
 404-516-0898
 4359 Shallowford Industrial Parkway
 Marietta, GE, USA      30066
 Products: HighEdit
 
 Microsoft
 One Micosoft Way
 Redmond, WA, USA       98052-6399
 800-950-3535                   USA
 800-563-9048                   Canada
 206-936-8661                   Other
 Products: VB, VB Pro, Excel, Word, Project, 
 
 Micro System Options
 206-868-5418
 PO Box 95167
 Seattle, WA, USA       98145-2167
 Products: 3D Graphic Tools for VB

 MotionWorks
 800-800-8476
 415-541-9333
 415-541-0555   Fax
 524 Second Street
 San Francisco, CA, USA 94107
 Products: Motion Works MediaShop
 
 NCR Corporation
 Imformation Products
 2651 Satellite Blvd.
 Duluth, GA, USA        30136-9711
 Products: NICE

 Pinnacle Publishing Inc.
 800-231-1293
 206-251-5057           Fax
 PO Box 888
 Kent, WA, USA          98035-0888
 Products: Graphics Server SDK, Code Print Pro

 Pronexus
 613-839-0033
 613-839-0035           Fax
 613-839-0034           BBS
 
 Products: VBVoice

 Q+E Software
 800-876-3103   Dept M010
 919-859-2220
 919-859-9334           Fax
 5540 Centerview Drive, Suite 324
 Raleigh, NC, USA       27606
 Products: Q+E Multilink VB/2

 Rainbow Imaging Inc.
 212-794-2717
 212-861-8145           Fax
 460 East 79Street
 New York, NY, USA              10021-1425
 Products: Picture++

 Raindrop Software
 214-234-2611
 833 Arapaho, Suite 104
 Richardson, TX, USA            75081
 Products: Open Mail System

 ReportSmith Inc.
 800-446-3446
 415-312-8673                   Fax
 2755 Campus Drive, Suite 205
 San Mateo, CA, USA             94403
 Products: ReportSmith

 Sense8 Corporation
 415-331-6318
 415-331-9148           Fax
 1001 Bridgeway, #477
 Sausalito, CA, USA 94965
 Products: WorldToolKit

 Sequiter Software Inc.
 403-437-2410
 403-436-2999           Fax
 Products: CodeBasic, CodeReporter

 ShapeWare Corporation
 800-446-3335 Ext 48Y
 520 Pike Street, #1800
 Seattle, WA, USA       98101
 Products: Visio

 Sheridan Software Systems
 800-VBDirect
 516-753-0985
 516-753-3661           Fax
 516-753-5452           BBS
 71222.3522@compuserve.com
 35 Pinelawn Road
 Melville, NY USA       11747
 Products: Data Widgets, VB Assist,

 Smithware, Inc
 800-828-7438
 615-860-3500
 615-868-5397           Fax
 75470,546              Compuserve
 590-5654               MCI
 1052 Madison Square
 Madison, TN, USA       37115
 Products: Controls for Btrieve

 Software Interphase Inc.
 401-397-2340
 401-397-6814           Fax
 401-397-4601           BBS
 82 Cucumber Hill Rd.
 Foster, RI, USA                        02825

 Solomon Software
 419-423-3688
 800-879-2767 ext 1226
 419-424-3400           Fax

 SolutionSoft
 408-736-1431
 408-736-4013           Fax
 75210.2214@compuserve.com
 999 Evelyn Terrace West, Suite 86
 Sunnyvale, CA 94086
 Products: HelpBreeze, ViewerBreeze available soon
 
 Speech Systems Inc.
 303-938-1110
 303-938-1874                   Fax
 2945 Center Green Court South
 Boulder, CO, USA               80301-2275
 Products: Phonetic Engine 400

 SPSS Inc.
 800-525-4971
 444 North Michigan Avenue
 Chicago, IL                    60611
 Products: SPSS Developer Kit

 SQA Inc.
 800-228-9922
 617-932-3280                   Fax
 10 State Street
 Woburn, MA, USA                        01801
 Products: SQA TeamTest

 Stylus Innovation
 617-621-9545
 617-621-7862                   Fax
 74431.3533@compuserve.com
 Stylus Innovation, Inc.
 One Kendall Square, Building 300
 Cambridge, MA 02139
 Products: Visual Voice

 Sub Systems Inc.
 800-447-6819
 617-438-8901
 617-438-0311                   Fax
 159 Main Street, #8C
 Southam, MA, USA               02180
 Products: TE Developer's Kit, ReportEase, Spell Time, ChartPro

 SuccessWare
 909-699-9657
 909-695-5679                   Fax
 27349 Jefferson Avenue
 Temecula, CA, USA              92590
 Products: SIxBase/VB

 Teknowledge Corporation
 800-285-0500
 415-493-2645                   Fax
 1810 Embarcadaro Road
 Palo Alto, CA                  94303-3308

 TeraTech
 800-447-9120          
 301-977-2224
 301-963-0436           Fax
 301-963-7478           BBS     9600-N-8-1
 3 Choke Cherry Rd, Suite 360
 Rockville, MD, USA     20850
 Products Dazzle/VB, 

 Turbo Toolware
 602-497-4780
 745 N. Gilbert Road
 Ste. 124-125
 Gilbert, AZ, USA 85234
 Products Speltool VB

 Unelko Corp.
 602-991-7272
 602-483-7674   Fax
 7428 E Karen Drive
 Scottsdale, AZ, USA    85260
 Products: Bridgit

 Visual Tools
 800-884-8665
 913-599-6500
 913-599-6597           Fax
 Compuserve: 72204, 3521
 15721 College Blvd
 Lenexa, KS, USA        66219
 Products: Formula One, VT-Speller
 
 WallData Inc.
 208-883-4777
 206-885-9250           Fax
 17769 NE 78th Place
 Redmond, WA, USA       98052-4992
 Products: Rumba SDK

 Wang Labs
 800-639-9264
 508-967-1125           Fax
 1 Industrial Avenue
 Lowell, MA, USA                01851
 Products: OPEN/Image

 Watcom
 800-265-4555
 519-886-3700
 519-747-4971           Fax
 415 Phillip Street
 Waterloo, ON, Canada N2L 3X2
 Products: Watcom SQL
 
 WhippleWare
 800-241-8727
 617-242-8727
 617-241-8496                   Fax
 20 Cedar Street 
 Charleston, MA, USA            02129
 Products:VB Compress

 Wintertree Software Inc.
 613-825-6271
 CompuServe: 72060,3056
 43 Rueter St.
 Nepean, Ontario
 Canada K2J 3Z9

 Young Software Works
 212-982-4127
 212-673-1715                   Fax
 Compuserve 76703, 4343
 PO Box 185, Cooper Station
 New York City, NY, USA         10276-0185
 Products: VB ProjectWorks
 
 ZyLAB
 800-544-6339
 708-459-8000
 100 Lexington Drive
 Buffalo Grove, IL      60089
 Products: ZyIndex

-- 
Kris Nosack      knosack@park.uvsc.edu

>>>--->  Be strange, but not a stranger!  <---<<<

From donkiely@crl.com Fri 28 Apr 95 15:35:02
Path: nntp.crl.com!howland.reston.ans.net!gatech!udel!news.mathworks.com!uhog.mit.edu!news.mtholyoke.edu!news.byu.edu!hamblin.math.byu.edu!park.uvsc.edu!not-for-mail
From: knosack@park.uvsc.edu (Kris Nosack)
Newsgroups: comp.lang.basic.visual.misc,comp.lang.basic.visual.announce,comp.answers,news.answers
Subject: FAQ: comp.lang.basic.visual VB/Win Frequently Asked Questions
Supersedes: <visual-basic-faq-windows-1-795767429@uib.no>
Followup-To: comp.lang.basic.visual.misc
Date: 22 Mar 1995 17:47:53 -0000
Organization: Visual Basic FAQ Maintainers
Lines: 2879
Approved: vbasic-request@cc.umanitoba.ca, news-answers-request@MIT.Edu
Distribution: world
Expires: 24 Apr 1995 17:47:49 (Z)
Message-ID: <visual-basic-faq-windows-1-795894469@uib.no>
Reply-To: Jan.Haugland@uib.no (Jan Steinar Haugland)
NNTP-Posting-Host: park.uvsc.edu
Summary: Frequently asked questions concerning Visual Basic for Windows.
Keywords: FAQ VISUAL BASIC WINDOWS
X-Posting-Frequency: Posted on the 5th of each month.
X-Content-Currency: This FAQ changes regularly.  When a saved or printed copy
                    is over 6 months old, please obtain a new one.
Xref: nntp.crl.com comp.lang.basic.visual.misc:10332 comp.lang.basic.visual.announce:84 comp.answers:4312 news.answers:37541

Posted-By: auto-faq 3.1.1.2
Archive-name: visual-basic-faq/windows

Last-modified: 12.03.95


                       VISUAL BASIC FOR WINDOWS (VB/Win)
                      Frequently asked Questions & Answers
                                 Section IX - B


   The following symbols indicates new & updated topics:

   [++] means topic is updated in this issue
   [**] means topic is new in this issue

   Hope this makes it easier for Our Regular Readers   ;-)



   TABLE OF CONTENTS:
   ******************


   A. PREFACE [++]

          1. About this document

          2. Where to get the VB/Win FAQ

          3. Kudos & comments


   B. GENERAL VISUAL BASIC QUESTIONS

          1. Does VB/Win make standalone .EXE files?

          2. What is the current version of Visual Basic for Windows?

          3. Where can I get updated VB and other Microsoft files?

          4. Help! I am lost on ftp.microsoft.com.

          5. Where can I get good up-to-date information about VB?  [++]

          6. Are there any examples of commercial applications built using
              Visual Basic? [++]

          7. Limits of VB? [**]


   C. COMMON VISUAL BASIC PROGRAMMING QUESTIONS

          1. What's the difference between MODAL and MODELESS forms?

          2. When/Why should I use Option Explicit?

          3. Why does everybody say I should save in TEXT not BINARY?

          4. Is the Variant type slower than using other variable types?

          5. How do I make a text box not beep but do something else when I
              hit the Enter key?

          6. How do I implement an incremental search in
              list/dir/combo/file boxes?

          7. How do I get the Tab key to be treated like a normal
              character?

          8. How do I make an animated icon for my program?

          9. What is passing by reference?

          10. I get a "file not found" error on the IIF function when I
              distribute by program. Uh?

          11. Is there any way to pass a variable to a form apart from
              using global variables? [++]

          12. How should dates be implemented so they work with other
              language and country formats?

          13. Can a VB application be an OLE server?

          14. How do I dial a phone number without using the MSCOMM VBX?

          15. I have [several] megabytes of memory. Why do I get an "out of
              memory" error?

          16. How do I mimic a toggle button? [++]

          17. How do I get my application on top?

          18. Is there a way to break long lines in VB code?

          19. How do I remove/change the picture property of a control at
              design time?

          20. Is a [foo] VBX/DLL available as shareware/freeware?

          21. How do I make my applications screen-resolution independent?

          22. How do I do Peek and Poke?

          23. Why doesn't "my string" & Chr$(13) do what I want?

          24. How do I prevent multiple instances of my program?

          25. How do I implement an accelerator key for a text box?

          26. How do I force a file dialogue box to reread the currect
              disk?

          27. How do I get the number of free bytes on a disk? [**]

          28. Data Control missing from toolbox when I use VB under NT 3.5.
              Huh? [**]


   D. ADVANCED VISUAL BASIC PROGRAMMING ISSUES

          1. How do I tell when an application executed using the SHELL
              command is finished?

          2. How do I access C style strings?

          3. How can I change the printer Windows uses in code without
             using the print common dialog? How can I change orientation? [++]

          4. Any tips for speeding up VB?

          5. How do I speed up control property access?

          6. How much gain in performance will I get if I write my number
             crunching routines in C instead of Visual Basic?

          7. How do you make a TEXTBOX read only? Or, how do I prevent the
             user from changing the text in a TEXTBOX?

          8. How can I create a VBX?

          9. How do you change the system menu (on the Control-Menu Box)?

          10. How do I play MID, WAV or other multimedia files?

          11. How can I call a 'hidden' DOS program from VB?

          12. How do I do drag & drop between applications?

          13. How do I use GetPrivateProfileString to read from INI files?

          14. How do I implement Undo?

          15. How do I create a window with a small title bar as in a
              floating toolbar? [++]

          16. What is Pseudocode?

          17. Does VB support pointers to functions?

          18. How do I program the Novell NetWare API from VB?

          19. Some Visual Basic 4 rumours

          20. How do you change the icon and otherwise manipulate the DOS
              box? [**]

          21. How do I make the mouse cursor invisible/visible? [**]

          22. How do I create controls dynamically (at run-time)? [**]

          23. How do I set the Windows wallpaper at runtime? [**]


   E. CALLING THE WINDOWS API AND DLLs IN GENERAL

          1. What is the Windows API?

          2. How do I call a DLL?

          3. What about DLL calls that require callbacks?

          4. Tips for calling DLLs (such as the Windows API)


   F. VISUAL BASIC AND DATABASES

          1. Why can't I use an index with my VB accessed database? [++]

          2. "Can't find installable ISAM" or Why does my compiled VB
              database app generate an error when it ran just fine in the
              design environment? [++]

          3. Is the Access Engine and Visual Basic Pro good enough for
             database work? [++]

          4. How do you avoid the "Invalid use of null" error when reading
             null values from a database?

          5. What is "NULL"?

          6. How can I access a record by record number? [++]

          7. How about Access 2.0 compatibility? [++]

          8. Tips for VB database programming: [++]

          9. How come I get a "No Current Record" error when I use a a Data
              Control on an empty table?

          10. How can I speed up my VB database application? [++]

          11. How do I get a bitmap picture in a field in an Access
              database?

          12. What is "Reserved Error -1209"?

          13. "Cannot perform operation. illegal.." with Paradox 3.5
              table(s)

          14. I'm getting error message "Reserved Error [-nnnn] ("There is
              no message for this error")" from Jet Engine 2.0. Huh? [**]

          15. Why do I get "object not an array" when I try reference the
              fields of a global object variable which I have set to a
              table? [**]


   G. DISTRIBUTING VISUAL BASIC APPLICATIONS

          1. What are some tips for using Setup Wizard?

          2. Are there restrictions on what I can distribute with my VB
             program?

          3. What alternatives to setup wizard do I have?

          4. Do I need to worry about users who have Progman replacements
             such as Norton Desktop and PC Tools?

          5. Can I distribute my app without vbrunXXX.dll?

          6. Why won't my setup program install commdlg.dll et. al.?

          7. Where do I install VBXs and DLLs?


   H. MISCELLANEOUS TIPS AND INFORMATION

          1. Multiple identifiers after the DIM statement can be confusing

          2. "Clean up" your project before final EXE compilation.

          3. Multiple END statements can be dangerous; or, The program that
             refused to terminate.

          4. What are the latest versions of the various files used by VB?


   I. VISUAL BASIC FOR APPLICATIONS (VBA)

          1. Any tips for VB/Win 3 programmers moving to VBA?

          2. Does VBA support VBXs?

          3. How do I access properties on my dialog boxes in VBA?

          4. How do I use database routines from Excel VBA?

A. PREFACE [++]


1. About this document

   This document is a compilation of frequently asked questions and their
   answers about Visual Basic for Windows and Visual Basic for Applications
   which have been gathered from posts to the comp.lang.basic.visual.*
   newsgroups.  Although efforts have been made to find obvious errors,
   there is no guarantee that the information in this document is error-
   free. Neither the FAQ maintainer nor anyone else associated with this
   document assume ANY liability for the content or use of this document.
   If you find any errors, please report them to the address given below.

   This FAQ document is protected by international copyright regulations.
   Permission is granted to distribute it freely, both in electronic and
   written format, provided no charge is made. Also, do not make changes to
   this document without the consent of the maintainer. Usenet netiquette
   applies.

2. Where to get the VB/Win FAQ

   Most FAQs (including this one) are available at the anonymous ftp
   archive site "rtfm.mit.edu". All parts of the VB FAQ may be found here:

     ftp://rtfm.mit.edu/pub/usenet/comp.lang.basic.visual.misc/

   **Alternative Sites**:
   The following are alternative sites to rtfm:

   N. America: ftp.uu.net             /usenet/news.answers
   Europe:     ftp.uni-paderborn.de   /pub/FAQ
               ftp.Germany.EU.net     /pub/newsarchive/news.answers
               grasp1.univ-lyon1.fr   /pub/faq
               ftp.win.tue.nl         /pub/usenet/news.answers
               ftp.sunet.se           /pub/usenet
   Asia:       nctuccca.edu.tw        /USENET/FAQ
               hwarang.postech.ac.kr  /pub/usenet/news.answers

   (FYI:  "rtfm" stands for "Read The ******* Manual".  I kid you not!)
   [Andre van Meulebrouck (vanmeule@ils.nwu.edu)]

   You can also have the VB FAQs e-mailed to you by sending a message to
   "mail-server@rtfm.mit.edu" with ONLY the text

     send usenet/comp.lang.basic.visual.misc/*

   in the BODY of the message.

   Alternative mailservers for those who have no ftp access
     ftpmail@decwrl.dec.com or ftpmail@cs.uow.edu.au
     bitftp@pucc.princeton.edu or ftpmail@lth.se
     bitftp@dearn or to bitftp@vm.gmd.de (Europe only)
     ftpmail@ftp.uni-stuttgart.de
     ftpmail@grasp.insa-lyon.fr or ftpmail@ieunet.ie
     bitftp@plearn.edu.pl or bitftp@plearn (Europe)
     ftpmail@doc.ic.ac.uk or ftpmail@sunsite.unc.edu
   [thanks to Jakob Faarvang (jakobf@colossus.ping.dk)]

   For all mailservers:
   Use the "index" command to get a list of files available at the site.
   Use the "help" command to get more detailed instructions.
   (NOTE: commands are in BODY of mail message!)

3. Kudos & comments

   In this document, whenever a long line of code must be split into two or
   more lines of text in the code examples, a | symbol will precede each
   line which should be appended to the line above it.

   As the FAQ maintainer, I don't have time to explore all of the aspects
   of Visual Basic. Neither have I time or knowhow to personally answer
   direct technical questions thoroughly. I rely on your submissions to
   improve the quality and inclusiveness of this document. If you have
   found a VB hint, tip, trick, work-around, etc., please write it up and
   send it to me!

   Jan Steinar Haugland (Jan.Haugland@uib.no), VB/Win FAQ maintainer

   Please note that my first language is not English. You can safely ignore
   all typos, but if you find an error that is so embarrassing you can't
   help pulling your hair and screaming loud, just send me a note and I'll
   correct it quietly. OK?

   This document is a collective effort! I would like to thank all
   contributers, and also all those who have given constructive feedback.
   This FAQ is now widely distributed in the net community.

   Special thanks to the following people who have made many and invaluable
   contributions to the VB/Win FAQ:  Kris Nosack (the previous maintainer),
   Peter Millard, Nic Gibson, Mr. "D" (the anonymous contributor), George
   Tatge (gat@csn.org), Andy Dingley (dingbat@codesmth.demon.co.uk), Ayn
   Shipley (ashipley@hookup.net) and those I may have forgotten (sorry).

   John McGuire (jmcguire@jax.jaxnet.com), a longtime VB user, recently
   went through the FAQ and found lots of things worth his comments. Many
   of his corrections and suggestions are implemented throughout. Thanks!

   Everybody: Your help is GREATLY appreciated!


B. GENERAL VISUAL BASIC QUESTIONS


1. Does VB/Win make standalone .EXE files?

   VB/Win produces .exe files, but they are not standalone. All VB/Win
   programs must be distributed with the VBRUNx00.DLL file (where x is the
   major version number). This DLL must accompany all VB/Win programs, but
   only one such file should reside on every system where VB programs are
   used.

2. What is the current version of Visual Basic for Windows?

   VB/Win is currently at version 3.0

3. Where can I get updated VB and other Microsoft files?

   Microsoft Software Library (MSL) is accessible from the following
   services:

   - Compu$erve

     GO MSL
     Search for <filename.EXE>

   - Microsoft Download Service (MSDL)
     Dial (206) 936-6735 to connect to MSDL

   - Internet (anonymous FTP)
     ftp ftp.microsoft.com
     Change to the \softlib\mslfiles directory

     (There are a LOT of files in this directory! It is not
     advisable to list all the files unless you have good time.
     See map below.)

4. Help! I am lost on ftp.microsoft.com.

   You no longer have to be! The site have been reorganised, and you'll
   find the file DIRMAP.TXT in root (or whatever it's called on a 3.5 NT
   server). Here's the file as I found it (stolen ruthlessly from the
   server for yoru convenience):

   *-------------------------------------------------------------------*
   This file is to help you find your way around ftp.microsoft.com. This
   file only covers the directory structure two levels deep. If you see a
   'kb' directory in a second level directory, it contains all of the
   information regarding that second level directory.  For example, the
   /developr/win32dk directory has a kb directory in it.  This kb directory
   contains all of the articles for any 32 bit development kit.

   ROOT DIRECTORY         SUB DIRECTORY         CONTENTS
   -----------------------------------------------------------------------
   ADVSYS                          Advanced Systems, Networks, Mail
                       LANMAN      LanMan & other networks
                       MAIL        Mail and Schedule+
                       MSCLIENT    Microsoft Networking Client
                       SQL_ODBC    SQL and ODBC
                       WINNT       Windows NT
                       WINSOCK     Windows Sockets information

   DESKAPPS                        Desktop Applications
                       ACCESS      Access
                       DOSWORD     Word for MS-DOS
                       EXCEL       Excel
                       GAMES       Entertainment Packs, Flight Sim, etc.
                       HOMEAPPS    Home applications
                                   (Fine Artist, Creative Writer)
                       MISCAPPS    Other applications
                       MMAPPS      Multimedia Titles
                       OFFICE      Microsoft Office
                       POWERPT     PowerPoint
                       PROJECT     Project
                       PUBLISHER   Publisher
                       WORD        Word for Windows & Macintosh
                       WRKS_MNY    Works and Money

   DEVELOPR                        Developer Tools and Information
                       BASIC       Quick Basic & other Basics
                       DEVCAST     DevCast information
                       DEVUTIL     MS Test, Delta, EXEMOD, EXEPACK,
                                   & LIB Utility
                       DRG         Developer Relations Group
                       FORTRAN     Fortran and Fortran PowerStation
                       FOX         FoxPro and FoxBase
                       MAPI        Messaging API information
                       MASM        Macro Assembler
                       MSDN        Microsoft Developer Network
                       MSJ         Microsoft Systems Journal
                       OLE         OLE
                       TAPI        Telephony API information
                       VB          Visual Basic
                       VISUAL_C    Visual C++, MFC, & other C products
                       WIN_DK      Windows SDK, DKs & At Work
                       WIN32DK     32 bit Development Kits

   MSEDCERT                        Microsoft Education and Certification
                       EDUCATIO    Microsoft Education information
                       CERTIFIC    Microsoft Certified Professional info

   MSFT                            Microsoft shareholder information

                       ANNREPT     Microsoft Annual Report
                       BACKGRND    Background information on Microsoft
                       PRESSREL    Microsoft Press Releases
                       SEC         Recent filings with the Securities and
                                   Exchange Commission

   SOFTLIB                         Instructions & index for software
                                   library

                       MSLFILES    Software library files (> 1500 files)

   PEROPSYS                        Personal Operating Systems and Hardware

                       HARDWARE    Mouse & other Hardware
                       MSDOS       MS-DOS
                       WINDOWS     Windows (all versions)
                       WIN_NEWS    Information on Windows "Chicago"

   TECHNET                         Information on TechNet
                       SERVDIR     Microsoft Services Directory

   *-------------------------------------------------------------------*

   NOTE: Directory and file names at ftp.microsoft.com are NOT case
   sensitive.

   Thanks to Richard Mason (richard@whitney.demon.co.uk) for the map he
   made for us before this long overdue reorganisation, and thanks for
   bringing this to my attention.

5. Where can I get good up-to-date information about VB?  [++]

   If you do any VB programming at all, you really should get the latest
   copy of the Microsoft Knowledge Base from one of the sources listed
   above!  The filename is VBKB.EXE or VBKB_FT.EXE for the version with
   full text searching. The Knowledge Base is a Windows help formatted
   document that is updated almost monthly. (Beware: The files are huge!)

   The EXE files on ftp.microsoft.com (and other places) are simple self-
   extracting files. They don't do any automatic updating of your system,
   just dump the file(s) inside them in the current directory on your disk,
   uncompressed and ready for use. Just replace the old files on your
   system with the new files (same name, usually).

   This FAQ (ahem) is a pretty good source as a digest of many of the VB
   issues that are discussed in the comp.lang.basic.visual.* newsgroups,
   but as such the information contained in this FAQ may not have been
   thoroughly tested or verified.

   For easier access to and use of this FAQ document, get the Windows Help
   file format FAQ doc by anonymous ftp to quasar.sba.dal.ca and look under
   /www/hlp. The .HLP version is made by Tim Roberts
   (TJR@SBACOOP.SBA.DAL.CA). This is HIGHLY RECOMMENDED.

   WWW pages for VB? Carl 'n Gary's Visual Basic HomePage is a good place
   to start:

      http://www.apexsc.com/vb/

   This page has hotlinks to lots of goodies, including the FAQs, clbv.*
   archives (with search tool), etc. [Gary Wisniewski (gary@apexsc.com)]

   Dave McCarter puts out a nice Windows help formatted document called
   "Visual Basic Tips and Tricks". A good resource with information that
   isn't found in the Knowledge Base. It can be found by anonymous ftp to
   ftp.cica.indiana.edu /pub/pc/win3/programr/vbasic/ as VBTIPS??.ZIP,
   where '??' is the version number (yes, get the one with the highest
   number).

   Mark Schoonover has started a monthly magazine called _VBWin
   Programmer's Magazine_ that is compiled around the Discussion of
   Microsoft Visual Basic and Related Issues mailing list. This magazine is
   available at the usual ftp sites like cica and at his BBS (619) 571-
   2846. Mark can be contacted at schoon@cts.com. It also has its own
   anonymous ftp site: ftp.cts.com in the /pub/schoon/VBWM.Issues
   directory.

   There is presently an effort to put together a VB code library so that
   VB users can share their best - and trickiest - programming work. The
   code library project is being spear headed by Hein Ragas who has managed
   to get a directory on CICA for code snippets to be deposited. Stayed
   tuned to comp.lang.basic.visual.misc for more information.

   There's a VISBAS-L mailing list for Visual Basic (Thanks to David Liden
   (DL9U@Virginia.EDU) for tracking it down for me when it moved). You can
   subscribe to this mailing list by sending an email to

     listserv@listserv.tamu.edu

   Place the following text in the *body* of the message (no, not the
   subject line):

     SUB VISBAS-L Real Name

   Where Real Name is just that, *your full real name* not your email
   address. Note that the traffic on this list may overflow your mailbox if
   you have a limited mail buffer. Expect around 40-50 messages every
   weekday, a bit less during weekends. Also, to unsubscribe, do as above
   but with "UNSUB" in the body of the message to the LISTSERV address,
   *not* to the VISBAS-L list address itself (Believe it or not, we usually
   receive 2-3 sub/unsub mails every day on the list, and we're really fed
   up!) Also, this mail server was split and a new list called VBDATA-L was
   made for Vb database (Jet) related topics. Same procedure for
   registering (SUB VBDATA-L Real Name).

   The address for the MS ACCESS listserver is listserv@indycms.bitnet or
   listserv@indycms.iupui.edu The list name is ACCESS-L. To subscribe, you
   follow the same procedure as for the other lists.

   Sorry, I know no mailservers or other Internet resources dedicated to
   VBA specifically. Send me any information you may have, and I'll bring
   it on.

   There are several Usenet newsgroups dedicated to MS Windows programming
   and use. Those groups that may be of special interest to VB programmers
   are marked with *:

   comp.os.ms-windows.misc
   comp.os.ms-windows.programmer.misc
   comp.binaries.ms-windows
   comp.os.ms-windows.advocacy
   comp.os.ms-windows.announce
   comp.os.ms-windows.apps
   comp.os.ms-windows.nt.misc
   comp.os.ms-windows.nt.setup
   comp.os.ms-windows.programmer.tools     *
   comp.os.ms-windows.programmer.win32
   comp.os.ms-windows.setup                *
   comp.os.ms-windows.programmer.winhelp   *
   comp.os.ms-windows.programmer.networks
   comp.os.ms-windows.programmer.graphics
   comp.os.ms-windows.programmer.controls  *

   The latest groups have been added to split the enormous traffic on the
   *.misc groups down in managable chunks. However, the second group
   (.programmer.misc) contains lots of interesting info (mostly C related),
   if you have the time to read it all!

   Also note comp.lang.pascal which is a very good newsgroup for Pascal,
   including Borland Pascal, Turbo Pascal for Windows and Delphi.

   Please don't use this guide to find out where you should crosspost VB
   questions. Check the charter for each group before posting to it. If you
   are sure that your crosspost is legitimate, please note the crossposting
   in the text.

   NOTE: PLEASE don't post VB stuff to comp.lang.visual. This group has
   *nothing* to do with Visual Basic, and the academics discussing "real"
   visual programming there are very, very annoyed at what they call
   "quasi-visual" stuff and postings about those languages to their group.

   If you have a Compu$erve account, you will find a forum for Visual Basic
   there, including some support from Microsoft:

   MS BASIC Forum    (GO MSBASIC)

   Message Sections Available:             Libraries Available:
    1 Forum News/Info                       1 MS Info and Index
    2 Setup Wizard/Kit                      2 Setup Wizard/Kit
    3 Data Access Objects                   3 Data Access Objects
    4 The Data Control                      4 The Data Control
    5 Programming Issues                    5 Programming Issues
    6 ODBC Connectivity                     6 ODBC Connectivity
    7 SQL Queries                           7 SQL Queries
    8 ProEdition Controls                   8 ProEdition Controls
    9 Calling API's/DLL's                   9 Calling API's/DLL's
   10 Using OLE/DDE                        10 VBWIN-ODBC/Database
   11 MSCOMM control                       11 MSCOMM control
   12 MCI/MAPI controls                    12 MCI/MAPI controls
   13 DOS Visual Basic                     13 DOS Visual Basic
   14 DOS and Mac Basic                    14 DOS and Mac Basic
   15 Suggestions/Mktg.                    15 Suggestions/Mktg.
   16 CDK                                  16 CDK
   17 3rd Party Products                   17 3rd Party Products

   There are magazines dedicated to VB. The best known is Fawcett Technical
   Publications' _Visual Basic Programmer's Journal_ (VSPJ). Phone 800-848-
   5523 (for US credit card orders) or 303-541-0610 (int'l and US other
   orders), Email 74003.224@compuserve.com to Shirley Modric for
   subscription info. Address is 280 Second Street, Suite 200, Los Altos,
   CA 94022-3603 USA.

   From Randy Coates (rcoates@telerama.lm.com):
   I currently subscribe to "Inside Visual BASIC for Windows" from the Cobb
   Group.  Although it is a helpful monthly paper (about 14 pages per
   publication), I find it to be overpriced when compared to VB Programmers
   Journal.  Here is the information anyway: Domestic $59/yr ($7.00 each);
   Outside US $79/yr ($8.50 each)
   Phone: Toll Free: 800-223-8720),  Local: 502-491-1900, Customer
   Relations Fax: 502-491-8050, Editorial Department Fax: 502-491-4200.
   Address: _Inside Visual BASIC for Windows_, 9420 Bunsen Parkway, Suite
   300, Louisville, KY  40220.

   (Note: for completeness other VB magazines should be listed, and I would
   like to receive info on those!)

6. Are there any examples of commercial applications built using Visual
   Basic? [++]

   Profit by Microsoft was written mostly in Visual Basic. In fact, Profit
   was one of three programs selected as PC Magazine's Editor's Choice
   among Windows small business accounting packages. Most of the current
   version of Quicken was written in VB2. The viewer/launcher/installer in
   the oh-so-popular Way Cool [Topic] for Windows series of CD-ROMs was
   written in VB3.

   Microsoft uses VB extensively for smaller utilities. 3 of the small apps
   in the Windows and Windows for Workgroups Resource Toolkits are written
   in VB. Also, if you have the Microsoft Bookshelf CD-ROM, you will notice
   that the MVOPTION.EXE program, which is an "options" program for MS
   Viewer, is created in VB.

   Note: The existence of VBX files in a package doesn't ecessarily mean
   that it was written in VB. The most popular C++ compilers also support
   VBXes.

7. Limits of VB? [**]

   Are you kidding? VB have *no* limitations... Uh, yeah ;-)

   For starters:

   a. It's not a true compiler, hence it's slow for non-interface stuff
      (it's of course slow for interface stuff as well, but that's
      *Windows* not VB)

   b. It's not really object-oriented (Try looking for the parent of ie. a
      line control, and you'll wonder why it has no hWnd  - SpyWorks is an
      add-on you may need if this is annoying)

   c. A statement must be on a single line! Expect a fix in VB4.

   d. No arrays of constants.

   e. Your Complaint Here!

   An enormous amount of contributers to this topic! Can you guess why?
   [Entry suggested by Andre van Meulebrouck (vanmeule@netcom.com)]


C. COMMON VISUAL BASIC PROGRAMMING QUESTIONS

1. What's the difference between MODAL and MODELESS forms?

   MODAL forms are forms which require user input before any other actions
   can be taken place. In other words, a modal form has exclusive focus
   until it is dismissed. When showing a modal form, the program pauses at
   the SHOW command until the modal form is either hidden or unloaded. The
   internal MsgBox and InputBox forms are examples of modal forms. To show
   a form modally, use the syntax:

     MyForm.SHOW 1

   MODELESS forms are those which are shown but do not require immediate
   user input. MDI child forms are always modeless. To show a form
   modeless, use the syntax:

     MyForm.SHOW

2. When/Why should I use Option Explicit?

   Option Explicit forces you to declare all variables before using them.
   Opinions vary greatly on this subject. The main reason to use the OPTION
   EXPLICIT statement at the top of all modules is to minimize the amount
   of bugs introduced into your code by misspelling a variable name. Most
   variants of BASIC (including VB) have the capability to create variables
   'on the fly' (without any declarations). This capability can be a double
   edged sword.

   At the minimum, some suggest using the DEFINT A-Z statement in leu of
   OPTION EXPLICIT. This statement will cause any variables which are
   created on the fly to be created as integers as opposed to variant (VB
   3.0) or single precision (VB 1.0 and 2.0). (Integers take up less
   memory).


   The OPTION EXPLICIT statement causes VB to 'disable' its ability to
   create variables on the fly. Thus, all variables must be declared using
   a DIM or REDIM statement. All variables not declared will cause an error
   when the OPTION EXPLICIT statement is used. This will eliminate bugs
   caused by a misspelled variable. The option works module-wide, so you
   can have some modules with and some without this option in your project.

3. Why does everybody say I should save in TEXT not BINARY?

   Actually, saving in binary mode is a bit faster, so why do we recommend
   you to save in text?

   If you save the source and the project as text, it becomes ASCII (or
   really, ANSI) code that you can edit with any text editor or (if you are
   careful when you save) word processor. If you save in binary, only the
   VB development environment, current or later versions, will understand
   the code. The Setup Wizard can not scan binary projects. Also, source
   documenters and other programming tools usually require text mode. If
   you use text, you can use a simple text editor (ie. notepad) to cut and
   paste code from other source/form modules into your current project.
   Some 'tricks' (like making an array of 1 control into a single non-array
   control again) is easily done with an editor but not that easy in the
   environment. If you want to print your project to paper the file|print
   option in the VB environment is often not good enough; you may want to
   import the text files into your word processor. And, finally, if
   something goes wrong (only one byte is changed!) you may be out of luck
   in binary mode. In text mode you will more easily be able to fix it.

4. Is the Variant type slower than using other variable types?

   Generally, yes, if we are talking numeric variable types. The Variant
   type also increases memory overhead. To test the speed difference, try
   the following piece of code in something like a button_click event and
   keep the debug window on the screen:

     Dim Va As Variant
     Dim In As Integer
     T1! = Timer
     For i% = 1 To 32766
       Va = i%
     Next i%
     T2! = Timer
     Debug.Print "With variant:  "; Format$((T2! - T1!), "0.0000")
     T1! = Timer
     For i% = 1 To 32766
       In = i%
     Next i%
     T2! = Timer
     Debug.Print "With integer:  "; Format$((T2! - T1!),"0.0000")

   This test shows (on our test system) that integers are ~60% faster!
   However, for strings there where no real difference, or in some
   instances, variants were faster than strings for routines with heavy
   conversion usage. For the best result in your application, test your
   routines directly.

5. How do I make a text box not beep but do something else when I hit the
   Enter key?

   Put "something else" in your _KeyPress event, depending on what you
   really want. This code example makes *nothing* happen, for an extended
   period of time:

     Sub Text1_KeyPress (KeyAscii As Integer)
         If KeyAscii = 13 Then   '13 is Key_Return
            KeyAscii = 0
         End If
     End Sub


   This might not be a very nice thing to do, since your users usually have
   some intention when they press Enter. Often they will want to jump to
   the next control, like the Tab key does. To have the Enter key emulate
   the Tab key action, you will need to add the line 'SendKeys "{tab}"'
   above 'KeyAscii=0' in the example above (Yes, I thought KeyAscii=9 works
   but it doesn't! Tab is obviously handled by Windows on a lower level).

   By the way, you'll also find this in the Microsoft VB Knowledge Base
   (see KB Q78305 and Q85562).

   Note: If MultiLine=True you will *not* want to disable the normal
   behaviour of the Enter key.

6. How do I implement an incremental search in list/dir/combo/file boxes?

   This is your lucky day. Dan Champagne (Dan_Champagne@dell.com) made some
   VB code (no DLLs are necessary!) which easily provides this feature for
   your applications:

     ' Code by Dan Champagne
     ' 4/18/94

     ' This code can be used to do an incremental search in either a
     ' list box, dir, combo, or a file box. The following code is set
     ' for a file box called FILE1. To make it work with a list box, or
     ' a file box with a different name, change all occurences of FILE1
     ' with whatever you or VB has named your list, combo, dir, or file box.
     ' There are two places where you will need to change these. They are
     ' on the last couple of lines in the KeyPress code.
     ' Also, thanks to John Tarr for helping debug the code.

     'In a .BAS file, add the following:
     'searchme$ is a global vaiable that will keep track of what the
     'user has typed so far.
     Global searchme$

     'The following needs to be on one line.
     Declare Function SendMessageBystring& Lib "User" ALIAS
     |"SendMessage" (ByVal hWnd%, ByVal wMsg%, ByVal
     |wParam%, ByVal lParam$)

     Global Const WM_USER = &H400
     Global Const LB_SELECTSTRING = (WM_USER + 13)
     Global Const LB_FINDSTRING = (WM_USER + 16)

     'In File1 under keydown, add the following:
     'This checks if the user has pressed the up or down arrow.
     'If they have, reset searchme$ to "".
     If KeyCode = 40 Or KeyCode = 38 Then
        searchme$ = ""
     End If

     'In File1 under lostfocus, pathchange, patternchange, and click add:

     'If the user has done any of the above, reset the searchme$
     'string.
     searchme$ = ""

     'In File1 under keypress add:

     Dim result&

     Select Case KeyAscii
         Case 8     'Backspace
             If searchme$ <> "" Then
                 searchme$ = Left$(searchme$, Len(searchme$) - 1)
             Else
                File1.ListIndex = 0

             End If
             KeyAscii = 0
             Exit Sub
         Case 27    'Escape
             searchme$ = ""
             KeyAscii = 0
             Exit Sub
         Case 13    'Enter
             searchme$ = ""
             KeyAscii = 0
             Exit Sub
         Case Asc("a") To Asc("z"), Asc("A") To Asc("Z"), Asc("'"),
         |Asc("."), Asc(" "), Asc("0") To Asc("9")
             searchme$ = searchme$ & Chr$(KeyAscii)
             KeyAscii = 0
     End Select

     result& = SendMessageBystring(FILE1.hWnd, LB_FINDSTRING,
     |0, searchme$)

     If result& = -1 Then
        searchme$ = Left$(searchme$, Len(searchme$) - 1)
     Else
        result& = SendMessageBystring(FILE1.hWnd, LB_SELECTSTRING,
        |-1, searchme$)
     End If

7. How do I get the Tab key to be treated like a normal character?

   You must set TabStop = False for ALL controls on the active form. Then
   you will be able to insert "tab" (chr 9) characters in controls like the
   text box.

   If you feel you need the Tab key to behave "normal" (ie. jump to next
   control) outside this specific control, it is trivial to emulate its
   functionality in code:

     Sub Command1_KeyDown (KeyCode As Integer, Shift As Integer)
       If KeyCode = 9 Then
         If Shift = 0 Then
            Command2.SetFocus 'Tab=Next control
         ElseIf Shift = 1 Then
            Command3.SetFocus 'Shift-Tab=Prev.ctrl.
         End If
       End If
     End Sub

   ...etc.

8. How do I make an animated icon for my program?

   For an example on how you change the icon for your application as it is
   displayed when it is minimized, see the example REDTOP in the
   \samples\picclip directory for VB/Win 3 Pro. This demonstrates a fancy
   animated icon.

9. What is passing by reference?

   Arguments are either passed by reference or by value. When they are
   passed by value, they cannot be changed by the procedure or function
   they are passed to. They *can* be altered when passed by reference,
   since passing by reference is just passing the address.

   Note that procedures are less strict about variable types when you use
   BYVAL. If you declare that your Sub takes a Variant, VB takes that
   seriously and gives a nasty "mismatch error" if you try to pass ie. a
   string to it. Make it ByVal (at the cost of some speed) and your sub
   will be more tolerant.

   Also note the following nasty trap:  Arguments are passed by reference
   unless enclosed by parentheses or declared using the ByVal keyword.
   [VBWin Language Ref., p. 55]

10.I get a "file not found" error on the IIF function when I distribute by
   program. Uh?

   There's a documentation error, since the manual does not tell you that
   the IIF function requires the file MSAFINX.DLL to be distributed with
   your application. No, IIF is not financial (I should know, I study
   finance right now, or at least I should be doing that ;-] ).

11.Is there any way to pass a variable to a form apart from using global
   variables? [++]

   The standard workaround is to put an invisible text box (or caption or
   any other control that suits your use.) on the target form and access it
   by Form.textbox = "value". Then you can use the Change event of that
   control to do anything you want in that form. Also, check out the .Tag
   property which is a "what-you-want" property where you can hook any
   string you want onto a control. This property can also be accessed from
   other modules.
   [Dave Mitton (mitton@dave.enet.dec.com)]

   Perhaps a more elegant and flexible way is to implement a stack with
   global routines. I've done this for a math project, but this stack was
   rather complicated and special purpose (and inspired by HP calculators,
   of which I'm a great fan).

   Jan G.P. Sijm (jan.sijm@intouch.nl) has implemented some routines for
   general stacks:

   '--------------------------------------------------------------------
   Option Explicit                        'Variable declarations required
   Dim m_vStack() As Variant              'Stack of variant types

   '*-------------
   '*  This function will pop a value of a stack of variant
   '*  values. The value to be popped (e.g. the variable it
   '*  is assigned to) must have one of the basic variable
   '*  types that Visual Basic supports. The type of the
   '*  return value is determined by the type of the variable
   '*  it is assigned to.
   '*
   '*  Input    : None
   '*  Modifies : m_vStack, Stack of variant's
   '*  Return   : Value of last pushed variant
   '*-------------
   Function stkPop () As Variant
     Dim iM As Integer
     iM = UBound(m_vStack)                'Get current stack size
     stkPop = m_vStack(iM)                'Pop value from stack
     iM = iM - 1                          'Decrement number of elements
     ReDim Preserve m_vStack(iM) As Variant
   End Function

   '*-------------
   '*  This function will push a value onto a stack of
   '*  variant values. The value to be pushed must have one
   '*  of the basic variable types that Visual Basic supports
   '*
   '*  Input    : vValue, Value to be pushed
   '*  Modifies : m_vStack, Stack of variant's
   '*-------------
   Sub stkPush (ByVal vValue As Variant)
     Dim iM As Integer
     On Error Resume Next                 'Trap for undimensioned array
     iM = UBound(m_vStack)                'Get current array size
     iM = iM + 1                          'Increment number of elements

     ReDim Preserve m_vStack(iM) As Variant
     m_vStack(iM) = vValue                'Push value on stack
   End Sub

   'This is a short example of how the stack routines can be used in a
   'Visual Basic program. This example will push three parameters onto
   'the stack. A modal dialog is displayed. The dialog will pop the
   'parameters from the stack and set edit controls with the values.

   Sub ShowDialog()
     '
     '  Push the parameters for the dialog
     '  onto the stack and display the dialog
     '
     stkPush sName
     stkPush sStreet
     stkPush sCity
     dlgPerson.Show MODAL
   End Sub

   Form_Load()
     '
     ' Pop the parameters of this dialog from the
     ' stack in REVERSED ORDER and place the values
     ' in the appropriate edit controls.
     '
     dfCity.Text = stkPop()
     dfStreet.Text = stkPop()
     dfName.Text = stkPop()
   End Sub
   '--------------------------------------------------------------------

12.How should dates be implemented so they work with other language and
   country formats?

   If you use ie. MM/DD/YY format dates in a program, you will get either a
   runtime-error (ie. month>12) or the wrong date (ie. March 12 instead of
   December 3) when your program is used in Europe. And vice versa, of
   course. Even Microsoft's own example programs (like the MAPI sample)
   make this stupid mistake and fail miserably. Use the Format command to
   make sure you get the date you want. For example:

     strTodaysDate = Format[$](Now, "Short Date")

   As a side note, Microsoft has taken much heat on the newsgroup for VB's
   bad support for internationalization! Just try to make a date literal in
   source code that works everywhere as a little exercise. Answer elsewhere
   in this document. No prizes  :-)

13.Can a VB application be an OLE server?

   No. You'll have to use an external DLL/VBX. If you see any examples,
   please tell the newsgroup.

14.How do I dial a phone number without using the MSCOMM VBX?

   The MSCOMM VBX that comes with VB/Pro is great for creating
   communication programs, but it's overkill for dialing a phone number.
   Try the following code:

     PhoneNumber$ = "(123)456-7890"
     Open "COM2" For Output As #1   'or COM1
     Print #1, "ATDT" & PhoneNumber$ & Chr$(13)
     Close #1

   Ian Storrs <exuian@exu.ericsson.se> informed me that he had experienced
   problems with this when the VB program was run from a network drive. A
   file named "COM1" was created on the disk! This trick is probably not a

   good idea for bigger applications, but it's nice for small personal
   utilities.

15.I have [several] megabytes of memory. Why do I get an "out of memory"
   error?

   Unfortunately, Microsoft has been more famous for memory barriers than
   anything else. This is a late descendant of the infamous 640K barrier
   that has been plaguing us for years. Although Windows allows the user to
   access several megabytes of memory, it uses two limited (64K) memory
   areas called User Heap and GDI Heap for some specific data structures.
   Go to the Help|About box in Program Manager to see the percentage of
   free resources in the *most* exhausted heap. If these areas are
   exhausted, you are out of luck. VB programs are unfortunately rather
   greedy on these structures. Windows 4 is supposed to free us from this
   limitation...

   Note that every visible control (ie every button) is a window to
   Windows. Every new control takes up some bytes in the precious User
   heap.

   Also, there is another way to run out of memory in Windows, not related
   to VB. Windows requires free Upper Memory Area (UMA, also called Upper
   Memory Blocks, not to be confused with High RAM, which is the first 64K
   of extended memory) to do certain tasks. If you use QEMM or DOS 6+
   MemMaker and you have many device drivers (network, etc) this area may
   have been filled up before you launch Windows. You will then be unable
   to start applications, even though you have plenty of free RAM. The
   problem can be solved with careful memory setup, but this is far beyond
   the scope of this FAQ.

   On a completely unrelated problem: When you run a program with an
   outline control with some ATI graphics cards, it may crash with just
   that error message. (see Knowledge Base Q100194 PRB: "Some ATI Video
   Drivers Hang When Using MSOUTLIN.VBX")

16.How do I mimic a toggle button? [++]

   The only "fix" we know for this problem is to use a picture control to
   mimic the action of a button or button3d control. You need two bitmaps,
   one for buttonup and one for buttondown (and perhaps one more for
   inactive state). This is a kluge, we know. Look at the button bar used
   in the MDINOTE sample program supplied with VB for an example of this.
   (Note: You can't use an image control since it doesn't take click
   events)

17.How do I get my application on top?

   To force a form to the front of the screen, do the following command:

     Form1.ZOrder

   To make the application *stay* on top, put the Zorder command in a Timer
   event repeatedly called, say, every 1000 msecs. This makes a "softer"
   on-top than other methods, and allows the user to make a short peek
   below the form.

   There are two different "Zorder"'s of forms in Windows, both implemented
   internally as linked lists. One is for "normal" windows, the other for
   real "topmost" windows (like the Clock application which is distributed
   with MS Windows). The Zorder command above simply moves your window to
   the top of the "normal" window stack. To make your window truly topmost,
   use the SetWindowPos API call like this:

     'Make these declares:
     Declare Function SetWindowPos Lib "user" (ByVal h%,
     |ByVal hb%, ByVal x%, ByVal y%, ByVal cx%, ByVal cy%,
     |ByVal f%) As Integer
     Global Const SWP_NOMOVE = 2

     Global Const SWP_NOSIZE = 1
     Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
     Global Const HWND_TOPMOST = -1
     Global Const HWND_NOTOPMOST = -2

     'To set Form1 as a TopMost form, do the following:
     res% = SetWindowPos (Form1.hWnd, HWND_TOPMOST, 0, 0,
     |0, 0, FLAGS)
     'if res%=0, there is an error

     'To turn off topmost (make the form act normal again):
     res% = SetWindowPos (Form1.hWnd, HWND_NOTOPMOST, 0, 0,
     |0, 0, FLAGS)

18.Is there a way to break long lines in VB code?

   There is unfortunately no line continuation character in VB/Win 3.0.
   Excel 5 VBA does, however, use Space+Underscore (" _") as a line
   continuation character, and we hope this will be included in the next
   version of VB.

   There are a few tricks you can use to reduce line length, but
   unfortunately there is very little to do with DECLARE statements which
   can get very long.

   Print your source in landscape   :-/

19.How do I remove/change the picture property of a control at design time?

   Mark the (bitmap) or (icon) text in the property window and press Del or
   Backspace. "No!" I hear you cry, "It doesn't work". Well, it does if you
   first select the object from the combo box at the top of the Properties
   Window, and then immediately afterwards  doubleclick (or paint over) the
   "(bitmap)" text and press Del. Alternatively, just click on another
   control, then click back to the first control. Now Del works. Who said
   "bug"?

   If you want to paste your picture directly into the VB program by
   pressing Ctrl-V when you are editing the picture property, you will have
   to use a semilar procedure: select the control, select the property,
   press Ctrl-V. If you try it again without deselecting the control first
   (or selecting it from the combo box), it doesn't work.

20.Is a [foo] VBX/DLL available as shareware/freeware?

   Part 4 of the FAQ is Adam Harris' excellent "Shareware Custom Controls
   List". Please consult this list before you post this question.

   The following type of controls are NOT known to be available as sw/pd/fw
   for Visual Basic, only as commercial toolboxes (If you feel like making
   any of these for VB and sharing it for a modest fee, you will become
   very popular!):

   a. ZModem communication control/source

   b. Rich Text Format-control or other mixed font/word processor control
      (rumours indicate that this will be in the Windows 4 API, and
      therefor available from VB)

   c. Matrix math

   If any of these should be available, please tell us.

21.How do I make my applications screen-resolution independent?

   There are two methods: Either get a custom control that does the job for
   you, or you write lots of complicated code in the Load and Resize
   events.

   For the first option, check out VideoSoft's $hareware VSVBX.VBX
   (download VSVBX.ZIP from Cica or mirrors). It has a will of its own, as
   you will experience, but it's generally better than trying what is
   described below.

   For the brave (or stupid), try to write "screen resolution-smart code"
   in the form's Load event. If the form is resizable (normally it should
   be), you'll have to put some magic into the Resize event as well. There
   are 4 rules of thumb:

   a. Do not trust the form's height and width properties.  These measure
      the entire form, not the client area where your controls are.  To see
      this in action, create a simple applet with the only code being in
      the resize event which resets a line control from 0,0 to the form's
      width,height properties.  The top left corner is in the client area,
      the bottom right corner disappears.  The API call GetClientRect will
      return the size of the client area in pixels.  You can use the screen
      object's TwipsPerPixelX and TwipsPerPixelY properties to convert from
      pixels to twips. If that's not enough, GetWindowRect will return the
      actual size of the entire form, client and non-client areas combined.
      GetSystemMetrics will return individual pieces of things like border
      width/hight, caption height, etc.

   b. Use the TextWidth and TextHeight properties.  You can use them off
      the form if all your controls share the same font, otherwise use them
      off of the given control.  I typically do a TextWidth("X") and
      TextHeight("X") to get a value which I use as a margin between
      controls.  I grab these values on startup, and multiply it by 2, 1.5,
      .75, .5, .25 to get varying margin sizes, depending on how close or
      far apart I want to space things. If your control has an autosize
      property, you may want to use it, and then calculate the maximum
      width of a control in a given "column" of controls on your screen and
      position all of them accordingly.

   c. Try not to resize your controls in the resize event.  You will spawn
      another resize event in the process.  Of course, you can use a flag
      to determine whether the resize event is the original event or the
      spawned one.  Using the load event, and setting the forms borders to
      fixed minimizes the amount of work you have to do.

   d. Make sure you use a consistant scale.  I don't even bother with the
      scale properties, but instead just convert pixels (from API calls)
      into twips and be done with it.  If you do use scale properties, be
      sure you convert your numbers correctly.  I had no end of difficulty
      when I failed to convert into twips with one number that was used in
      a series of calculations to position controls.  Also be sure all your
      controls share the same SCALE -- another nasty problem I had before I
      gave up on them completely.
      [Thanks to our generous anonymous source "D"]

22.How do I do Peek and Poke?

   VB provides no mechanism for this.  There are several 3rd party pkgs.
   which provide this.  Also, this often comes up in regards to the comm
   ports and you can many times do what you want with the mscomm.vbx.
   [George Tatge (gat@csn.org)]

   Rumours has it than one of MicroHelp's freeware (not crippleware) DLLs
   had this capability. Any details, anyone?

   There's a shareware package for in/out routines, btw.

23.Why doesn't "my string" & Chr$(13) do what I want?

   You need to also add a Chr$(10):  "my string" & Chr$(13) & Chr$(10) will
   give you a CR and LF.
   [George Tatge (gat@csn.org)]

24.How do I prevent multiple instances of my program?

   In VB 3, the property App.PrevInstance is set to True if an older
   instance of the program already exist.

   The following piece of code, stolen from MS KB article Q102480, will
   activate the old instance and then terminate itself:

     Sub Form_Load ()
       If App.PrevInstance Then
          SaveTitle$ = App.Title
          App.Title = "... duplicate instance."      'Pretty, eh?
          Form1.Caption = "... duplicate instance."
          AppActivate SaveTitle$
          SendKeys "% R", True
          End
       End If
     End Sub

   As Robert Knienider(rknienid@email.tuwien.ac.at) informed me, this piece
   of code WILL NOT work for non-English versions of MS Windows where the
   word for "Restore" does not have "R" as the underlined word. Replace the
   "R" in the SendKeys line above with "{ENTER}" or "~".

   Note that you shouldn't prevent multiple instances of your application
   unless you have a good reason to do so, since this is a very useful
   feature in MS Windows. Windows will only load the code and dynamic link
   code *once*, so it (normally) uses much less memory for the later
   instances than the first.

25.How do I implement an accelerator key for a text box?

   You want to use a label caption to identify a text box and to act as if
   it were the text box caption:

   Example:

   &Label1  [text1      ]

   How should I do to set the focus to text1, by typing <ALT>L

   Make sure that the TabIndex property for the text box is 1 greater than
   the
   label's TabIndex. Since a label can't have the focus, the focus will go
   to the next item in the tab order, which would be the text box.

   Here's any easy way to set the TabIndex for a busy form. Select the
   object that should be last in the tab order and then select the TabIndex
   property. Press 0 (zero), click on the next to last object, press 0,
   click on the  the next object back, press 0, etc.  When you're done, all
   of the TabIndexes  will be in order, because VB increments all of the
   higher TabIndexes when you put in a lower number.

   Many thanks to Jonathan Kinnick and Gary Weinfurther that provided the
   answer
   on the FIDO net echo VISUAL_BASIC.
   [Tiago Leal (Tiago.Leal@p25.f1.n283.z2.gds.nl)]

26.How do I force a file dialogue box to reread the currect disk?

   If you make a simple dialogue box modelled after common dialogue
   (normally you should *use* the common dialogue VBX!), you will notice
   that reselecting the diskette drive will not really rescan the disk.
   Very annoying to change to C:, and to reselect A: just to make it read
   the directory of a new diskette.

   To solve this problem, put

     drive1.refresh

     dir1.refresh
     file1.refresh

   in the code for the "Rescan" button (or whatever).

27.How do I get the number of free bytes on a disk? [**]

   See Article Q113590 (or Q106553) in Microsoft's VB KnowledgeBase. A
   short extract follows:

   Declare Function DiskSpaceFree Lib "SETUPKIT.DLL" () As Long

   Dim free_space& ' Holds number of bytes returned from DiskSpaceFree().
   ChDrive "c:"    ' Change to the drive you want to test.
   free_space& = DiskSpaceFree()
   [Geir Tutturen(itfgt@nlh10.nlh.no)]

28.Data Control missing from toolbox when I use VB under NT 3.5. Huh? [**]

   Open the VB.INI file and add these lines under the [Visual Basic]
   heading:

   ReportDesign=1
   DataAccess=1
   [Danny Ames (dames@pic.net)]


D. ADVANCED VISUAL BASIC PROGRAMMING ISSUES


1. How do I tell when an application executed using the SHELL command is
   finished?

   Shell() doesn't really return a task handle, it returns an instance
   handle. Any documentation that says otherwise is wrong. But never mind
   that; the answer to your question is to use the API call GetModuleUsage.

     'Put this in the general declarations of your form/module
     Declare Function GetModuleUsage Lib "Kernel" (ByVal
     |hModule As Integer) As Integer

     'Here's where you shell out to the other program
     intHandle = Shell("PROGRAM.EXE")
     Do While GetModuleUsage(intHandle) > 0
        DoEvents
     Loop
   [Kenn Nesbitt, Microsoft Consulting Services (kennn@netcom.com)]

   The FindWindow command can also be used (search the Tips help file for
   "How VB Can Determine if a Specific Windows Program Is Running"). I have
   had to use this when the program I shelled to unloaded itself and ran a
   different EXE. My program thought the shell was done (since the shelled
   EXE ended), but it really had just "moved on" to another EXE. Generally,
   the code in cases like this must be customized to fit the situation.
   [John McGuire (jmcguire@jax.jaxnet.com)]

2. How do I access C style strings?

   Use the 'lstrlen' and 'lstrcpy' calls found in the Kernel DLL.

3. How can I change the printer Windows uses in code without using the
   print common dialog? How can I change orientation? [++]

   You can change the printer the VB 3.0 Printer object is pointing to
   programmatically (without using the common dialogs). Just use the
   WriteProfileString API call and rewrite the [WINDOWS],  DEVICE entry in
   the WIN.INI file!  VB will instantly use the new printer, when the next
   Printer.Print command is issued. If you get the old printer string
   before you rewrite it (GetProfileString API call), you can set it back

   after using a specific printer. This technique is especially useful,
   when you want to use a FAX printer driver: Select the FAX driver, send
   your fax by printing to it and switch back to the normal default
   printer.
   [Hajo Schmidt (hajo@bwl.bwl.th-darmstadt.de)]

   It is recommended (and polite, as we're multitasking) to send a
   WM_WININCHANGE (&H1A) to all windows to tell them of the change. Also,
   under some circumstances the printer object won't notice that you have
   changed the default printer unless you do this.

     Declare Function SendMessage(ByVal hWnd As Integer,
     |ByVal wMsg As Integer, ByVal wParam As Integer,
     |lParam As Any) As Long
     Global Const WM_WININICHANGE = &H1A
     Global Const HWND_BROADCAST = &HFFFF
     ' Dummy means send to all top windows.

     ' Send name of changed section as lParam.
     lRes = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0,
     |ByVal "Windows")
   [Nic Gibson (nic@skin.demon.co.uk)]

   To change between landscape and portrait orientation, search of VBKB_FT
   on "lands*" finds Article ID: Q80185 "How to Set Landscape or Portrait
   for Printer from VB App".

   This is an extract:

     Declare Function Escape% Lib "GDI" (ByVal hDC%, ByVal nEsc%, ByVal nLen%,
       |lpData As Any, lpOut As Any)

     Sub Command1_Click ()
        Const PORTRAIT = 1
        Const LANDSCAPE = 2
        Const GETSETPAPERORIENT = 30
        Dim Orient As OrientStructure
        Printer.Print ""
        Orient.Orientation = LANDSCAPE
        x% = Escape(Printer.hDC, GETSETPAPERORIENT, Len(Orient), "", Null)
        Print x%
     End Sub
   [Ayn Shipley (ashipley@hookup.net)]

4. Any tips for speeding up VB?

   Who said "code in C"???? ;-)

   a. When SHOWing a form with lots of bound controls, have a blank frame
      covering everything. Then, in the Form_Activate event, set the
      Frame.Visible = False. This greatly speeds the display of the form
      and hides ugly thrashing as the data controls initialize.
      [Christopher Biow (biow@cs.umd.edu)]

   b. Try to keep any Global definitions to a minimum.  Massive numbers of
      global variables really seem to slow VB Windows down (besides chewing
      up memory).  In other words, if you've pasted a lot of stuff from the
      globals.txt file, trim all definitions and variables you don't use in
      your application.

   c. Keep the total number of controls and forms used to a minimum (you've
      probably already guessed that).

   d. Keep fancy graphics to a minimum (another one you know).

   e. Try "pre-processing" in the background (using Do_Events).  Doesn't
      really speed anything up, but often there is a lot of "idle" time
      while the user is selecting menu's, buttons and such - if you can do

      some calculations, image loading or whatever during this idle time
      your user perceives the application is faster than it really is.

   f. Hide often-used forms rather than unloading them. Unloading saves
      memory, but it takes longer to re-load a form than to simply "un-
      hide" it.
      [Tips b to f by Galen Raben (galenr@gr.hp.com)]

   The following tip is along the same lines, but with a code sample. They
   are provided by Andy Dingley (dingbat@codesmth.demon.co.uk):

   You're limited by the system as to how quickly you can go from calling
   frmMyForm.Show to being able to type into the controls, but you can make
   the form *appear* to display faster. One technique is to keep forms
   loaded, and just switch their visibility on and off. This is heavy on
   resource usage, and doesn't help for the first time they're shown.

   Most forms have some processing (eg. querying a table to fill a list
   box) that goes on when they're first opened, and this is what causes the
   most serious delay. It's possible to display the form, make its controls
   appear on screen, then do the slow processing before finally making the
   form "live". As the user can see things happening, the perceived delay
   is less obvious.

   Include the following code in your form:

     Option Explicit
     Dim FirstActivation as integer

     Sub Form_Activate
        DoEvents   'Allow the _Load event to be seen on screen
        If FirstActivation Then

           ' Do all the slow loading stuff here
           If FillComboBox <> 0 Then
              Unload Me 'If it all goes horribly wrong, then you
                        'can call Unload from an _Activate event
                        '(Which you can't do from the _Load event)
           End If
           FirstActivation = False
        End If
        Screen.MousePointer = DEFAULT
     End Sub

     Sub Form_Load
        FirstActivation = True
     End Sub

   Show the form by using:

     Screen.MousePointer = HOURGLASS
     frmMyForm.Show MODAL


   Bruce Garrett (bruceg@access2.digex.net) had the following tips from his
   VBITS 93 notes:

   - Polling a control for its properties directly is 10 to 20
     times slower then placing the property values you need into
     variables and testing the value of the variables.

   - Swap tuning: Modules are not loaded until used; put related
     code in the same modules, reduce the number of intermodule
     calls and keep modules small.

   - Binary file I/O is faster then Text/Random.

   There was also a lot of discussion about "apparent" speed i.e: how it
   looks on the screen as opposed to how fast it's chugging internally. It

   was noted that the cute little flashing menu items and exploding windows
   in the Mac amounted to a little razzle-dazzle to distract you from how
   long it took to actually load something and get it on the screen.
   Keeping all your forms loaded but hidden until needed was suggested.
   Also the use of progress indicators and a simple quickly loaded and
   drawn startup form. Also preloading data you expect to need.

5. How do I speed up control property access?

   Instead of using a property in a loop, you will be better off using a
   normal variable in the loop and then assign the variable once to the
   property afterwards. Also, when reading a property, you should read it
   once into a variable instead of using it in a loop.

   Sometimes it is not possible to simply put contents of a property into a
   variable. For example, if you are using a list box or you need to
   conserve memory. In these cases you can send the WM_SetRedraw message to
   the control to prevent redrawing. You can typically increase the speed
   6-10 times - or even more.

     'Add the following declares:
     Declare Function SendMessage Lib "User" (ByVal hWnd As
     |Integer, ByVal wMsg As Integer, ByVal wParam As
     |Integer, lParam As Any) As Long
     Const WM_SetRedraw = &HB

     'Add this to your code:
     Result% = SendMessage(Text1.hWnd, WM_SetRedraw, 0, 0)
     'redraw off
     'Do your stuff here!
     Result% = SendMessage(Text1.hWnd, WM_SetRedraw, 1, 0)
     'redraw on

   This same method applies to list boxes and other controls.

6. How much gain in performance will I get if I write my number crunching
   routines in C instead of Visual Basic?

   Probably the best solution to the number crunching problem is to write
   the number crunching routines as a custom control or a DLL, and plug it
   into a VB app. VB interface handling is not significantly slower than,
   say C++, and most of the wait is associated with Windows.

   Some real world experience speaks volumes about this one:

   I wrote some time consuming code in VB to solve a combinatorical (does
   this word exist in English?) problem. The code consists of one main
   recursive function, which calls itself very often. It took a night to
   compute a certain problem. I was rather disappointed and then decided to
   write the central routine in C++. It was a 1:1 transcription. The
   routine was compiled with the MS C++-Compiler. It took only 22 Minutes
   for the same problem. Amazing, isn't it? The routine doesn't do any
   floating point arithmetic, only integer, and handles some arrays. The PC
   was a 33MHz 486. And the second amazing thing is, that a IBM RS6000
   (560)-Risc-machine needed 17 Min for the same code. I was the only one
   on the machine. I thought it should be much faster. The MS C++ seems to
   make very fast, optimized code. The optimization was configured to make
   fast code.
   [Christoph Steinbeck (steinbeck@uni-bonn.de)]

7. How do you make a TEXTBOX read only? Or, how do I prevent the user from
   changing the text in a TEXTBOX?

   There's a lot of ideas on this one. You can grab the _KeyPress and
   _KeyDown events and set them to zero. However, the best idea is to use
   the Windows API SendMessage function to tell the control to become read-
   only:

     'After making the following declarations...

     Global Const WM_USER = &H400
     Global Const EM_SETREADONLY = (WM_USER + 31)
     Declare Function SendMessage Lib "User" (ByVal hWnd As
     |Integer ByVal wMsg As Integer, ByVal wParam As
     |Integer, lParam As Any) As Long

     'Then Try:
     SendMessage(Text1.hWnd, EM_SETREADONLY, 1, 0)
     [Pete Jones (pjones@csi.compuserve.com)]

   This will still allow the user to copy *from* the text box. If you need
   to disable this (why?), steal the Ctrl-C in the _KeyPress event.

8. How can I create a VBX?

   VBXs (Visual Basic eXtensions) are practically always written is C
   (Borland C++, but mainly MS VC++). You should refer to the _Control
   Development Guide_ (in VB Professional Features Vol. I) and any relevant
   documentation for your compiler. Followup questions should normally be
   directed to comp.os.ms-windows.programmer.* or comp.lang.c*.

   There are some example VBX's with C code supplied with VB3 Pro. You'll
   find them under the directory [VB]\CDK.

9. How do you change the system menu (on the Control-Menu Box)?

   You can turn off the minimize and maximize menu options by changing
   properties, but what if you need to remove the "close" option?

     'Make the following declares.
     Declare Function GetSystemMenu Lib "User" (ByVal hWnd
     |As Integer, ByVal bRevert As Integer) As Integer
     Declare Function RemoveMenu Lib "User" (ByVal hMenu
     |As Integer, ByVal nPosition As Integer, ByVal wFlags As
     |Integer) As Integer
     Global Const MF_BYPOSITION=&H400

     'Use the following code to remove the "close" option.
     SystemMenu% = GetSystemMenu (hWnd, 0)
     Res% = RemoveMenu(SystemMenu%,6, MF_BYPOSITION)
     '(also remove the separator line)
     Res% = RemoveMenu(SystemMenu%,6, MF_BYPOSITION)

   Adding menu items to the control menu is more complicated, since you
   need to respond to the events triggered when the user selects the new
   options. The newest Message Blaster (msgblast.vbx, see details in
   beginning of FAQ about how to get files) contains example code.

10.How do I play MID, WAV or other multimedia files? [++]

   Use the MSMCI.VBX, provided with VB/Win Pro 3.0. You can also declare
   and call the MM-functions manually:

     Declare Function mciExecute Lib "MMSystem"
     |(ByVal FileName as String) As Integer

     Sub Form1_Click ()
         iResult = mciExecute("Play c:\windows\mkmyday.wav")
     End Sub

   Also:

   Playing a WAV file is covered in the VB Tips help file (there is a
   Windows call that is for this specificially; see below). The routine
   won't play MIDI files or other sound formats, however.

   Declare Function sndPlaySound Lib "MMSYSTEM.DLL"
    |(ByVal WavFile$, ByVal Flags%) As Integer
   Global Const SND_SYNC = &H0

   Global Const SND_ASYNC = &H1
   Global Const SND_NODEFAULT = &H2
   Global Const SND_LOOP = &H8
   Global Const SND_NOSTOP = &H10
   Global Const SND_USUAL = SND_ASYNC And SND_NODEFAULT
   [John McGuire (jmcguire@jax.jaxnet.com)]

11.How can I call a 'hidden' DOS program from VB?

   If you run a DOS program minimized using the SHELL command, it will
   never complete. This is because DOS tasks by default are NOT setup to
   run in the background. The easiest way to get around this is to make a
   PIF file for the program you need to run with the "Background" option
   checked. Then SHELL to the PIF file to run the DOS program and it will
   return control to your VB application when it terminates.

   Tip: If you edit or replace the _DEFAULT.PIF file in the Windows
   directory to allow execution in background, this will apply to all DOS
   boxes that is not run with it's own .pif!

12.How do I do drag & drop between applications?

   MSGBLAST.ZIP (the famous Message Blaster by Ed Staffin and Kyle Marsh)
   available on Cica and mirrors tell you *everything* you want to know
   about this and other advanced stuff. This is now (inexpensive)
   shareware, but the older freeware version is still supposed to be
   available. Get the file mentined above for more info.

   Short glossary for the confused ones  :-)
   Drag & Drop Client: the form you drop objects to/on
   Drag & Drop Server: the form you drag object(s) from

13.How do I use GetPrivateProfileString to read from INI files?

   There's a good example of accessing *.INI files in the Knowledge Base,
   but here's the basic idea:

     'You declare these API function as usual:
     Declare Function GetPrivateProfileString Lib "Kernel"
     |(ByVal lpApplicationName As String, ByVal lpKeyName
     |As Any, ByVal lpDefault As String, ByVal
     |lpReturnedString As String, ByVal nSize As Integer,
     |ByVal lpFileName As String) As Integer

     'Then in your code you do like below:
     strIniFile = "WIN.INI"
     strSection = "MyProgram"
     strKey = "Language"
     strDefault = "English"
     iLength = 70
     strReturn = String$(iLength, " ")  'Pad the string first!
     iResult = GetPrivateProfileString(strSection, strKey,
     |strDefault, strReturn, iLength, strIniFile)

   WARNING: Be aware that there was an ERROR in the Windows 3.1 API
   documentation that came with VB. Here's the scoop:

   Knowledge Base article Q110826 (DOCERR: GetPrivateProfileString
   Declaration Incorrect in API) corrects a documentation error for the
   GetPrivateProfileString function call as described in the Windows
   version 3.1 API Reference help file that shipped with Microsoft Visual
   Basic version 3.0 for Windows. The CORRECT declaration is as follows:

     Declare Function GetPrivateProfileString Lib "Kernel"
     |(ByVal lpApplicationName As String, ByVal lpKeyName
     |As Any, ByVal lpDefault As String, ByVal
     |lpReturnedString As String, ByVal nSize As Integer,
     |ByVal lpFileName As String) As Integer

   Note that the "ByVal" keyword was omitted from the second parameter in
   the online reference. This means that the function is passing the second
   parameter (lpKeyName) by reference. It needs to be passed by value.

   The most common problem that occurs when using the incorrect declaration
   is that when the function is called, it returns a copy of "lpdefault" in
   the "lpReturnedString" parameter instead of the actual value referenced
   by KeyName.

   OOPS: As P. Wierenga (pwiereng@sol.UVic.CA) told me, the same doc error
   applies to Writeblablabla:

   DOCERR: WriteProfileString Declaration Incorrect in API Article ID:
   Q115328

   The correct declaration is as follows:

     Declare Function WritePrivateProfileString Lib "Kernel"
                                      (ByVal lpApplicationName As String,
                                       ByVal lpKeyName As Any,
                                       ByVal lpString As Any,
                                       ByVal lplFileName As String) As Integer

   (all on one line of course!)


14.How do I implement Undo?

   For most controls, you will have to keep track of changes yourself.
   There's no magic involved, just some coding. However, if you use the
   standard Text box or Combo box, Windows provides a "free" undo function
   for you!

     'Do the following declares:
     Declare Function SendMessage Lib "User" (ByVal hWnd As
     |Integer, ByVal wMsg As Integer, ByVal wParam As
     |Integer, lParam As Any) As Long
     Global Const WM_USER = &h400
     Global Const EM_UNDO = WM_USER + 23

     'And in your Undo Sub do the following:
     UndoResult = SendMessage(myControl.hWnd, EM_UNDO, 0, 0)
     'UndoResult = -1 indicates an error.

15.How do I create a window with a small title bar as in a floating
   toolbar? [++]

   Download the MSGBLAST VBX from ftp.microsoft.com (filename msgblast.zip)
   or (better) from ftp.cica.indiana.edu or mirrors. The example files
   provide an example of a form with a small title. When you see it, you'll
   understand why I haven't include a full explanation here!

16.What is Pseudocode?

   VB/Win does not generate machine code like most compilers do. Instead it
   creates what is called pseudocode (a real misnomer, IMO). A good
   explanation is given below:

   A bit of history: the original P-code was an instruction set for a
   "virtual Pascal" machine. This came with a portable Pascal compiler
   written at ETH in Zuerich. The portable compiler produced instructions
   for this phony machine which had an instruction set ideally suited to
   the stack and heap management of Pascal.  To executed portable Pascal
   programs, you had two choices: either write an interpreter for P-code,
   or translate the small set of P-code instructions (there were about 80)
   into assembler; assemble it; and run it at native speed.  Thus "P-code"
   originally stood for "Portable" or "Pascal" code. The broader meaning,
   "pseudo-code" came later. P-code was widely popularized by the UCSD
   Pascal system, a small workstation that was implemented entirely in

   Pcode and interpreted. It was sold for some years, and one company even
   re-did the microcode for a PDP-11 microchip to interpret P-code. The
   original Borland Turbo Pascal had obvious similarities to the UCSD
   system although it was not interpreted. The dialect was virtually
   identical.  Today P-code is used extensively in Microsoft apps, for two
   reasons. First, it is much more compact than  native code; so the apps
   are smaller. Second, having an interpreter at the core of an app makes
   it much easier to customize and extend. That is why VB is becoming the
   heart of the MS major apps.  It is simply not true that P-code apps run
   much slower than native apps. The slowdown is determined by the
   granularity of the interpreted routines. If every little thing is an
   interpreted op, the slowdown might be as much as 3-to-1 for the 80x86
   architecture, or about 2-to-1 for the Motorola 68000 family (which is
   better suited to writing interpreters).  But in practice, modern P-code
   systems have large-scale instructions, each of which is executed by a
   big compiled subroutine. These subs run at native speed, so the overhead
   of the interpreter is occasional at worst.
   [Roger E. Ison (r_ison@csn.org)]

   It is also possible that since the code may not need recompilation to
   run on other platforms *if* the run-time interpreter is first ported, VB
   applications can become very portable. This depends on Microsoft's long-
   term plans.

   A note on the word "pseudocode": I wrote above that it is a misnomer,
   and I stand on that. Pseudocode is *really* the pascal-like (mostly)
   explanation of an algorithm that is intended for human readers, not
   computers. But since somehow the term pseudocode stuck to the psaudo-
   machine-code created by VB the word is used here.

17.Does VB support pointers to functions?

   No, it does not.
   [George Tatge (gat@csn.org)]

18.How do I program the Novell NetWare API from VB?

   Tom Tregilgas (Tom.Tregilgas@InfoB.unisg.ch) had a lot of information on
   this one. Normally I leave it to the other FAQ parts to list books &
   how-to-get-info's, but since this topic is very specific and more
   NetWare than VB I include all the stuff here for your convenience:

   If you are interested in seeing how Visual Basic can be used for
   NetWare programming, obtain the following files from your friendly
   neighboorhood Novell FTP Mirror site.

   Mirror sites are (according to ftp.novell.com):

         Novell Germany            ftp.novell.de
         Netherlands               ftp.rug.nl
         United Kingdom            ftp.salford.ac.uk
         Logan, Utah               netlab2.usu.edu
         New Zealand               tui.lincoln.ac.nz
         Tuscaloosa, Alabama       risc.ua.edu
         Ottowa, Ontario, CA       novell.nrc.ca
         Boston, Mass              bnug.proteon.com

   novlib\11\nivb.zip              Netware Interface for Visual Basic
   novlib\11\nwtest.zip            NetWare Test for Visual Basic

   There are also two Novell App Notes on the subject of using NetWare with
   Visual Basic (although this is _NOT_ supported by Novell...) which are:

   October 92      Interfacing Visual Basic for Windows and NetWare
   July 93         A NetWare Interface for Visual Basic

   The AppNotes can be obtained by contacting the Novell Research Order
   Desk, FAX: +1 303 294-0903, Voice 800 377-4136, +1 303 297-2725.
   Address as follows:


   Novell Research Order Desk
   1601 Park Avenue West
   Denver, CO 80216-5199

   AppNotes are $95/year ($135 outside US)

   Here are a few books which might help you out to figure the calls out:

   Windows Development on NetWare Systems, Lori Gauthier and Sue Whitehead
   (c) 1994, Windcrest, Blue Ridge Summit, PA 17294-0850 (McGraw-Hill)
   $34.95 Comes with disk This book also tells you how to "upgrade" to the
   currently supported SDK calls

   NetWare System Interface Technical Overview, Novell (c) 1990,1989
   (Addison-Wesley), $32.95 (describes Novell's C Network Compiler API's)

   Visual Basic Programmer's Guide to the Windows API, Daniel Appleman
   Ziff-Davis Press, 5903 Christie Ave, Emeryville, CA 94608, $34.95  Comes
   with disk

   It should be mentioned that the APIs included with the NIVB are _not_
   current, and for this purpose, you should get the Novell SDK kit. Also,
   Novell will not support NIVB, but you can sometimes get some helpfrom
   Compu$erve, or from others on the Infobahn <g>

   Good luck!

   p.s. It behooves you to become a member in the PDP (Professional
   Developer's Program) since you get the AppNotes (& Bullets!) for...free.

   p.p.s. Novell does NOT support the NIVB...

   p.p.p.s. Also, no docs come with it.  You'll probably need the Client C
   SDK kit to be able to really _use_ the code.

   p.p.p.p.s. To make things even better, the calls in NIVB are fairly old,
   and not of the Client C SDK kit variety.  However, there _are_ books
   which could help you out, e.g. "NetWare System Interface Technical
   Overview", by Novell. ISBN:0-201-57027-0, published by Addison-Wesley
   Publishing co, $32.95 US, $42.95 in Canada.

   Update:

   AppNotes are dead, however, Develper Notes live on.  There is one
   article about NetWare programming with Visual Basic here:

   July/Aug 94     NetWare Programming in Visual Basic:
                   Using Apiary's NetWare Client SDK for Visual Basic

19.Some Visual Basic 4 rumours

   First, we have no special information. This is just rumours, guessing,
   gossip! But since there are many questions about this on the newsgroup,
   *and* Microsoft gives these controlled leakages through their beta
   testers, we bring on some of it (Please, don't start discussing NDA's on
   this group again!):

   a. Two versions: 32-bit and 16-bit
      Like Visual C++ 1.5, VB 4 will come with compilers for the 16-bit API
      from Windows 3.1 as well as a real 32-bit compiler (or
      pseudocompiler) for Windows 4 (Chicago) bundled together.

   b. New features will probably be inherited from VBA

      1)   Line continuation character " _" (space+underscore)

      2)   WITH statement, known from Pascal, to save typing and make code
           cleaner. An example:


             With Form1
               With Text1
                 Bold = true
                 FontName = "New Times Roman"
               End With
             End With

      3)   FOR EACH .. NEXT statement allows you to make changes to a group
           of objects at once better than FOR..NEXT. Object groups are also
           something you may have to work closer with in VB4.

      4)   An OPTIONAL statement allows you to leave some Variant
           parameteres undefined when calling a user-defined sub or
           function. Also in VBA is an ARRAY function that returns an array
           form a list supplied as parametres, and a special optional
           ParamArray optional parameter of Variants.

      5)   Boolean data type. Integer does the job, but this type can
           preserve space if Microsoft codes it right.

      6)   Byte data type? No, VBA does not support this. We can dream,
           however.

   c. VBX is dead. Long live OCX!

      You may not feel for celebrating this either, but the 32 bit VB 4
      will not support the old 16-bit VBX'es. The 16-bit version of VB 4
      will support them for backwards compatibility, but be aware that OLE
      2 and OCX is the way of the future, at least if Microsoft gets it as
      they want.

20.How do you change the icon and otherwise manipulate the DOS box? [**]

   Enclosed is the results of my digging around to enable me to change the
   icon of a DOS box launched with the SHELL function. It illustrates most
   aspects of dealing with DOS boxes.

   Example of launching PIF file minimized and running it in the
   background (Needs Execute Background box checked in PIF file), and
   assigning the PIF file a new Icon rather than the default DOS Box Icon.

   (Note: it seems this method changes the icon of ALL the active DOS
   boxes)

   Code follows:
   x---------------------------------------------------------------------x
     Option Explicit

     Global Const SWP_NOSIZE = 1
     Global Const SWP_NOMOVE = 2
     Global Const SWP_NOACTIVATE = &H10
     Global Const SWP_SHOWWINDOW = &H40
     Global Const SWP_HIDEWINDOW = &H80
     Global Const SWP_FLAGS = SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE
     Global Const SWP_SHOW = SWP_SHOWWINDOW Or SWP_FLAGS
     Global Const SWP_HIDE = SWP_HIDEWINDOW Or SWP_FLAGS
     Global Const HWND_BOTTOM = 1
     Global Const GCW_HICON = (-14)
     Global Const GCW_HMODULE = (-16)

     Declare Function GetModuleUsage Lib "Kernel" (ByVal hWnd%) As Integer
     Declare Function ExtractIcon Lib "Shell" (ByVal hInst%,
     |ByVal lpExeName$, ByVal hIcon%) As Integer
     Declare Function DestroyIcon Lib "User" (ByVal hIcon%) As Integer
     Declare Function FindWindow Lib "User" (ByVal lpClassName As Any,
     |ByVal lpCaption As Any) as Integer

     Declare Function SetWindowPos Lib "User" (ByVal h%, ByVal hb%,
     |ByVal X%, ByVal y%, ByVal cx%, ByVal cy%, ByVal F%) as Integer
     Declare Function GetClassWord Lib "User" (ByVal hWnd%, ByVal nIndex%)
     |As Integer
     Declare Function SetClassWord Lib "User" (ByVal hWnd%, ByVal nIndex%,
     |ByVal wNewWord%) As Integer

     Sub LaunchPif(PifFile as String, IconName as String)
         Dim Res As Integer     'Return value from API call
         Dim MyInst As Integer  'Instance handle for this app
         Dim PifIcon As Integer 'Pif Icon Resource name
         Dim OldIcon as Integer 'Original Pif Icon resource (default = 0)
         Dim PifhWnd As Integer 'Dos Box Window handle
         'Launch PIF file
         PifInst = Shell(PifFile, 6)
         'Get Instance handle for main MDI Window (assumed to be frmMDI)
         MyInst = GetClassWord((frmMDI.hWnd), GCW_HMODULE)
         'Create new Icon resouce by loading Icon from disk file
         'Check Icon file exists
         If Dir$(IconName) <> "" Then
            'Make sure string is null terminated
            IconName = IconName & Chr$(0)
            'Create Icon resource in this window
            PifIcon = ExtractIcon(MyInst, IconName, 0)
         Else
            PifIcon = 0
         End If
         'Reset Default Icon on DOS Box to PifIcon
         'Check PIF file still running and Icon resource created
         If GetModuleUsage(PifInst) <> 0 and PifIcon > 0 Then
            'Get Pif Window handle
            PifhWnd = FindWindow(0&, "Window name in PIF file")
            'Set Icon handle to PifIcon resource
            OldIcon = SetClassWord(PifhWnd, GCW_HICON, PifIcon)
            'Hide and show window to get a redraw of the Icon
            Res = SetWindowPos(PifhWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_HIDE)
            Res = SetWindowPos(PifhWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_SHOW)
         End If

         'Wait for PIF file to complete
         Do While GetModuleUsage(PifInst) <> 0
            DoEvents
         Loop

         If PifIcon > 0 then
            'Reset Icon to original
            Res = SetClassWord(PifhWnd, GCW_HICON, OldIcon)
            'Tidy up by removing PIF Icon resource
            Res = DestroyIcon(PifIcon)
         Endif
     End Sub
   x---------------------------------------------------------------------x
   [Dr David Baird (BairdD@AgResearch.CRI.NZ)]

21.How do I make the mouse cursor invisible/visible? [**]

   Use the API call ShowCursor(False) or ShowCursor(True). Just be aware
   that the Windows cursor is a shared object, so if your process hides it
   then it must also redisplay it as well. Also the function is not truly
   "True" or "False" in nature - it is LIFO, so that if your process has
   for some reason set it "False" multiple times then you must set it
   "True" the same number of times in order to re-display the cursor. Hard
   to explain but play with it - you'll see what I mean...
   [Galen Raben (galenr@hpgrla.gr.hp.com)]

22.How do I create controls dynamically (at run-time)? [**]

   Search of VBKB_FT on "control* near array*" finds a number of articles,
   including Article ID: Q79029 "Creating Nested Control Arrays in Visual

   Basic" This is THE article to read to understand control arrays (plus a
   number of other neat concepts). In particular, look at the procedure
   "loadall_click".

   The key is that you need to create the first instance of your_control
   (ie. your_control(0)) at design time.
   [Ayn Shipley (ashipley@hookup.net)]

23.How do I set the Windows wallpaper at runtime? [**]

   I'm surprised this isn't in the FAQ yet. [ED: now it is!} You need the
   SystemParametersInfo API function and the SPI_SETDESKWALLPAPER constant.

   For this you will need the following constants and function
   declaration...

     Const SPI_SETDESKWALLPAPER = 20
     Const SPIF_SENDWININICHANGE = &H2
     Const SPIF_UPDATEINIFILE = &H1
     Declare Function SystemParametersInfo Lib "User" (ByVal uAction As
      |Integer, ByVal uParam As Integer, lpvParam As Any, ByVal fuWinIni As
      |Integer) As Integer

     'You then call the function as follows...

     Result% = SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ByVal BMPFile$,
      |SPIFlags%)

     '... where SPIFlags% is 0 if the change is not to be made permanent, or
     '(SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE) if it is to be carried across
     'into future Windows sessions.

   NOTE: Please be certain to include the ByVal keyword before the bitmap
   filename, as this argument is declared as Any, NOT as ByVal String.
   [Luke Webber(webber@werple.apana.org.au)]


E. CALLING THE WINDOWS API AND DLLs IN GENERAL


1. What is the Windows API?

   The Windows API (Application Program Interface) is a collection of
   Dynamic-Link Libraries (DLLs) that do most of the common things in
   Windows. Calls to the Windows API gives you access to routines that do
   things like drawing menu bars, manipulating bitmaps, playing sound
   files, and pretty much every other function of Windows.

2. How do I call a DLL?

   Basically, you declare a DLL procedure which you can call in your VB
   program which in turn passes data to and/or retrieves data from the DLL.
   You should read the section of the VB manual that talks about calling
   DLLs ("Chapter 24  Calling Procedures in DLLs" in the VB 3.0
   Programmer's Guide). This chapter covers the basics of using the Windows
   API DLLs and calling DLLs in general. Beyond that you may want to find a
   good book on this subject since it is too large to cover here (see the
   Book Listing in the Appendix of the General FAQ - Part 1). Don't be too
   intimidated!  Using DLLs (especially many of the Windows API functions)
   is quite easy, once you learn how to call them. In fact, many of the
   newer DLLs include VB-compatible modules!

3. What about DLL calls that require callbacks?

   VB does not support callbacks, but various extensions can help.

   Dan Appleman's "Visual Basic Programmer's Guide to the Windows API"
   comes with a floppy disk which code samples and tools. It also includes
   a VBX which supports the callbacks which many API calls require. Dan is

   also founder and president of Desaware which sells more extensive tools,
   including SpyWorks, for VB developers.
   [Walter Hill (whill@netcom.com)]

4. Tips for calling DLLs (such as the Windows API)

   a. Using the BYVAL keyword is critical. Using it when you're supposed to
      call by reference and (more common) not using it when you are to give
      a value to the external function are the single most common mistakes.
      Wrong calling convention can often result in a General Protection
      Fault (GPF) or, even worse, corruption of another applications' data.

   b. Check return and parameter types. For return types, a C function
      declared as "void" means you use a Sub not a Function.

   c. Initialize strings by padding it to the necessary length! If you pass
      a string that is too short to the API it will happily write past the
      end of the string and possibly corrupt data.

   d. Use Option Explicit. A typing error that results in a bug in the VB
      source will occasionally cause a GPF when you call external code.

   e. It's a jungle out there! Check parameter values as there is no type
      checking outside VB. If you make a mistake, you'll often get a GPF.

   f. Save before you run! You may even need to restart Windows after a
      GPF, since DLL's often aren't unloaded properly. As a second option
      you can check out WPS (Windows Process Status) which is distributed
      with VB/Pro and placed in the CDK directory. This utility allows you
      to kick out any module (EXE, DLL) from memory (shooting yourself in
      the foot if you want to. WPS is a nice way to find out what DLLs are
      actually used, but save your work first!).


F. VISUAL BASIC AND DATABASES


1. Why can't I use an index with my VB accessed database? [++]

   There is a mistake in the docs which says you can set the active index
   for a recordset. You can't. The data control uses the primary key for
   tables and physical order (I think) for dynasets.
   [Nic Gibson (nic@skin.demon.co.uk)]

   NOTE: You can of course set the indexes yourself using code in VB/Pro
   (Table objects), but Data Control's can't. Sorry for the problems this
   possible misunderstanding caused!

   Thanks to John McGuire (jmcguire@jax.jaxnet.com) for clarifying this.


2. "Can't find installable ISAM" or Why does my compiled VB database app
   generate an error when it ran just fine in the design environment? [++]

   You can thank Microsoft for documenting this topic so poorly. When you
   compile your VB database application, you must also have an INI file for
   it which provides the correct pointers to the appropriate database
   drivers. Therefore, if your application is named "INVOICE.EXE", you will
   need to have a properly configured "INVOICE.INI" file in your Windows
   directory. The file, EXTERNAL.TXT, that came with VB should explain all
   about it.

3. Is the Access Engine and Visual Basic Pro good enough for database work? [++]

   That, of course, depends. Generally the answer is "yes", but you may
   need some third-party add-on products.

   These are the major weaknesses of VBPro's database functions:

   a. Limited data controls: No add, delete or search button; no bound list
      box or masked edit control and - the worst - no bound grid!

   b. No run-time query builder ("how good is your user in SQL?") or report
      builder.

   c. No direct advanced control of the Access 1.1 (or 2) Database Engine
      (ie. security, optimization, etc).

   d. SQL us SLOW. Handcoding is much faster (but harder to code)

   The good news is that lots of companies are willing to sell you products
   which address one or more of the above weaknesses.

   Also, if you build a database application with advanced database
   relations, it can be a good idea to build the database itself with
   Access and the front-end with VB.

4. How do you avoid the "Invalid use of null" error when reading null
   values from a database?

   If you try to retrieve a null value (empty field) from a database, you
   will get the error: "Invalid use of Null". Here is one way to get around
   this problem:

   I've worked around this problem with the following code:

     TextBox.Text = MyTest.Fields("TestFld") & ""

   This code converts the Null-Value into an empty string.
   [Ralf Metzing (rmm@dragon.stgt.sub.org)]

5. What is "NULL"?

   Contrary to popular belief, Null is not nothing. It's even less than
   nothing.   8^)

   The VB documentation describes all the horrors of misunderstanding the
   infamous NULL. Since people don't read the documentation, we feel like
   informing that

     If ThisVarIsNull = NULL then DoSomething

   will *always* fail, and the DoSomething can't possibly be executed. You
   *must* use IsNull(ThisVarIsNull) which will return True if the var is
   Null (phew!).

   If you want to find out why someone came to think of this strange value,
   read some relational database theory.

6. How can I access a record by record number? [++]

   Use a counter or index field - or even better, a Bookmark property - for
   this.

   It is *impossible* to ask a relational database system to give you ie.
   "field number 3 in record number 10" since by definition a relational
   database does not have row or column numbers. Databases allowing direct
   access like that is not even remotely relational.

   Access (and therefore, VB) is about as close to a real relational
   database system as you can get.

7. How about Access 2.0 compatibility? [++]

   You need the compatibility layer availability. The file COMLYR.EXE is in
   the MSBASIC library on Compuserve. This file provides all the items
   necessary for compatibility between VB 3.0 and Access 2.0.
   [Fred Griffin (72321.3230@compuserve.com)]


   The file COMLYR.EXE can be downloaded from ftp.microsoft.com. It is
   located in the directory /softlib/mslfiles. (NOTE: A "DIR" in this
   directory is rarely a wise course of action. There is an enormous amount
   of files im /mslfiles.)

8. Tips for VB database programming: [++]


   a. Use Access and QBE. Once it's "working" (even if the parameters are
      hardcoded), then open up View.SQL and copy the stuff from the SQL
      window into your VB code. If you need to insert VB variables, try
      testing this under Access by using parameters instead. They're then
      nice & easy to spot when it comes to converting into VB - I always
      call my parameters "PR_xxxx", so I can just search my VB code for
      this to find any instances that I've missed.

   b. It never works first time. So put an error handler into your VB code
      that copies the contents of SQLStr onto the clipboard, should the
      query fail. Now it's quick & easy to switch back to Access, find a
      scratch query and paste the erroneous SQL into that. It's *much*
      easier to debug a SQL query in Access, after the variables have been
      merged in, than it is to do it blind from VB.

   c. Use carriage returns to break up your SQL. One before each reserved
      word is sensible. They're not significant in SQL. I assume you're not
      stupid enough to put them in the middle of field names -
      unfortunately Debug.Print is!

   d. When merging in the contents of a variable (building a SQL query in a
      VB string), it should *always* be surrounded by an ampersand and 3
      double quotes, or an ampersand and 2 mixed quotes, depending on your
      local conventions:

        SQLStr = SQLStr & "WHERE Username <= """ & Username$ """ "

        or

        SQLStr = SQLStr & "WHERE Username <= '" & Username$ "' "

   e. If you're using dates, then it will *always* be one quote, a hash and
      an ampersand:

        SQLStr = SQLStr & "WHERE Start_Date <= #" &
        |Format$(CutOffDate,"Long Date") & "# "

   f. Another tip with dates is to format them with the long date format,
      not the short date. This is then safe against the transatlantic
      reversal of month & day position.

   g. If you're merging in a field/table name, enclose it in square
      brackets. That way the SQL will still be valid if the variable
      contains spaces:

        SQLStr = "SELECT * FROM [" & TableName$ "] ;"

      When building SQL strings in VB, then you'll often do this on several
      lines, concatenating SQLStr with the new string. If you leave a space
      at the end of every string, then you can guarantee you won't have
      problems with the text from successive lines running into each other.

   h. If you're using Access 1, you'll keep running into the 1024 character
      limit on the length of a SQL string. Keep the table & field names
      short, especially if many JOINs are concerned. Using underscores in
      names is shorter than spaces, as you don't need the extra 2
      characters for the square brackets around them. If your SQL is
      slightly too long, then you'll probably see a "Missing semicolon"
      error, even though the semicolon is obviously there (To you,
      anyway!).

   i. Making a QueryDef is a complicated process that is often slower than
      executing the query ! Don't mess with the .SQL property, as that is
      equally slow (Access needs to do a lot of work to turn SQL into its
      internal query format). Two ways around this: Use ready-built
      queries, written with Access. If you need to merge in values from

      variables, then use a query with parameters. Setting parameter values
      is quick to execute.

   j. If you really need to build SQL on the fly -- you need to build an ad
      hoc query, or to supply table or field names (which can't be done
      with query parameters), then try using:

        database.Execute SQLStr

      As this doesn't build a QueryDef, then it's quick.
      [Tips a to j by Andy Dingley(dingbat@codesmth.demon.co.uk)]

   k. Make sure all Tables, Dynasets, Snapshots, Databases, and other data
      access objects are properly closed before ending the program. As near
      as I can tell, the pointers to these objects are not destroyed if
      your VB program doesn't Close them (including when a program
      crashes). A Microsoft guy did say he can't find anything that
      confirms that they close, but (of course) he wouldn't say for certain
      that they aren't closed. Based on resources after serious crashes
      (that I couldn't walk the program out of by hand), I don't think
      they're automatically closed.
      [John McGuire (jmcguire@jax.jaxnet.com)]

9. How come I get a "No Current Record" error when I use a a Data Control
   on an empty table?

   Well, this is a "feature" courtesy of Microsoft.  KB article Q106494
   explains this in detail.  Basically, the workaround is to add an empty
   record to the table before the user can do anything (or before you try
   to do any Moves on the Table).
   [George Tatge (gat@csn.org)]

10.How can I speed up my VB database application? [++]

   KB article Q109830 gives some hints.  Things you should do include:

   - Use Snapshots when possible.
   - Use transactions whenever possible.
   - Use Dynasets when possible.
   - Use SQL action queries when possible.
   [George Tatge (gat@csn.org)]

   Major Weakness: SQL is SLOW! A hand-coded search (with indices) is MUCH
   faster than an equivalent SQL call, especially with complex search
   criteria. For example:

     SELECT * FROM Table WHERE SSN = '555-33-1234' AND Posted #01-31-95#

   is a lot slower than:

     Table.Index = "SSN"
     Table.Seek "=", "555-33-1234"
     If Not Table.NoMatch Then
       While Not Table.EOF
         If Table("SSN") "555-33-1234" Then
           Table.MoveLast  'Forces an EOF
         ElseIf Table("Posted") #01-31-95# Then
           'Do something
         End If
         Table.MoveNext
       Wend
     End If

   Granted, it is a LOT more code, but I ran a VERY similar query that took
   THIRTY HOURS! The equivalent hand-written code took ELEVEN MINUTES!
   That's 163 times faster! I think basically SQL isn't very good at
   figuring out which indexes to use (I also think I've read something to
   the effect that the newer version, 2.0 or 2.5, IS better at this).
   [John McGuire (jmcguire@jax.jaxnet.com)]

11.How do I get a bitmap picture in a field in an Access database?

   See p.466 of the Visual Basic (3.0) Programmer's Guide. It contains a
   section called "Using Bound Picture Box and Image Controls". Basically
   you have to bind the VB PictureBox to a field in the Access DB, set the
   .Picture property in the PictureBox, and then move to the next record or
   something. VB will then store your picture in Access in a form in which
   it can be retrieved by VB in the future.

   If you store the pictures in Access directly (using Access), VB won't be
   able to read them (using VB 3.0 and Access 1.1).

   You can also store the picture's filename as a text field in the
   database and use LoadPicture() to load that file into the VB PictureBox.
   [Tim Shea (shea@marcam.com)]

12.What is "Reserved Error -1209"?

   You will get a Reserved Error [-1209] ("There is no message for this
   error") when your database is corrupted. Try opening the database using
   MS Access; if it's corrupted you should get the option to repair it.
   [Joe Abley (joe_abley@originuk.demon.co.uk)]

   You should also compact it, after repair. I recommend you add the
   following to your File menu on your main form:

     Case ...

       RepairDatabase Curentdatabasename

     Case ....

       On Error resume next
       Kill "temp.MDB"
       Name  curentdatabasename as "temp.mdb"
       on error goto errcompact
       compactdatabase "temp.mdb", Currentdatabasename
       kill "temp.mbd"
       exit sub

     errcompact:
       msgbox "compaction failed"
       name "temp.mdb" as Currentdatabasename

     Case ...

   [Ayn Shipley (ashipley@hookup.net) , Kym Wilson]

13."Cannot perform operation. illegal.." with Paradox 3.5 table(s)

   Your Paradox table must have a primary key, or it will be read-only no
   matter what you set its properties to.
   [Ayn Shipley (ashipley@hookup.net)]

14.I'm getting error message "Reserved Error [-nnnn] ("There is no message
   for this error")" from Jet Engine 2.0. Huh? [**]

   See the Knowledge Base article Q117900 "Reserved Error Numbers Returned
   by the Jet 2.0 Engine" for a complete list of the new error messages.

   Extract:
   "Jet_Error/Message_String
      -1010 Invalid database ID.
      -1016 Can't have more than 10 fields in an index.
      -1029 Database engine hasn't been initialized.
      -1030 Database engine has already been initialized.
      -1034 Query support unavailable."
   [Ayn Shipley (ashipley@hookup.net)]

15.Why do I get "object not an array" when I try reference the fields of a
   global object variable which I have set to a table? [**]

   VB has a parser bug which makes it difficult to use database objects
   declared in a module from within a form.

   WORKAROUND: Just perform some _method_ on the table object somewhere
   _before_ you try to reference fields. Say in a form-based subroutine
   AAAA_IllBeFirst you have a Tbl.MoveFirst, which is never even executed.
   Then VB suddenly realises what the object is and all is forgiven.

   Credit to Luke Webber and "Joe Foster of Borg".
   [Ayn Shipley (ashipley@hookup.net)]


G. DISTRIBUTING VISUAL BASIC APPLICATIONS


1. What are some tips for using Setup Wizard?

   There were loads of bugs in the setup utilities supplied with VB3. Be
   sure to get the newest version of SETUPKIT (usually called SETUPK.EXE or
   -.ZIP). It is available from the sources listed in the beginning of this
   document, and in the General FAQ.

   Alternatively, if you have the older versions, you may have to manually
   remove the line referring to OLE2UI.DLL in the file SETUPWIZ.INI. See
   later in this document for dates of newest files on ftp.microsoft.com.

   Follow the instructions in SETUPK.TXT exactly. The files actually belong
   in two separate directories. Not placing them correctly can create
   strange and unusual side effects -- none of them good(!)

   Set all involved EXE, DLL and VBX files to Read-Only so that the setup
   program doesn't modify them.
   [Charles F. Mulks (21667cfm@msu.edu)]

   A *very* good tip. Actually, make all executables on your system read-
   only. If not, you can get a sharing violation if you try to run the same
   DOS executable twice at the same time.

   Also, the source code for a SETUP program is *included* with VB3 Pro. It
   is quite trivial to tailor it to your specific needs.

   The question remains: Is SetupWiz good? No! Good enough? Perhaps.

2. Are there restrictions on what I can distribute with my VB program?

   The documentation tells what parts of the Visual Basic kit you can
   freely distribute: the VBX files, some DLL's and what the SetupKit
   includes on your distribution diskettes. Reading software license
   agreements may be more boring than asking the newsgroup, but is
   nevertheless a good idea. 8^)

   There have been some rumours on the newsgroup that you can't
   redistribute programs written with VB freely. This is nonsense. All
   applications created with VB can be redistributed freely without
   royalties (as long as you don't distribute proprietary external files).

   The rumours probably originated when Microsoft announced that they will
   not sell kits allowing third-party software to include the Visual Basic
   for Applications (VBA) system.

3. What alternatives to setup wizard do I have?

   Perhaps the best one is to simply modify the setup app which is supplied
   with VB.  Look in your VB directory for the setupkit\ setup1 directory.
   There you will find everything you need to do a complete setup program.
   This sample setup is coded to install a few sample app files and create

   a program group.  You can comment out those lines and change to your
   files and program mgr. group.  There are also a few global variables you
   will want to change.  All of this is contained in the comments in the
   code.

   Using this, and the distribution information in the manual telling you
   about which files to distribute with your app will make things much
   easier than using the setup wizard (IMNSHO).

   There are also several third party setup products available.
   [George Tatge (gat@csn.org)]

4. Do I need to worry about users who have Progman replacements such as
   Norton Desktop and PC Tools?

   Earlier versions of those products and some others do not respond
   properly to the DLL commands to create groups and items.  More recent
   versions do.  All you can do in this case is to include some information
   in your readme.txt file that instructs users of those products to shut
   them down and start up program manager before installing.
   [George Tatge (gat@csn.org)]

5. Can I distribute my app without vbrunXXX.dll?

   If you are sure that your users have it or can get it, you can easily
   distribute your app without vbrunXXX.dll.  Simply remove the file from
   your distribution disk or zip file and and ALSO remove it from the
   setup.lst file.
   [George Tatge (gat@csn.org)]

6. Why won't my setup program install commdlg.dll et. al.?

   There are a couple of DLLs that are almost always in use by windows.
   Commdlg.dll is the most common example.  When faced with this problem,
   there is no easy way out.  The full explanation is several pages long
   and beyond the scope of this FAQ.  The general idea is as follows:

   Your setup program will need to create a .BAT file to expand and then
   copy these files.  Then, it will need to shutdown Windows  (see
   ExitWindowsExec API call) and run the .BAT file.  Then it will need to
   restart windows and continue your setup program.  Your setup program
   should delete the temporary .BAT file that is no longer needed.
   [George Tatge (gat@csn.org)]

7. Where do I install VBXs and DLLs?

   PLEASE- this is one place where everybody's life is much easier if you
   will follow Microsoft's recommendations.  All PUBLIC VBXs and DLLs
   should be installed in the windows/system directory!  A "PUBLIC" DLL or
   VBX is any which can be purchased on the open market.  In other words,
   if another VB programmer might possibly use the same VBX or DLL, install
   it in the system directory.

   If you have written private VBXs or DLLs that will never be used by any
   program but yours, you can install them in the same directory where you
   install your application files.

   There are lots of good reasons for doing this, but it makes a short
   novel to rehearse them all.
   [George Tatge (gat@csn.org)]


H. MISCELLANEOUS TIPS AND INFORMATION


1. Multiple identifiers after the DIM statement can be confusing

   Some programmers with background from Pascal can try the following

     Dim iA, iB, iC as Integer

   and think that all these 3 variables end up as Integer. In fact, the
   first two end up as default data type, normally Variant.

   Instead you should do

     Dim iA as Integer
     Dim iB as Integer
     Dim iC as Integer

   which takes up more space, but gives you room to comment your variables
   (hint, hint); *or*

     Dim iA%, iB%, iC%

   which does the whole job.

2. "Clean up" your project before final EXE compilation.

   When you are ready to compile your VB project into your 'finished' EXE,
   be sure to save the project files, exit VB, restart Windows, run VB,
   load your project and go straight to compiling. Otherwise, your EXE may
   be larger in file size than necessary due to 'garbage' getting included
   in the EXE. For some reason, VB does not fully clean up all of the
   previously used variables or objects that you may have been playing with
   while developing your program so these get included in your EXE even
   though they aren't used. Other VB users have even advocated saving all
   the project files as ASCII, then loading the ASCII files before
   compiling to further "clean up" the resulting EXE file.

3. Multiple END statements can be dangerous; or, The program that refused
   to terminate.

   Suggestion: put the END statement used to exit your program *only* in
   the Form_Unload event of the main form. Whenever you want to end the
   program, just tell the main form to unload.

   Some have reported that after their program have (supposedly)
   terminated, it still appears in the task list. This can happen if you
   only hide secondary forms and forget to unload them when you end/unload
   the main form.

   Also note that the Stop-button on the button-bar of the integrated
   development environment doesn't really unload anything. It *nukes* the
   program, which generally is a good idea since it could be a bug in it
   that caused it to be stuck in an eternal loop or something.

4. What are the latest versions of the various files used by VB?


   Date       File to download  Updates files    Description

   3/7/94     BTR110.EXE        BTRV110.DLL      Btrieve IISAM Driver

   3/7/94     DATAINDX.EXE      DATAINDX.DOC     "Data Access Guide"
                                                 Index

   3/7/94     GENERIC.EXE       \VB\CDK\GENERIC  Sample custom control
                                                 source

   3/7/94     VBGRID.EXE        GRID.VBX         Grid control

   3/7/94     VBHC505.EXE       HC.EXE, HCP.EXE  WinHelp compiler

   3/7/94     MSAJT.EXE         MSAJT110.DLL     Access Database Engine

   3/8/94     MSCOMM.EXE        MSCOMM.VBX       Serial


                                                 Communications\control

   3/7/94     ORA110.EXE        ORACLE.TXT       Updated ORACLE.TXT file

   6/27/94    SETUPK.EXE        SETUP.EXE        Setup Toolkit

   3/7/94     VBRUN300.EXE      VBRUN300.DLL     Visual Basic Runtime
                                                 Library

   3/7/94     XBS110.EXE        XBS110.DLL       XBase IISAM Driver


   There is an article in the Microsoft Knowledge Base that points to each
   of these files and provides more detailed information about the update.
   To find these articles, query the Microsoft Knowledge Base using the
   file name and the word "update3.00".

   Note the NEW SETUPKIT update!
   [Thanks to Marks Harrop <harrop@werple.apana.org.au>]

   Please inform the FAQ maintainer about newer versions.


I. VISUAL BASIC FOR APPLICATIONS (VBA)

1. Any tips for VB/Win 3 programmers moving to VBA?

   You are in for some surprises. VBA is more unlike VB 3 than most people
   thought. Especially the development environment is very different, and
   the language puts more emphasis on objects. The latter is a trend you
   can get used to for VB also.

   For Excel 5 VBA, be aware that the environment is based on the
   "workbook" idea Microsoft stole from Borland. Your controls will be
   placed in one sheet, and the code will be in another. Doubleclicking on
   the control to open the code window doesn't help. You have to use the
   "Tools|Assign Macro" menu option.

   Also, be aware that the list of events is nowhere close to what VB3
   supports! No GotFocus, no MouseMove, no nothing. You'll be very confused
   if you try to look for "events" in the VBA docs!

2. Does VBA support VBXs?

   No. If Microsoft have its way, VBX is a dead end. There will never be
   32-bit VBXs, but OCXs using OLE 2. VBA is more a subset of VB 4 than VB
   3, but it does not fully support OCX yet. It will, though.

3. How do I access properties on my dialog boxes in VBA?

   As noted above, VBA is a culture chock to VB programmers. If you create
   a textbox in VBA, call it txName and try to

     cMyVar=txName.Text

   the impolite interpreter will give you a "variable not defined" error.

   The magic is objects. You have to

     Dim txName as Object
     Set txName = DialogSheets("NameDialog".EditBoxes("txName"))

   And then you can access your properties like you used to in good ol' VB
   3. (Anyone volunteer to beat senseless the guy who thought out this?)

4. How do I use database routines from Excel VBA?

   The documentation is somewhere between sparse and inexistant on this
   topic. Any info on VBA and SQL would be much appreciated.

   Here Microsoft breaks the tradition and you *can't* use database
   objects, at least not the way you do in VB. Also, forget dynasets.

   I know nothing about databases in VBA. I just bring on the following
   tips from various magazines:

   Both SQLOpen and QueryGetData require a 'connection string'. That's
   about what the doc's say about the parameter. What is it? The doc is
   also tragically void of useful examples. Someone dug up the following
   example:

     "DSN=My data file;DBQ=c:\access\data.mdb;FIL=RedISAM;"

   which is about as understandable as it looks. If you use an empty
   string, you get a dialog which also can give you the string into a
   spreadsheet cell.

   Also, search for SQLREQUEST in the *main* help file for Excel 5 (not the
   VBA help!) for these examples of connection_string's:

   dBASE             DSN=NWind;PWD=test
   SQL Server        DSN=MyServer;UID=dbayer;PWE=123;Database=Pubs
   ORACLE            DNS=My Oracle Data Source;DBQ=MYSER VER;
                     |UID=JohnS;PWD=Sesame

   There's a KnowledgeBase on Excel 5 on ftp.microsoft.com. Last time I
   looked, it was void of database stuff. Still, it may be a good idea to
   download it as the situation may have changed now.


   *** END OF VB/WIN FAQ DOCUMENT ***


-- 
Kris Nosack      knosack@park.uvsc.edu

>>>--->  Be strange, but not a stranger!  <---<<<

