
They released us tech beta testers from NDA yesterday, so i
thought i'd post 50 reasons to upgrade. I can't answer questions
because i am currently overloaded with mail about VB4 from
other places i have sent this. Sorry, but that's the way it
has to be.
--Dan
Former Member of the Knights who say NDA!

Here's a grasscatcher list of 50 cool reasons to upgrade
to VB4. This list came about quite a while ago during beta
testing. As a result, it's not totally up to date and
probably missing a few new cool reasons.

It was put together by someone else, not me. I don't think
he'd mind my sharing it now that we've been ungagged, but I
won't attach his name to it since he's not available to ask
at the moment. If he  wants credit later, we'll give him
the credit due.

Enjoy!



1)  Ever try to pass data between forms in VB3?  Almost
impossible unless you use hidden textboxes, labels, etc, or
if you use static swapping functions like I did.  Or, I
guess, you could use global variables but we know that this
isnt the best thing under 16 bit <g>. This was a huge
limitation for applications I wrote and I had to come up
with some pretty interesting solutions.  Well, in VB4, I
can now declare a public proc in my form and pass
parameters to the form.  I can now go and rip out a ton of
code from my VB3 apps.

2)  Class modules, Class modules, Class modules!!!  I love
being able to encapsulate functionality into a class, call
its methods, set the properties, and everything else I can
do with a class.

3)  Add-Ins:  If I was inclined, I could write
applications which help programmers write applications.

4)  Class Modules ->  Now I can make linked lists... cool.

5)  The data bound grid!!!

6)  All 3D!!!  The biggest resource problem I ran into
was having to either drop a text box into a 3D panel, or
include additional custom controls, all of which ate
resources.

7)  Picture.PaintPicture!  Ever try to BitBlit and not
have a great time at it?  Check out the PaintPicture method
of Pictures, Forms, and the Printer object.

8)  New bound controls.  OLE bound control, dblist,
dbcombo, I can now bind across forms and share recordsets
across data controls on different forms.

9)  Menu Negotiation with OLE.  The ability to put a Word
document, Excel spreadsheet or any OLE server that supports
in place activiation and have my menus all negotiate, not
to mention dockable toolbars.

10)  Custom Properties:  I can now add custom properties
to my data access objects.  Also, I can retrieve some
special properties of Access MDBs such as the description
field.

11)  Control Locking.  Probably one of the most used
features of VB Assist is now in VB.

12)  Printer Object, Font Object, Error Object:  All of
these objects have been substantially enhanedd.  I can now
return all of my ODBC error messages in the Error
collection.

13)  New Common Dialog methods make using the
CommondDialog much easier.

14)  Invisible MDI Children - one of the most common calls
to PSS was for the ability to hide MDI children forms.

15)  Using Typelibs - I think its really cool to be able
to just add a typelib and instantly have access to the
methods and properties of an object, including constants.
You don't carry any extra baggage in your EXE - you only
compile in what you use.

16)  32bits - speaks for itself.

17)  Resources - I can now include resource files into my
project.

18)  File Versioning - again, speaks for itself.

19)  API Text Viewer:  When its bug free it will be a huge
asset with all of the Win32 apis now available.

20)  Conditional Compilation - did you know you can even
conditionally compile your function/procedure definitions
and cross the end of an End Sub or Function?

21)  Improved (yes Faster) Data Access Model - there are a
bunch of new properties and methods here to explore.

22)  Data Bound OLE Control - now you can view that OLE
Object in your Access database.

23)  Collection Object - create your own collections!

24)  Boolean Data Type - whats the value of True again?
-1, 1,...?  Oh, its True <g>.

25)  Right Mouse Support - once you start using it, you
never go back!

26)  True NULL string pointers.  If you declare a string
and never initialize it you get a true null pointer.

27)  The line continuation character... Last Position
jumping... Shift F2 on API functions brings you to the
Declare...

28) Named Parameters - you can now pass params to many
objects/methods and even your own functions/subs as named
parameters meaning you can pass
in any order as long as you qualify the parameter.

29) Optional Parameters - ever have a "do all"
procedure/function that you have a bunch of params into but
sometimes you just pass defaults, etc?  Well, you can now
create parameters which are Optional.  If you
don't pass it, you can use the IsMissing function.  Very
cool.

30) Parameter Arrays - heres the online help:

"ParamArray     Used only as the last argument in arglist
to indicate that the final argument is an Optional array of
Variant elements. The ParamArray keyword allows you to
provide an arbitrary number of arguments.  It may not be
used with ByVal, ByRef, or Optional."

31) Variant Arrays - yes, variants can store arrays.  You
can put an array into a variant and pass it around
objects/servers/etc.  I think Val W. is a big fan of these?

32) Data control Recordsets - you can now set the
recordset of a data control to an existing recordset that
you created using the OpenRecordset.

33) Data control does parameter queries now...

34) MDIForm now has a picture property.  You can also set
the backcolor of the MDIForm.

35) In place editing of properties - have you gone back to
VB3 and found that the editing of the properties in the
property sheet is pretty cool. Did you know you can stil
double cick on the left side of the sheet to cycle?  You
can also triple click!

36) Custom Mouse Pointers!!  No more messing with the APIs
or having additional controls.

37) Since the Data Control has an Align property (did you
know that??) you can place it directly on an MDI Form...
kind of cool.

38) Predefined constants - no more Constant.BAS to lug
around, and you only build what you use into the EXE.

39) Picture *Object* - not the Picture control, check it
out. Font object too.

40) The MsgBox function now supports a HelpContextID so
that your user can press F1 while a MsgBox is up.

41) Data Access: New collections/properties to
investigate: Container, Document, Relation,
SelBookmarks(DBGrid), Users, Groups.  Check em out.

42) IIF is no longer in MSAFINX.DLL <g>.

43) You can now set the index of a data control as long as
the Recordset is built off of a table.

44) AbsolutePosition/PercentPosition - new Data Access
properties.  They give you an indication of where you are
in a recordset.  Nice for displaying status.

45) ODBC fanatics:  FillCache, CacheStart, CacheSize

46) Ever notice that when in the Object Browser you click
on a property or method you get help? Well, you can do this
for your OLE Server as well by click on the Object Browser
with the class open and clicking on Options...

47) For...Each and With:  Speeds up OLE access by removing
levels of indirection.

48) User Defined Types:  Ever have a result set from a
database where for each record there could be multiple
entries of something?  Well, you can now have dynamic
arrays of strings in UDTs.

49) BOFAction, EOFAction of the Data Control...now you
don't get errors when scrolling in the Data Control.

50) Control.Container.  You can now do the equivalent of a
SetParent by setting the Container property of a control.
For example, draw a frame on a form, then draw a command
button.  Make sure you don't put the command button in the
frame - put it on the form.

Add this code to the Click event of the command button:

Private Sub Command1_Click()

   Set Command1.Container = Frame1
   Command1.Left = 0
   Command1.Top = 0

End Sub




