Microsoft Knowledge Base on Compuserve 9/18/91

"Visual Basic" anywhere in document

Part 1 thru June 25, 1991

 

Title: How to Create a System-Modal Program/Window in Visual Basic

Document Number: Q72674 Publ Date: 6-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

From a Visual Basic program, you can disable the ability to switch to

other Windows programs by calling the Windows 3.0 API function

SetSysModalWindow.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

Microsoft Windows is designed so that the user can switch between

applications without terminating one program to run another program.

There may be times when the program needs to take control of the

entire environment and run from only one window, restricting the user

from switching to any other application. An example of this is a

simple security system; or a time-critical application that may need

to go uninterrupted for long periods of time.

Passing the handle to the window through the argument of

SetSysModalWindow will limit the user to that particular window. This

will not allow the user to move to any other applications with the

mouse or use ALT+ESC or CTRL+ESC to bring up the Task Manager. You

could even remove the system menu if you do not want the user to exit

through the ALT+F4 (Close) combination.

All child windows that are created by the system-modal window become

system-modal windows. When the original window becomes active again,

it is system-modal. To end the system-modal state, destroy the

original system-modal window.

Care must be taking when using the SetSysModalWindow API from within

the Visual Basic programmer's environment. Pressing CTRL+BREAK to get

to the [break| mode leaves your modal form with no way to exit unless

you restart your system. When using the SetSysModalWindow within the

environment, be sure to exit your application by destroying the window

with either the ALT+F4 in the system menu, or by some other means from

within your running program.

To use the SetSysModalWindow API function, declare the API call in

your global section:

Declare Function SetSysModalWindow Lib "User" (ByVal hwnd%) As Integer

At an appropriate place in your code, add the following:

Success% = SetSysModalWindow(hwnd)

Once this line is executed, your window will be the only window that

can get focus until that window is destroyed.

Reference:

1. "Programming Windows: the Microsoft Guide to Writing Applications

for Windows 3," by Charles Petzold (published by Microsoft Press, 1990)

2. "Microsoft Windows 3.0 Software Development Kit: Reference Volume 1"

3. The WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit.

 

Knowledge Base

Title: VB "Out of Stack Space" with LoadPicture in Form_Paint Event

Document Number: Q72675 Publ Date: 6-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

An "Out of stack space" error can occur when you use a LoadPicture

method within a Form_Paint event.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

The Visual Basic stack can be exhausted when the LoadPicture method is

executed within a [control/form|_Paint event. The LoadPicture method

generates a [control/form|_Paint event itself, and when performed

within a _Paint event, the program will repeat the cycle until the

stack is exhausted.

The following code example demonstrates that the Form_Paint event is a

recursive procedure when a LoadPicture method is included in the

_Paint event code.

After you add the code to your program, run the program and notice how

many times the message "Form_Paint Count :" is displayed within the

Immediate Window before you receive the "Out of stack space" error

message.

Sub Form_Paint ()

Static Count

Count = Count + 1

Debug.Print "Form_Paint Count : "; Count

Form1.picture = LoadPicture("c:\windows\chess.bmp")

End Sub

To remedy the situation, move the LoadPicture to another event

handler, such as the Form_Load event. Since these bitmaps are

automatically refreshed when needed, you don't have to maintain the

picture within a Paint event.

The Visual Basic stack is limited to 16K bytes, and cannot be changed.

 

Knowledge Base

Title: "Method Not Applicable For This Object" with SetFocus

Document Number: Q72676 Publ Date: 6-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Visual Basic will return "Method Not Applicable For This Object"

whenever you use the SetFocus method on a control that is on a form

that is not visible.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

A control needs to be visible before you can execute the SetFocus

method to that control. To make a control visible, the form must be

loaded and the Visible property for the control must also be True

{-1}.

As an example, create two forms, and on each form, create a command

button.

In the code segment that follows, Form2 is not loaded yet, so you must

show Form2 before you can set the focus to Form2.Command1. Once Form2

has been loaded, you can set the focus to the visible control

Form2.Command1. When you click the Form1.Command1 twice, you will

receive the error "Method Not Applicable For This Object" because

Form2.Command1's visible property was set to false during the previous

call to Form_Click.

'* This is the load event for Form1.

Sub Form_Load ()

Form2.Show

Form2.Command1.Visible = 0 'this is the default setting

End Sub

'* This is the click event for Form1.Command1

Sub Command1_Click ()

Form2.Command1.SetFocus

Form2.Command1.Visible = 0 'hide the control

End Sub

 

Knowledge Base

Title: How to Limit User Input In VB Combo/Text Box; SendMessage API

Document Number: Q72677 Publ Date: 6-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

You can specify a limit to the amount of text that can be entered into

a text and/or combo box by calling SendMessage (a Windows 3.0 API

function) with the EM_LIMITTEXT constant.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

The constant EM_LIMITTEXT can be sent to the SendMessage Windows 3.0

API function to limit the length of a string entered into a combo

and/or text box.

Another method is to check the length of a string inside a KeyPress

event for the control. If the length is over a specified amount, then

the formal argument parameter KeyAscii will be set to zero.

A cleaner way is to use the SendMessage API function call. After you

set the Focus to the desired edit control, you must send a message to

the window's message queue, which will reset the text limit for the

control. The argument, EM_LIMITTEXT, as the second parameter to

SendMessage will set the desired text limit based on the value

specified by the third arguments. The SendMessage function requires

the following parameters for setting the text limit:

SendMessage (hWnd%,EM_LIMITTEXT, wParam%, lParam)

wParam% Specifies the maximum number of bytes that can be

entered. If the user attempts to enter more

characters, the edit control beeps and does not accept

the characters. If the wParam parameter is zero, no

limit is imposed on the size of the text(until no more

memory is available)

lParam Is not used.

As an example, do the following:

1. Create a form called Form1.

2. Add to Form1 a combo box called Combo1.

3. Add the following code to the general declarations section of the

form:

'*** Note: Each Declare statement must be on just one line:

Declare Function GetFocus% Lib "user" ()

Declare Function SendMessage& Lib "user" (ByVal hWnd%,

ByVal wMsg%,

ByVal wParam%,

lp As Any)

Declare Function PutFocus% Lib "user" Alias "SetFocus"

(ByVal hWnd%)

Const WM_USER = &H400

Const EM_LIMITTEXT = WM_USER + 21

4. Add the following code to the Form_Load event procedure:

Sub Form_Load ()

Form1.Show 'Must show form to work on it

Combo1.SetFocus 'Set the focus to the list box

cbhWnd% = GetFocus() 'Get the handle to the list box

TextLimit% = 5 'Specify the largest string

retVal = SendMessage(cbhWnd%, EM_LIMITTEXT, TextLimit%, 0)

End Sub

5. Run the program and enter some text into the combo box. You will

notice that you will only be able to enter a string of five

characters into the combo box.

Reference:

1. "Programming Windows: the Microsoft Guide to Writing Applications

for Windows 3," by Charles Petzold (published by Microsoft Press, 1990)

2. "Microsoft Windows 3.0 Software Development Kit: Reference Volume 1"

3. The WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit.

 

Knowledge Base

Title: VB Debug.Print in MouseMove Event Causes MouseMove Event

Document Number: Q72679 Publ Date: 6-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Debug.Print used within the MouseMove event procedure of a form or

control causes a MouseMove event. If the mouse cursor is located

within the form or control, an endless stream of output to the

Immediate Window will occur. This behavior occurs for a program run in

the Visual Basic development environment. An .EXE program does not

utilize the Immediate Window and the Debug object so this behavior

does not apply to a .EXE program. The problem does not occur if a

Print method is issued to any other form or control in the program.

This is not a problem with Visual Basic, but rather the nature of the

Microsoft Windows operating environment.

This information applies to Microsoft Visual Basic programming system

version 1.00 for Windows.

More Information:

If Debug.Print is used within the MouseMove event procedure of a form

or control, an endless stream of output is sent to the Immediate

Window. This occurs whenever the mouse cursor is within the form or

control. This behavior occurs because the Debug.Print statement causes

the focus to change briefly to the Immediate Window. When the focus

returns to the form or control, Windows generates a MouseMove event

that is processed by Visual Basic. There is no way for Visual Basic to

suppress MouseMove events that are generated by Windows. The easiest

way to overcome this behavior is to send debug output to another form

or control.

To duplicate this behavior, create a picture control (Picture1) within

the default form (Form1). Add the following code segment to the

MouseMove event procedure of Picture1:

Sub Picture1_MouseMove (Button As Integer, Shift As Integer,

X As Single, Y As Single)

' You must write the above Sub statement on just one line.

Static i%

i% = i% + 1

Debug.Print i%

End Sub

If you want output to be sent only when the mouse is moved, then all

Debug.Print statements within the MouseMove event procedure should be

changed to Print methods to other forms or controls. Below is a

description of how to modify the example above such that output is

produced only when the mouse is moved.

Add another form (Form2) to the project by selecting New Form from the

File menu (ALT F+F). Change the Debug.Print statement in the MouseMove

event procedure for Picture1 to Form2.Print. Below is a copy of the

above sample modified to send output to another form.

Sub Picture1_MouseMove (Button As Integer, Shift As Integer,

X As Single, Y As Single)

' You must write the above Sub statement on just one line.

Static i%

i% = i% + 1

Form2.Print i%

End Sub

In the example above, all output that scrolls off the form will be

lost. A more sophisticated routine will be required to keep track of

all output to the form. Such a routine is beyond the scope of this

article.

 

Knowledge Base

Title: Why Cooper Software Is Listed in Visual Basic's Copyright

Document Number: Q72747 Publ Date: 12-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

The Microsoft Visual Basic copyright notice acknowledges Cooper

Software in both the sign-on dialog box and in the About dialog box

from the Help menu. Visual Basic uses technology from a forms engine

purchased from Cooper Software. The acknowledgment in Visual Basic is

part of the contract between Microsoft and Cooper Software.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

 

Knowledge Base

Title: How to Trap a VB Form's Lost Focus with GetActiveWindow API

Document Number: Q69792 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

The LostFocus event in Microsoft Visual Basic is useful when

transferring control within an application. However, no global routine

exists to check for the entire form losing the focus. One method to

use to check whether your Visual Basic application has lost the focus

is the Windows API call GetActiveWindow, as explained below.

This information applies to Microsoft Visual Basic programming

system version 1.00 for Windows.

More Information:

The only way for a Visual Basic application to check for loss of focus

is to trigger the LostFocus event. A form does support a LostFocus

event; however, a form will only get focus if there are no controls on

that form. Focus goes to the controls on a form, and when you click

any other visible form or window, the control's LostFocus procedure

will be called. A control's LostFocus procedure will also be called

when another control on the form is activated. To perform a routine

that occurs only when the form loses focus requires careful management

of what generated a LostFocus event on each control (such as setting a

flag if another control's Click event was called).

For a simpler method to check if a whole form has lost the focus, you

can call the Windows API function GetActiveWindow, located in USER.DLL

in Windows 3.00. The GetActiveWindow API call returns the window

handle of the active window, which is the new window that you clicked.

In every LostFocus procedure for every control on the old form, you

would call GetActiveWindow and compare the return value with the old

form's window handle (hWnd). The following program example

demonstrates this technique:

Program Example

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

This single-form example will print "Lost Focus" on the form when you

click a different window (such as when you click another program

running in Windows).

In Visual Basic, create one command button, Command1, on a single

form, Form1.

From VB.EXE's Code menu, choose View Code, and enter the following

code for Form1 [using (general) from the Object box, and

(declarations) from the Procedure box|:

Declare Function GetActiveWindow Lib "User" () As Integer

From the Object box, choose Command1, and from the Procedure box,

choose LostFocus, and then put the following code in the

Command1_LostFocus procedure:

Sub Command1_LostFocus ()

If GetActiveWindow() <> Form1.hWND Then

'Do form's lost-focus routines here.

Print "Lost Focus"

End If

End Sub

You can now run the program.

Reference:

 

Knowledge Base

Title: How to Create Scrollable Viewports in Visual Basic

Document Number: Q71068 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Scrollable viewports can be created within Visual Basic using standard

Basic calls. The viewports can include bitmaps, graphics, or other

controls.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

To create a scrollable picture with clipping, you must have two

picture controls. The first picture control is called the stationary

parent picture control. Within the parent picture control, you need to

create a movable child picture control. It is the child picture

control that will be moved within the parent picture control. Moving

the child picture within the parent picture control creates the

clipping effect. During run time when you move the child picture, it

will now be clipped by the boundaries of the parent picture.

To create these two picture controls, do the following:

1. Choose the picture box control from the Toolbox window in Visual

Basic.

2. Draw a picture on the form. This is the parent picture.

3. Again choose the picture box control from the Toolbox window.

4. Draw the second picture on top of and within the boundaries of

the first picture control. This is the child picture.

The sample application below shows how to create a scrollable bitmap

within a viewport. Perform the sequence above to create a parent/child

picture control. Add a horizontal scroll bar and a vertical scroll bar

to the form.

Make sure that the path to your bitmap is correct. Several of the

properties are set during run time, which could have been set during

design time as well.

Moving the thumb of the two scroll bars will move the child picture

within the parent picture. The handle (upper-left corner of the

picture) to the child picture will be located either at (0,0) of the

parent picture or to the left and/or right of the parent picture.

Since the clipping region is that of the parent picture, the child

picture will appear to move across the parent picture viewport.

Sub Form_Load ()

Const PIXEL = 3

Const TRUE = -1

Const NONE = 0

' Set design properties, included here for simplicity.

Form1.ScaleMode = PIXEL

Picture1.ScaleMode = PIXEL

Picture2.ScaleMode = PIXEL

' AutoSize is set to TRUE so that the boundaries of

' Picture2 are expanded to the size of the actual bitmap.

Picture2.AutoSize = TRUE

' Get rid of annoying borders.

Picture1.BorderStyle = NONE

Picture2.BorderStyle = NONE

' Load the picture that you want to display.

Picture2.Picture = LoadPicture("c:\win\party.bmp")

' Initialize location of both pictures.

Picture1.Move 0, 0, ScaleWidth - VScroll1.Width,_

ScaleHeight - HScroll1.Height

Picture2.Move 0, 0

' Position the horizontal scroll bar.

HScroll1.Top = Picture1.Height

HScroll1.Left = 0

HScroll1.Width = Picture1.Width

' Position the vertical scroll bar.

VScroll1.Top = 0

VScroll1.Left = Picture1.Width

VScroll1.Height = Picture1.Height

' Set the Max value for the scroll bars.

HScroll1.Max = Picture2.Width - Picture1.Width

VScroll1.Max = Picture2.Height - Picture1.Height

' Determine if child picture will fill up screen.

' If so, then there is no need to use scroll bars.

VScroll1.Enabled = (Picture1.Height < Picture2.Height)

HScroll1.Enabled = (Picture1.Width < Picture2.Width)

End Sub

Sub HScroll1_Change ()

' Picture2.Left is set to the negative of the value because

' as you scroll the scroll bar to the right, the display

' should move to the Left, showing more of the right

' of the display, and vice-versa when scrolling to the

' left.

Picture2.Left = -HScroll1.Value

End Sub

Sub VScroll1_Change ()

' Picture2.Top is set to the negative of the value because

' as you scroll the scroll bar down, the display

' should move up, showing more of the bottom

' of the display, and vice-versa when scrolling up.

Picture2.Top = -VScroll1.Value

End Sub

 

Knowledge Base

Title: How to Clear a VB List Box with a Windows API Function

Document Number: Q71069 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Customers commonly ask how to quickly clear the contents of a list box

without clearing one item at a time. The following article shows how

to instantly clear the contents of a list box by sending the list box

a LB_RESETCONTENT message.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

There is no single command within Visual Basic that will clear out the

entries of a list box. However, by using the SendMessage function, you

can clear out the list box with one command. The arguments to

SendMessage with the LB_RESETCONTENT parameter are

SendMessage(hWnd%, wMsg%, wParam%, lParam&)

where:

hWnd% Identifies the window that is to receive the message.

wMsg% The message to be sent. (&H405)

wParam% Is not used. (NULL)

lParam& Is not used. (NULL)

Specifying wMsg% equal to &H405 removes all strings from the list box

and frees any memory allocated for those strings.

To get hWnd% you must call the Windows API function GetFocus. This

method will return the handle to the control that currently has focus,

in this case the list box that you want to delete all items from.

The code listed below demonstrates how to delete entries from a list

box:

1. Create a list box called List1 on Form1.

2. Declare the following Windows API functions at the module level or

in the Global section of your code as follows:

Declare Function SendMessage% Lib "user" (ByVal hWnd%,_

ByVal wMsg%,_

ByVal wParam%,_

ByVal lParam&)

Declare Function GetFocus% Lib "user" ()

Declare Function PutFocus% Lib "user" Alias "SetFocus" (ByVal hWnd%)

Note: Each Declare statement must be written on one line, leaving

out the underscore (_) line-continuation symbol shown above.

3. Declare the following constants in the same section:

Const WM_USER = &H400

Const LB_RESETCONTENT = WM_USER + 5

4. Create a Sub within the (declarations) section of the code window

with the following code:

Sub ClearListBox (Ctrl As Control)

hWndOld% = GetFocus()

Ctrl.SetFocus

x = SendMessage(GetFocus(), LB_RESETCONTENT, 0, 0)

Suc% = PutFocus(hWndOld%)

End Sub

5. Now, within some event procedure, call ClearListBox with the name

of the list box as a parameter:

Sub Form_Click ()

ClearListBox List1

End Sub

6. Place some entries into the list box:

Sub Form_Load ()

For i = 1 To 10

List1.AddItem Format$(i) 'Put something into list box.

Next

End Sub

6. Run the program and click anywhere on Form1. This will clear out

the list box.

 

Knowledge Base

Title: How to Emulate QuickBasic's SOUND Statement in Visual Basic

Document Number: Q71102 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

The SOUND statement found in Microsoft QuickBASIC is not implemented

within Microsoft Visual Basic. You can perform sound through a Windows

3.00 API call that is equivalent to the QuickBASIC SOUND statement.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

The QuickBASIC version of the SOUND statement can be executed by

calling several Windows 3.00 API function calls. Within Windows, you

must open up a VoiceQueue with the OpenSound call routine. Using the

function SetVoiceSound, place all of the values corresponding to the

desired frequencies and durations. Once the VoiceQueue has the desired

frequencies and durations, you start the process by calling

StartSound. After the sounds have been played, you must free up the

VoiceQueue by calling CloseSound. If you plan on placing a large

amount of information into the VoiceQueue, you may need to resize the

VoiceQueue buffer by calling the SetVoiceQueueSize function.

After executing the StartSound function, you cannot place any more

sound into the VoiceQueue until the VoiceQueue is depleted. Placing

more sound into the queue will overwrite any information that was

previously in the VoiceQueue. If you are going to place sound into the

VoiceQueue after a StartSound statement, you will need to call

WaitSound with an argument of one. When WaitSound returns NULL, the

VoiceQueue is empty and processing can continue.

Below is an example of using the Windows API function calls, which will

imitate the QuickBASIC SOUND statement:

In the general section place the following:

Declare Function OpenSound Lib "sound.drv" () As Integer

Declare Function VoiceQueueSize Lib "sound.drv"

(ByVal nVoice%, ByVal nBytes%) As Integer

Declare Function SetVoiceSound Lib "sound.drv"

(ByVal nSource%, ByVal Freq&, ByVal nDuration%) As Integer

Declare Function StartSound Lib "sound.drv" () As Integer

Declare Function CloseSound Lib "sound.drv" () As Integer

Declare Function WaitSoundState Lib "sound.drv" (ByVal State%) As Integer

Note: All Declare statements above each must be placed on one line.

The SetVoiceSound takes two arguments. The first variable, Freq, is a

two WORD parameter. The HIGH WORD will hold the actual frequency in

hertz. The LOW WORD will hold the fractional frequency. The formula, X

* 2 ^ 16, will shift the variable "X" into the HIGH WORD location. The

second variable, Duration%, is the duration in clock ticks. There are

18.2 tick clicks per second on all Intel computers.

The following simplistic example shows how you can place several

frequencies and durations into the VoiceQueue before starting the

sound by calling the StartSound function:

Sub Form_Click ()

Suc% = OpenSound()

S% = SetVoiceSound(1, 100 * 2 ^ 16, 100) ' Frequency = 100hz

S% = SetVoiceSound(1, 90 * 2 ^ 16, 90) ' Frequency = 90 hz

S% = SetVoiceSound(1, 80 * 2 ^ 16, 90) ' Frequency = 80 hz

S% = StartSound()

Succ% = CloseSound()

End Sub

The following is another simple example, which creates a siren sound:

1. Within the general section, place the following Sound procedure:

Sub Sound (ByVal Freq as Long, ByVal Duration%)

Freq = Freq * 2 ^ 16 ' Shift frequency to high byte.

S% = SetVoiceSound(1, Freq, Duration%)

S% = StartSound()

While (WaitSoundState(1) <> 0): Wend

End Sub

2. Place the code below into any event procedure. The example below

uses the Form_Click event procedure. Clicking any position on the

form will create a police siren.

Sub Form_Click ()

Suc% = OpenSound()

For j& = 440 To 1000 Step 5

Call Sound(j&, j& / 100)

Next j&

For j& = 1000 To 440 Step -5

Call Sound(j&, j& / 100)

Next j&

Succ% = CloseSound()

End Sub

 

Knowledge Base

Title: How to Flood Fill in VB Using Windows API Function Call

Document Number: Q71103 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

You can fill an area on a window in Visual Basic through a Windows API

function call. Depending on the type of fill to be performed, you can

use ExtFloodFill to achieve the desired effect.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

The Windows API function call ExtFloodFill fills an area of the

display surface with the current brush, as shown in the example below.

Code Example

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

From VB.EXE's Code menu, choose View Code, and enter the following

code (on just one line) for Form1 [using (general) from the Object

box, and (declarations) from the Procedure box|:

Declare Function ExtFloodFill Lib "GDI" (ByVal hdc%, ByVal i%,

ByVal i%, ByVal w&, ByVal i%) As Integer

To demonstrate several fill examples, create a picture box called

Picture1. Set the following properties:

AutoSize = TRUE ' Scale picture to size of imported picture.

FillColor = &HFF00FF ' This will be the selected fill color.

FillStyle = Solid ' Necessary to create a fill pattern.

Picture = Chess.bmp ' This should be in your Windows directory.

Create a push button in a location that will not be overlapped by

Picture1. Within the Click event, create the following code:

Sub Command1_Click ()

' Make sure that the FillStyle is not transparent.

' crColor& specifies the color for the boundary.

Const FLOODFILLBORDER = 0 ' Fill until crColor& color encountered.

Const FLOODFILLSURFACE = 1 ' Fill surface until crColor& color not

' encountered.

X% = 1

Y% = 1

crColor& = RGB(0, 0, 0)

wFillType% = FLOODFILLSURFACE

Suc% = ExtFloodFill(picture1.hDC, X%, Y%, crColor&, wFillType%)

End Sub

When you click on the push button, the black background will change to

the FillColor. The fill area is defined by the color specified by

crColor&. Filling continues outward from (X%,Y%) as long as the color

is encountered.

Now change the related code to represent the following:

crColor& = RGB(255, 0, 0) 'Color to look for.

wFillType% = FLOODFILLBORDER

Suc% = ExtFloodFill(picture1.hDC, X%, Y%, crColor&, wFillType%)

Executing the push button will now fill the area until crColor& is

encountered. In the first example, the fill was performed while the

color was encountered; in the second example, the fill was performed

while the color was NOT encountered. In the last example, everything

is changed except the "floating pawn".

 

Knowledge Base

Title: How to Use Windows 3.0 BitBlt Function from Visual Basic

Document Number: Q71104 Publ Date: 10-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

The Windows GDI.DLL has a function call BitBlt, which will move the

source device given by the hSrcDC parameter to the destination device

given by the hDestDC parameter. This article explains in detail the

arguments of the Windows BitBlt function call.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

To use BitBlt within a Visual Basic application, you must Declare

the BitBlt function in either the Global section or within the

(declaration) section of your code window. Declare the Function as

follows:

Declare Function BitBlt Lib "gdi" (ByVal hDestDC%,

ByVal X%, ByVal Y%,

ByVal nWidth%,

ByVal nHeight%,

ByVal hSrcDC%,

ByVal XSrc%, ByVal YSrc%,

ByVal dwRop&) As Integer

Note: The above Declare statement must be written on just one line.

The following formal parameters are defined as:

Formal Parameter Definition

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

hDestDC Specifies the device context that is to

receive the bitmap.

X,Y Specifies the logical x-coordinate and

y-coordinate of the upper-left corner of the

destination rectangle.

nWidth, nHeight Specifies the width (in logical units) of the

destination rectangle and the source bitmap.

nHeight Specifies the height (in logical units) of

the destination rectangle and the source

bitmap.

hSrcDC Identifies the device context from which the

bitmap will be copied. It must be

NULL(zero) if the dwRop& parameter specifies

a raster operation that does not include a

source.

XSrc Specifies the logical x-coordinate and the

y-coordinate of the upper-left corner of the

source bitmap.

dwRop Specifies the raster operation to be performed

as defined below.

The following Raster operations are defined using the predefined

constants found in the WINDOWS.H file supplied with the Microsoft

Windows version 3.00 Software Development Kit (SDK). The value within

the "()" is the value to assign to the dwRop& variable.

Code/Value (hex) Description

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

BLACKNESS (42) Turn output black.

DSINVERT(550009) Inverts the destination bitmap.

MERGECOPY(C000CA) Combines the pattern and the source bitmap

using the Boolean AND operation.

MERGEPAINT(BB0226) Combines the inverted source bitmap with the

destination bitmap using the Boolean OR

operator.

NOTSRCCOPY(330008) Copies the inverted source bitmap to the

destination.

NOTSRCERASE(1100A6) Inverts the result of combining the

destination and source bitmap using the

Boolean OR operator.

PATCOPY(F00021) Copies the pattern to the destination bitmap.

PATINVERT(5A0049) Combines the destination bitmap with the

pattern using the Boolean XOR operator.

PATPAINT(FB0A09) Combines the inverted source bitmap with the

pattern using the Boolean OR operator.

Combines the result of this operation with

the destination bitmap using the Boolean OR

operator.

SRCAND(8800C6) Combines pixels of the destination and source

bitmap using the Boolean AND operator.

SRCCOPY(CC0020) Copies the source bitmap to the destination

bitmap.

SRCERASE(4400328) Inverts the destination bitmap and combines

the results with the source bitmap using the

Boolean AND operator.

SRCINVERT(660046) Combines pixels of the destination and source

bitmap using the Boolean XOR operator.

SRCPAINT(EE0086) Combines pixels of the destination and source

bitmap using the Boolean OR operator.

WHITENESS(FF0062) Turns all output white.

Below is an example of how to copy the contents of a picture control

to the contents of another picture control.

Define a form with two picture controls. Display some graphics on

Picture1 by loading from a picture file or pasting from the clipboard

at design time. You can load a picture from a file as follows: from

the Properties bar, select Picture from the Properties list box and

click the arrow at the right of the Settings box, then select the

desired picture file (such as a .BMP or .ICO file supplied with

Microsoft Windows) from the dialog box.

Add the following code to the Form_Click procedure. Run the program

and click the form. The contents of the first picture will be

displayed to the second picture.

Sub Form_Click ()

' Assign information of the destination bitmap. Note that Bitblt

' requires coordinates in pixels.

Const PIXEL = 3

Picture1.ScaleMode = PIXEL

Picture2.ScaleMode = PIXEL

hDestDC% = Picture2.hDC

X% = 0: Y% = 0

nWidth% = Picture2.ScaleWidth

nHeight% = Picture2.ScaleHeight

' Assign information of the source bitmap.

hSrcDC% = Picture1.hDC

XSrc% = 0: YSrc% = 0

' Assign the SRCCOPY constant to the Raster operation.

dwRop& = &HCC0020

Suc% = BitBlt(hDestDC%, X%, Y%, nWidth%, nHeight%,_

hSrcDC%, XSrc%, YSrc%, dwRop&)

End Sub

 

Knowledge Base

Title: How to Set Hourglass MousePointer in VB Program During Delays

Document Number: Q71105 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: MS-DOS

Summary:

During operations that take time, you may decide to display the

hourglass mouse cursor. This will let the user know that the computer

is performing an operation that may take some noticeable time, and

that no user input will be immediately processed during this time.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

The MousePointer property can be set during design time or during run

time. During operations that may take some noticeable amount of time,

the MousePointer should be set to the hourglass pointer. This can be

performed using the Screen.MousePointer property. Before setting the

mouse pointer to the hourglass, you should save the present mouse

pointer so that when you are through with the hourglass cursor, you

can re-initialize it to the previous pointer. Below is an example of

setting the pointer to the hourglass cursor:

Sub Form_Click ()

SavedPointer = Screen.MousePointer ' Save mouse pointer.

Screen.MousePointer = 11 ' 11# = hourglass.

For i = 1 To 10000: Next i ' Some lengthy operation.

Screen.MousePointer = SavedPointer ' set to previous mouse pointer.

End Sub

 

Knowledge Base

Title: How to Pass One-Byte Parameters from VB to DLL Routines

Document Number: Q71106 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Calling some routines in dynamic link libraries (DLLs) requires BYTE

parameters in the argument list. Visual Basic possesses no BYTE data

type as defined in other languages such as C, which can create DLLs.

To pass a BYTE value correctly to an external FUNCTION (in a DLL),

which requires a BYTE data type, you must pass an integer data type

for the BYTE parameter.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

Visual BASIC has the ability to call external code in the form of

dynamic link libraries (DLLs). Some of these libraries require BYTE

parameters in the argument list. An example of this is located in the

KEYBOARD.DRV FUNCTION as defined below:

FUNCTION GetTempFileName (BYTE cDrive,

LPSTR lpPrefix,

WORD wUnique,

LPSTR lpTempFileName)

GetTempFileName is documented on page 4-217 of the "Microsoft Windows

3.0 Software Development Kit, Reference - Volume 1." In Visual BASIC,

declare the FUNCTION on one line in the main module of your code:

DECLARE FUNCTION GetTempFileName LIB "keyboard.drv"

(BYVAL A%, BYVAL B$, BYVAL C%, BYVAL D$)

Because the architecture of the 80x86 stack is segmented into word

boundaries, the smallest type pushed onto the stack will be a word.

Therefore, both the BYTE and the integer will be pushed onto the stack

in the same manner, and require the same amount of memory. This is the

reason you can use an integer data type for a BYTE data type in these

types of procedure calls.

 

Knowledge Base

Title: How to Send an HBITMAP to Windows API Function Calls from VB

Document Number: Q71260 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Several Windows API functions require the HBITMAP data type. Visual

Basic does not have a HBITMAP data type. This article explains how to

send the equivalent Visual Basic HBITMAP handle of a picture control

to a Windows API function call.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

The HBITMAP data type represents a 16-bit index to GDIs physical

drawing object. Several Windows API routines need the HBITMAP data

type as an argument. Sending the [picture-control|.Picture as an

argument is the equivalent in Visual Basic.

The code sample below demonstrates how to send HBITMAP to the Windows

API function ModifyMenu.

Declare Function SetMenuItemBitMaps% Lib "user" (ByVal hMenu%,

ByVal nPos%,

ByVal wFlag%,

ByVal BitmapUnChecked%,

ByVal hBitmapChecked%)

Note: The above Declare statement must be written on just one line.

The SetMenuItemBitMap takes five arguments. The fourth and fifth

arguments are HBITMAP data types.

The following code segment will associate the specified bitmap

Picture1.Picture in place of the default check mark:

X% = SetMenuItemBitMap(hMenu%, menuID%,0,0, Picture1.Picture)

Reference:

1. "Programming Windows: the Microsoft Guide to Writing Applications

for Windows 3," by Charles Petzold (published by Microsoft

Press, 1990)

2. "Microsoft Windows 3.0 Software Development Kit: Reference

Volume 1"

3. The WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit.

 

Knowledge Base

Title: How to Create Pop-up Menus on a Visual Basic Form

Document Number: Q71279 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Visual Basic can call the Windows API function TrackPopupMenu to

display a specified menu at the location on the screen that the user

clicks with the mouse.

This information applies to Microsoft Visual Basic Programming

System version 1.00 for Windows.

More Information:

The TrackPopupMenu function displays a "floating" pop-up menu at the

specified location and tracks the selection of items on the pop-up

menu. A floating pop-up menu can appear anywhere on the screen. The

hMenu parameter specifies the handle of the menu to be displayed; the

application obtains this handle by calling GetSubMenu to retrieve the

handle of a pop-up menu associated with an existing menu item.

TrackPopupMenu is defined as follows

TrackPopupMenu (hMenu%,wFlags%, X%, Y%, rRes%, hwnd%, lpRes&)

where:

hMenu% - Identifies the pop-up menu to be displayed.

wFlags% - Not used. This parameter must be set to zero.

x% - Specifies the horizontal position in screen coordinates

of the left side of the menu on the screen.

y% - Specifies the vertical position in screen coordinates

of the top of the menu on the screen.

nRes% - Is reserved and must be set to zero.

hWnd% - Identifies the window that owns the pop-up menu.

lpRes& - Is reserved and must be set to NULL.

The supporting Windows API functions needed to support the arguments

to TrackPopupMenu are:

1. GetMenu(hWnd%)

hWnd% - Identifies the window whose menu is to be examined.

GetMenu returns a value that identifies the menu. The return value

is NULL if the given window has no menu. The return value is

undefined if the window is a child window.

2. GetSubMenu(hMenu%, nPos%)

hMenu% - Identifies the menu.

nPos% - Specifies the position in the given menu of the pop-up

menu. Position values start at zero for the first

menu item.

GetSubMenu returns a value that identifies the given pop-up menu.

The return value is NULL if no pop-up menu exists at the given

position.

To create a pop-up menu within Visual Basic, define a menu system with

the Menu Design window. The following is an example of a menu system:

Caption CntlName Indented

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

File M_File No

New M_New Once

Open M_Open Once

Close M_Close Once

Exit M_Exit Once

Help M_Help No

Within the general-declaration section of your Code window, declare

the following:

Declare Function TrackPopupMenu% Lib "user"(ByVal hMenu%,

ByVal wFlags%,

ByVal X%, ByVal Y%,

ByVal r2%, ByVal hwnd%,

ByVal r1&)

Declare Function GetMenu% Lib "user" (ByVal hwnd%)

Declare Function GetSubMenu% Lib "user" (ByVal hMenu%, ByVal nPos%)

Note: Each Declare statement above must be located on just one line.

Place the following code in the form's MouseUp event procedure:

Sub Form1_MouseUp (Button As Integer, Shift As Integer, X As Single,

Y As Single)

' The above Sub statement must be concatenated onto one line.

Const PIXEL = 3

Const TWIP = 1

ScaleMode = PIXEL

InPixels = ScaleWidth

ScaleMode = TWIP

IX = (X + Left) \ (ScaleWidth \ InPixels)

IY = (Y + (Top + (Height - ScaleHeight -

(Width - ScaleWidth)))) \ (ScaleWidth \ InPixels)

' The above IY = ... statement must be concatenated onto one line.

hMenu% = GetMenu(hwnd)

hSubMenu% = GetSubMenu(hMenu%, Button - 1)

R = TrackPopupMenu(hSubMenu%, 0, IX, IY, 0, hwnd, 0)

End Sub

When you run the program, clicking anywhere on Form1 will display the

first menu on your menu bar at that location.

Reference:

1. "Programming Windows: the Microsoft Guide to Writing Applications

for Windows 3," by Charles Petzold (published by Microsoft

Press, 1990)

2. "Microsoft Windows 3.0 Software Development Kit: Reference

Volume 1"

3. The WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit.

 

Knowledge Base

Title: How to Create a Flashing Title Bar on a Visual Basic Form

Document Number: Q71280 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

When calling a Windows API function call, you can create a flashing

window title bar on the present form or any other form for which you

know the handle.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

Visual Basic has the ability to flash the title bar on any other form

if you can get the handle to that form. The function FlashWindow

flashes the specified window once. Flashing a window means changing

the appearance of its caption bar, as if the window were changing from

inactive to active status, or vice versa. (An inactive caption bar

changes to an active caption bar; an active caption bar changes to an

inactive caption bar.)

Typically, a window is flashed to inform the user that the window

requires attention when that window does not currently have the input

focus.

The function FlashWindow is defined as

FlashWindow(hWnd%, bInvert%)

where:

hWnd% - Identifies the window to be flashed. The window can be

either open or iconic.

bInvert% - Specifies whether the window is to be flashed or

returned to its original state. The window is flashed

from one state to the other if the bInvert parameter is

nonzero. If the bInvert parameter is zero, the window

is returned to its original state (either active or

inactive).

FlashWindow returns a value that specifies the window's state before

the call to the FlashWindow function. It is nonzero if the window was

active before the call; otherwise, it is zero.

The following section describes how to flash a form while that form

does not have the focus:

1. Create two forms called Form1 and Form2.

2. On Form1, create a timer control and set the Interval Property to

1000. Also set the Enabled Property to FALSE.

3. Within the general-declarations section of Form1, declare the

FlashWindow function as follows:

Declare Function FlashWindow% Lib "user" (ByVal hWnd%,

ByVal bInvert%)

4. Define the following constants directly after the declarations

section:

Const TRUE = -1

Const FALSE = 0

5. In the Form_Load event procedure, add the following code:

Sub Form_Load ()

Form2.Show

End Sub

6. In the Sub_Time1_Timer () procedure of Form1, add the following

code:

Sub Timer1_Timer ()

Succ% = FlashWindow(Form1.hWnd, 1)

End Sub

7. In the GetFocus event procedure of Form1, create the following

code:

Sub Form_GotFocus ()

Timer1.Enabled = 0

End Sub

8. In the Click event for Form2, add the following code:

Sub Form_Click ()

Form1.Timer1.Enabled = -1

End Sub

9. Run the program. Form1 will be in the foreground with Form2 in the

background. Click anywhere on Form2; Form1's Caption Bar will flash

until you click on Form1.

Reference:

1. "Programming Windows: the Microsoft Guide to Writing Applications

for Windows 3," by Charles Petzold (published by Microsoft

Press, 1990)

2. "Microsoft Windows 3.0 Software Development Kit: Reference

Volume 1"

3. The WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit.

 

Knowledge Base

Title: How to Implement Bitmaps Within Visual Basic Menus

Document Number: Q71281 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

There is no command within Visual Basic that will add bitmaps to the

menu system. There are several Windows API functions that you can call

that will place bitmaps within the menu system. You may also change

the default check mark displayed.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

There are several Windows API functions that you can call that will

display bitmaps instead of text in the menu system.

Below is a list of the required Windows API functions:

1. GetMenu% (hwnd%)

hwnd% - Identifies the window whose menu is to be examined.

Returns: Handle to the menu.

2. GetSubMenu% (hMenu%, nPos%)

hMenu% - Identifies the menu.

nPos% - Specifies the position (zero-based) in the given menu of

the pop-up menu.

Returns: Handle to the given pop-up menu.

3. GetMenuItemID% (hMenu%, nPos%)

hMenu% - Identifies the handle to the pop-up menu that contains

the item whose ID is being retrieved.

nPos - Specifies the position(zero-based) of the menu whose ID

is being retrieved.

Returns: The item ID for the specified item in the pop-up menu.

4. ModifyMenu% (hMenu%, nPos%, wFlags%, wIDNewItem%, lpNewItem&)

hMenu% - Identifies the handle to the pop-up menu that contains

the item whose ID is being retrieved.

nPos% - Specifies the menu item to be changed. The

interpretation of the nPos parameter depends on the

wFlags parameter.

wFlags% - BF_BITMAP = &H4

wIDNewItem% - Specifies the command ID of the modified menu item.

lpNewItem& - 32-bit handle to the bitmap.

Returns: TRUE if successful, FALSE if unsuccessful.

5. SetMenuItemBitmaps% (hMenu%, nPos%, wFlags%,hBitmapUnchecked%,

hBitmapChecked%)

hMenu% - Identifies menu to be changed.

nPos% - Command ID of the menu item

wFlags% - &H0

hBitmapUnchecked% - Handle to "unchecked" bitmap.

hBitmapChecked%) - Handle to the "check" bitmap.

Returns: TRUE if successful, FALSE if unsuccessful.

There are two different ways to implement bitmaps within Visual Basic.

The first method is using static bitmaps. The other method is using

dynamic bitmaps.

Static bitmaps are bitmaps that are placed within the menu using

static bitmaps. Dynamic bitmaps are bitmaps that are changed during

execution of your program. You may change dynamic bitmap attributes

such as color, size, and text. The sample code below describes how to

perform both types of menus.

Define a menu system using the Menu Design window. Create a menu

system such as the following:

Caption CtlName Indented Index

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

BitMenu TopMenu No

Sub Menu0 SubMenu Once 0

Sub Menu1 SubMenu Once 1

Sub Menu2 SubMenu Once 2

Create a Picture Control Array with 3 bitmaps. This can be

accomplished by creating 3 picture controls with the same CtlName

using the Properties list box.

Caption CtlName Index FontSize

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

Picture0 Picture1 0 Set different

Picture1 Picture1 1 font sizes for

Picture2 Picture1 2 each of the pictures

Both types of bitmap implementations will need to have the following

declarations in the declaration or global section of your code:

Declare Function GetMenu% Lib "user" (ByVal hwnd%)

Declare Function GetSubMenu% Lib "user" (ByVal hMenu%, ByVal nPos%)

Declare Function GetMenuItemID% Lib "user" (ByVal hMenu%, ByVal,

nPos%)

Declare Function ModifyMenu% Lib "user" (ByVal hMenu%,

ByVal nPosition%, ByVal wFlags%,

ByVal wIDNewItem%, ByVal lpNewItem&)

Declare Function SetMenuItemBitmaps% Lib "user" (ByVal hMenu%,

ByVal nPosition%, ByVal wFlags%,

ByVal hBitmapUnchecked%, ByVal BitmapChecked%)

' NOTE: Each Declare statement above must be on just one line.

Const MF_BITMAP = &H4

Const CLR_MENUBAR = &H80000004 ' Defined for dynamic bitmaps only.

Const TRUE = -1, FALSE = 0

Const Number_of_Menu_Selections = 3

The following Sub will also need to be defined to handle the actual

redefinition of the "check" bitmap:

Sub SubMenu_Click (Index As Integer)

' Uncheck presently checked item, check new item, store index

Static LastSelection%

SubMenu(LastSelection%).Checked = FALSE

SubMenu(Index).Checked = TRUE

LastSelection% = Index

End Sub

The following examples show the two ways to implement the Dynamic and

Static menu bitmaps.

Static Bitmap Menus

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

Add the code listed below to the appropriate Sub:

Sub Form_Load ()

' Get the handle to the top level Menu

hMenu% = GetMenu(hwnd)

' Get the handle to the SubMenu of top level Menu

hSubMenu% = GetSubMenu(hMenu%, 0)

For I% = 0 To Number_of_Menu_Selections - 1

' get the handle to the specific item in SubMenu

menuID% = GetMenuItemID(hSubMenu%, I%)

' Place the bitmap into the I'th submenu location

X% = ModifyMenu(hMenu%, menuID%, MF_BITMAP, menuID%,

CLng(picture1(I%).Picture))

' Assign bitmap for the check mark to the I'th submenu

X% = SetMenuItemBitmaps(hMenu%, menuID%, 0, 0,

CLng(picture2.Picture))

Next I%

End Sub

Dynamic Bitmap Menus

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

This code sample will change the actual menu bitmaps size, font size,

color, and caption. Run the application and select the BitMenu and

view the selections. Then click on the form and revisit the BitMenu.

Sub Form_Click ()

For i% = 0 To Number_of_Menu_Selections

'* Place some text into the menu.

SubMenu(i%).Caption = Picture1(i%).FontName +

Str$(Picture1(i%).FontSize) + " Pnt"

'* 1. Must be AutoRedraw for Image().

'* 2. Set Backcolor of Picture control to that of the

'* current system Menu Bar color, so Dynamic bitmaps

'* will appear as normal menu items when menu bar

'* color is changed via the control panel

'* 3. See the bitmaps on screen, this could all be done at design

'* time.

Picture1(i%).AutoRedraw = TRUE

Picture1(i%).BackColor = CLR_MENUBAR

Picture1(i%).Visible = FALSE

'* Set the width and height of the Picture controls

'* based on their corresponding Menu items caption,

'* and the Picture controls Font and FontSize.

'* DoEvents() is necessary to make new dimension

'* values to take affect prior to exiting this Sub.

Picture1(i%).Width = Picture1(i%).TextWidth(SubMenu(i%).Caption)

Picture1(i%).Height =Picture1(i%).TextHeight(SubMenu(i%).Caption)

Picture1(i%).Print SubMenu(i%).Caption

'* - Set picture controls backgroup picture (Bitmap) to its Image.

Picture1(i%).Picture = Picture1(i%).Image

X% = DoEvents()

Next i%

'* Get handle to forms menu.

hMenu% = GetMenu(Form1.hwnd)

'* Get handle to the specific menu in top level menu.

hSubMenu% = GetSubMenu(hMenu%, 0)

For i% = 0 To Number_of_Menu_Selections

'* Get ID of sub menu

menuID% = GetMenuItemID(hSubMenu%, i%)

'* Replace menu text w/bitmap from corresponding picture control

X% = ModifyMenu(hMenu%, menuID%, MF_BITMAP, menuID%,

CLng(Picture1(i%).Picture))

'* Replace bitmap for menu check mark with custom check bitmap

X% = SetMenuItemBitmaps(hMenu%, menuID%, 0, 0,

CLng(picture2.Picture))

Next i%

End Sub

 

Knowledge Base

Title: How to Create Rubber-Band Lines/Boxes in Visual Basic

Document Number: Q71488 Publ Date: 20-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Creating rubber bands within Visual Basic can be done using the

DrawMode property. Rubber bands are lines that stretch as you move the

mouse cursor from a specified point to a new location. This can be

very useful in graphics programs and when defining sections of the

screen for clipping routines.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

The theory of drawing a rubber-band box is as follows:

1. Draw a line from the initial point to the location of the mouse

cursor using:

[form|.DrawMode = 6. {INVERT}

2. Move the mouse cursor.

3. Save the DrawMode.

4. Set the [form|.DrawMode to 6. {INVERT}

5. Draw the same line that was drawn in step 1. This will restore the

image underneath the line.

6. Set the [form|.DrawMode back to the initial DrawMode saved in step

3.

7. Repeat the cycle again.

DrawMode equal to INVERT allows the line to be created using the

inverse of the background color. This allows the line to be always

displayed on all colors.

The sample below will demonstrate the rubber-band line and the

rubber-band box. Clicking on the command buttons will allow the user

to select between rubber-band line or a rubber-band box. The user will

also be able to select a solid line or a dashed line.

Create and set the following controls and properties:

CtlName Caption Picture

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

Form1 Form1 c:\windows\chess.bmp

Command1 RubberBand

Command2 RubberBox

Command3 Dotted

Command4 Solid

In the general section of your code, define the following constants:

Const INVERSE = 6 '*Characteristic of DrawMode property(XOR).

Const SOLID = 0 '*Characteristic of DrawStyle property.

Const DOT = 2 '*Characteristic of DrawStyle property.

Const TRUE = -1

Const FALSE = 0

Dim DrawBox As Integer '*Boolean-whether drawing Box or Line

Dim OldX, OldY, StartX, StartY As Single '* Mouse locations

In the appropriate procedures, add the following code:

Sub Form_MouseDown (Button As Integer, Shift As Integer, X As

Single, Y As Single)

'* Store the initial start of the line to draw.

StartX = X

StartY = Y

'* Make the last location equal the starting location

OldX = StartX

OldY = StartY

End Sub

Sub Form_MouseMove (Button As Integer, Shift As Integer, X As

Single, Y As Single)

'* If the button is depressed then...

If Button Then

'* Erase the previous line.

Call DrawLine(StartX, StartY, OldX, OldY)

'* Draw the new line.

Call DrawLine(StartX, StartY, X, Y)

'* Save the coordinates for the next call.

OldX = X

OldY = Y

End If

End Sub

Sub DrawLine (X1, Y1, X2, Y2 As Single)

'* Save the current mode so that you can reset it on

'* exit from this sub routine. Not needed in the sample

'* but would need it if you are not sure what the

'* DrawMode was on entry to this procedure.

SavedMode% = DrawMode

'* Set to XOR

DrawMode = INVERSE

'*Draw a box or line

If DrawBox Then

Line (X1, Y1)-(X2, Y2), , B

Else

Line (X1, Y1)-(X2, Y2)

End If

'* Reset the DrawMode

DrawMode = SavedMode%

End Sub

Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single,

Y As Single)

'* Stop drawing lines/boxes.

StartEvent = FALSE

End Sub

Sub Command2_Click ()

'* Boolean value to determine whether to draw a line or box.

DrawBox = TRUE

End Sub

Sub Command1_Click ()

'* Boolean value to determine whether to draw a line or box.

DrawBox = FALSE

End Sub

Sub Command3_Click ()

'* Create a dotted line

Form1.DrawStyle = DOT

End Sub

Sub Command4_Click ()

'* Create a solid line.

Form1.DrawStyle = SOLID

End Sub

 

Knowledge Base

Title: Visual Basic Support Service Letter, BL0356; Phone Policies

Document Number: Q72264 Publ Date: 30-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Below is the letter that Microsoft sends in response to customers who

want to know what Microsoft support services are available for Visual

Basic.

This form letter is sent out from Microsoft Product Support Services

(PSS) as the following application note:

BL0356 "Visual Basic Support Service Letter"

This information applies to Microsoft Visual Basic version 1.00

programming system for Windows.

More Information:

Note: Page 1 of 2 is shown below for this reply letter. Page 2 of 2,

the "Product Assistance Checklist," is shown in a separate article

found by querying using the following words:

product and assistance and checklist

BL0356 "Visual Basic Support Service Letter"

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

Dear Visual Basic Customer:

Thank you for contacting us regarding Microsoft Visual Basic

Programming System for Windows. Although we are unable to respond to

technical questions by letter (unless solicited by Microsoft), we will

forward your questions to our development team. This procedure

provides developers with customer feedback, which will make

Microsoft's products even better. For fast answers to your technical

questions, you may contact Microsoft directly using the following

support services:

1. Microsoft Visual Basic startup service: (206) 646-5105

8 AM to 5 PM Pacific Time, Monday - Friday (except holidays)

Microsoft is committed to getting you "up and running" with Visual

Basic. On this phone line, a technician will assist you with setup

and installation questions, and provide information on system

requirements, product functionality, and navigating the Visual

Basic environment. Product suggestions and problem reports are

also welcome on this line. This service is free (but normal long-

distance charges are billed by your phone company).

2. Microsoft OnCall(TM) for Visual Basic:

(900) 896-9876 or (206) 646-5106

Extended hours: 6 AM to 6 PM Pacific Time, Monday - Friday (except

holidays)

For "how-to" programming assistance, priority support is available

through this fee-based service. At OnCall for Visual Basic,

technicians will answer questions about writing and debugging code,

fine-tuning programs, error trapping and handling, creating custom

controls, and calling the Windows API from Visual Basic. The rate

for OnCall service is $2 per minute at (900) 896-9876 (billed by

your phone company).

If you are blocked from dialing our 900 phone number, please call

(206) 646-5106, where we charge a credit card fee of $20 per call.

Only Master Card, VISA, and American Express credit cards are

accepted.

3. Microsoft AutoAnswer for Visual Basic: (206) 646-5107

Available 24 hours a day, 7 days a week

The AutoAnswer automated voice system provides prerecorded answers

to the most commonly asked questions about Visual Basic.

AutoAnswer also provides a voice mail system that allows you to

leave a message with comments on Visual Basic or on Microsoft

Product Support Services. The AutoAnswer service is free (but

normal long-distance charges are billed by your phone company).

The AutoAnswer system is updated periodically.

4. CompuServe Information Service: VBasic Forum, and the Microsoft

Knowledge Base

User feedback and Microsoft technical support are available on the

Microsoft Forum on CompuServe Information Service (CIS), an

independent electronic information service that provides a medium

for public discussion of Microsoft products. CompuServe also

provides access to the Microsoft Knowledge Base, which contains

descriptions of known problems and answers to commonly asked

questions. For additional information about CompuServe, please

call (800) 848-8990.

5. For more information on other comprehensive fee-based technical

support options available from Microsoft, call (800) 443-4672.

Thank you for using Microsoft Visual Basic,

Blain Barton

Basic Languages Team Manager

Microsoft Product Support Services BL0356, 5/20/91

 

Knowledge Base

Title: Declare Currency Type to Be Double When Returning from DLL

Document Number: Q72274 Publ Date: 30-MAY-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

When using Visual Basic, if you want to pass a parameter to a DLL

routine, or receive a function return value of type Currency from a

DLL routine written in Microsoft C, the parameter or function returned

should be declared as a "double" in the C routine.

Note that C does not support the Basic Currency data type, and

although specifying the parameter as type "double" in C will allow it

to be passed correctly, you will have to write your own C routines to

manipulate the data in the Currency variable. For information on the

internal format of the Currency data type, query using the following

words:

Basic and Currency and internal and format

This information applies to the Microsoft Visual Basic programming

system version 1.00 for Windows.

More Information:

When creating a DLL function that either receives or returns a

Currency data type, it may be useful to include the following

declaration:

typedef double currency;

Based on this typedef, a sample DLL routine to return a currency value

might be declared as follows:

currency FAR pascal foo(...);

 

Knowledge Base

Title: PR Microsoft Announces Visual Basic at Windows World '91

Document Number: Q72312 Publ Date: 22-MAY-1991

Product Name: Microsoft News Releases

Product Version:

Operating System:

Microsoft Announces Visual Basic at Windows World '91

General-Purpose, High-Productivity

Programming System for Microsoft Windows

ATLANTA -- May 20, 1991 -- Microsoft today announced Microsoft(R)

Visual Basic(TM) programming system at the Windows World '91 industry

trade show. Visual Basic is a graphical application development system

for Microsoft Windows(TM) graphical environment version 3.0 that

combines visual design tools with a powerful, general-purpose

programming language and Windows .EXE compiler. It provides a simple

solution to the complex task of creating real Windows-based software

applications.

"We set out to create the fastest, easiest way to program for the

Windows environment," said Bill Gates, Microsoft founder and CEO. "My

goal from the start was to make developing Windows applications as

easy and natural as possible. We also wanted this tool to appeal to a

broad spectrum of people interested in programming for Windows -- from

professional corporate programmers and consultants solving business

problems to independent software vendors and casual programmers."

Visual Basic programming system combines a rich, event-driven

programming model with the world's most widely used programming

language in a tightly integrated package. General development for the

Windows environment is faster than ever. The Visual Basic programming

system provides visual user-interface design capabilities with

powerful general-purpose programming tools, making it easy for any

programmer to create compiled Windows .EXE files that can be freely

distributed without run-time fees or royalties of any kind.

"This is the most important software product of the year, if not the

decade," said Steve Gibson, president of Gibson Research Inc. "It's

the ultimate intellectual tool. Thanks to Visual Basic, both casual

and professional programmers can produce compelling and beautiful

results. Now it's easy to put together real Windows version 3.0

applications."

"We needed to create an application that incorporated Microsoft Word

for Windows and Microsoft Excel," said Craig Ellis, senior programmer

analyst, Reuters Information Systems. "Visual Basic was the tool to do

this. It filled our needs, allowed us to develop a fast and effective

application and cut our development time by more than half. It's a

fantastic product that allowed us to incorporate a family of Microsoft

products into one application."

The Visual Basic programming system can be used to develop any

Windows-based application, including corporate business systems, tools

and utilities, front ends to data (mainframe, server and local) or

commercial Windows software products. It is also useful for

integrating multiple Windows-based applications and for automating

software testing through dynamic data exchange (DDE).

Visual Basic programming system provides visual design tools for

creating the user interface components -- windows and dialogs -- of an

application. A full set of Windows interface components (including

command buttons, text fields, list boxes, pictures, drop-down menus

and file system controls) are created visually, without writing any

code. The forms engine for building the interface incorporates

technology acquired from Cooper Software. A powerful, structured

programming language is then used to add functionality to these

interface components, responding to events that are automatically

trapped by the system.

The Visual Basic language is a derivative of the Microsoft

QuickBasic(TM) modern programming system, modified for the graphical

environment and the event-driven programming language. It uses a

threaded p-code incremental compiler and source-level debugging tools,

including an interactive immediate window, in a tightly integrated

system.

Extensibility

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

Support is provided for DDE, the mechanism for exchanging data with

other Windows-based applications. The Visual Basic system also

supports dynamic link libraries (DLLs), which allow the user to

establish links with other Windows systems facilities and call the

Windows API or routines written in other languages and compiled into

DLLs. The control set itself can be extended by developers using C and

the Windows SDK and the Microsoft Visual Basic Control Development

Kit, available separately. This extensibility will provide the ability

to fully integrate new user interface components into the graphical

design and code development environment. Examples could include

multimedia, pen controls and data access.

Printed documentation and online Help provide step-by-step

instructions for writing programs. The online Help system provides

context-sensitive reference information and sample code that can be

copied and pasted into a Visual Basic program. An icon library of

approximately 400 designs and an icon editor written in Visual Basic

language are also included. "The built-in help is excellent," said Lee

Perryman, deputy director of Associated Press Broadcast Services in

Washington, D.C. "The debugging features are superb, and the controls

are rich and feature-packed. Because there is almost no learning curve

for users familiar with the Basic language, Visual Basic makes Windows

programming a snap."

Visual Basic programming system for Windows will be available in June

1991 for a suggested retail price* of $199. German and French versions

are expected to ship in August, with other foreign language versions

to follow.

The Visual Basic programming system runs in either the standard or

enhanced mode of Microsoft Windows graphical environment version 3.0

or higher. The system requirements include a personal computer using

80286 processor or higher; hard disk; mouse; CGA, EGA, VGA, 8514,

Hercules(R) or compatible display; MS-DOS(R) operating system version

3.1 or later and one or more megabyte of memory.

Microsoft Corporation (NASDAQ "MSFT") develops, markets and supports a

wide range of software for business and professional use, including

operating systems, network products, languages and applications as

well as books, CD-ROM products and hardware for the microcomputer

marketplace.

*Prices listed are U.S. suggested retail prices.

###

Microsoft, the Microsoft logo and MS-DOS are registered trademarks and

Microsoft QuickBasic, Visual Basic and Windows are trademarks of

Microsoft Corporation.

Hercules is a registered trademark of Hercules Computer Technology.

For pricing and availability outside the U.S., please contact your

local subsidiary.

 

Knowledge Base

Title: PR MS Announces Visual Basic Control Development Kit

Document Number: Q72313 Publ Date: 22-MAY-1991

Product Name: Microsoft News Releases

Product Version:

Operating System:

Control Development Kit Lets Developers

Extend Microsoft Visual Basic with New Controls

Redmond, Wash. -- May 20, 1991 -- Microsoft today announced the

Microsoft(R) Visual Basic(TM) Control Development Kit, a kit that

allows software developers to extend the capabilities of the Visual

Basic programming system by developing custom controls for the Visual

Basic Toolbox. Visual Basic is a general-purpose programming system

hosted within the Microsoft Windows(TM) graphical environment that

lets programmers quickly develop new applications for that

environment.

Custom controls created with the Control Development Kit can provide

new visual interface elements, trap events and add functionality --

just like the built-in controls that come with the product. Once the

custom controls are loaded into a project, they are available for use

along with the standard controls.

Standard Toolbox controls include such items as command buttons,

option buttons, text boxes, check boxes, scroll bars, timers and file

system controls. Possible custom controls that third parties could

develop with the Control Development Kit include controls for data

access, multimedia environments, and Microsoft Windows for Pen

Computing. For example, they might develop custom SQL Server controls

that trap messages from the server; animation, video and sound

controls for multimedia PCs; and controls for handwriting input and

recognition for the Windows for Pen environment. Custom controls are

written in C; developers using the Control Development Kit must also

be familiar with the Windows application programming interface (API).

"Visual Basic will make Windows programming much more accessible,

allowing millions of programmers to create their own Windows

programs," said Tom Button, product marketing manager for the

Microsoft applications programmability group. "Now, with the Control

Development Kit, third-party software developers can participate in

and help define this new opportunity. Visual Basic programmers will

also benefit from the development of custom controls, since these

controls will provide more options for application development."

Beta sites for the Control Development Kit are also enthusiastic about

the product. "I think Visual Basic is going to be a very successful

product -- and a key factor in its success is the fact that it's so

incredibly extensible," said Daniel Appleman, president of Desaware, a

software company based in San Jose, California. "With the standard

product, you get a set of built-in controls that are very useful; with

the Control Development Kit, you get the ability to add virtually any

control you want. And, once they've been added, the custom controls

are just as easy to use as the built-in ones."

The Visual Basic Control Development Kit includes 5.25- and 3.5-inch

disks, plus documentation. It requires the Visual Basic programming

system, the Microsoft Windows Software Development Kit (version 3.0 or

later) and the Microsoft C compiler (version 6.0 or later). The kit

will be available from Microsoft in June for $49.95* plus shipping,

handling and applicable sales tax.

Microsoft Corporation (NASDAQ "MSFT") develops, markets and supports a

wide range of software for business and professional use, including

operating systems, network products, languages and applications as

well as books, CD-ROM products and hardware for the microcomputer

marketplace.

*Prices listed are U.S. suggested retail prices.

###

Microsoft and the Microsoft logo are registered trademarks and Visual

Basic and Windows are trademarks of Microsoft Corporation.

For pricing and availability outside the U.S., please contact your

local subsidiary.

 

Knowledge Base

Title: PR Windows-Based Visual Basic SDK for SQL Server Announced

Document Number: Q72315 Publ Date: 22-MAY-1991

Product Name: Microsoft News Releases

Product Version:

Operating System:

Microsoft Announces Windows-Based Visual

Basic Software Development Kit for SQL Server

ATLANTA -- May 20, 1991 -- Microsoft Corporation today announced

Visual Basic(TM) Library and Software Development Kit (SDK) for

Microsoft(R) SQL Server. Visual Basic programmers can quickly develop

rich Microsoft Windows(TM) graphical environment-based client-server

applications for Microsoft SQL Server, the company's intelligent

database server for PC networks.

Developers wanting to take advantage of the Microsoft Windows

graphical environment and Microsoft SQL Server can now use the Visual

Basic SDK to build line-of-business or decision support applications

that require a robust multiuser database server. Developers can also

use Visual Basic Library for SQL Server with the Database Gateway(TM)

from Micro Decisionware, Boulder, Colo., to build graphical

applications that tap DB2(TM) and other IBM(R) mainframe data sources.

"Visual Basic programming system is an exciting tool for building rich

Windows-based client-server applications on SQL Server," said Dwayne

Walker, group business manager, server applications group at

Microsoft. "For some time now, our customers have been asking for such

a tool to develop prototypes and custom applications around SQL

Server."

Visual Basic Library for SQL Server is built on the standard SQL

Server application programming interface (API) called DB-Library(TM).

To date, Microsoft has provided language support for C, Basic, and

COBOL. Visual Basic Library for SQL Server adds another language to

the list of those that can be used to develop applications for SQL

Server.

Visual Basic Library for SQL Server will be available as a Software

Development Kit by June 30, 1991. The product will contain the

programming libraries, a preliminary documentation set and a copy of

Visual Basic programming system. It will be available directly from

Microsoft for $495*.

The Visual Basic system is a graphical application development system

for Microsoft Windows graphical environment version 3.0 that combines

visual design tools with a powerful, general-purpose programming

language and Windows .EXE compiler. It provides a simple solution to

the complex task of creating real Windows-based software applications.

Microsoft SQL Server is an intelligent client-server relational

database management system (RDBMS) for PC networks. Providing

capabilities previously the exclusive domain of mainframe and

minicomputer systems, Microsoft SQL Server brings high-end

performance, security, and data integrity to local area networks,

allowing data to be shared safely among many applications and users.

Microsoft SQL Server is supported by popular networks such as

Microsoft LAN Manager, Novell(R) NetWare(R) and IBM LAN Server.

Microsoft Corporation (NASDAQ "MSFT") develops, markets, and supports

a wide range of microcomputer software for business and professional

use, including operating systems, languages and applications, as well

as books, hardware and CD-ROM products for the microcomputer

marketplace.

*Prices listed are U.S. suggested retail prices.

###

Microsoft and the Microsoft logo are registered trademarks and Visual

Basic and Windows are trademarks of Microsoft Corporation.

Database Gateway is a trademark of Micro Decisionware.

DB-Library is a trademark of Sybase, Inc.

IBM is a registered trademark and DB2 is a trademark of International

Business Machines Corporation.

Novell and NetWare are registered trademarks of Novell, Inc.

For pricing and availability outside the U.S., please contact your

local subsidiary.

 

Knowledge Base

Title: PR Microsoft Visual Basic

Document Number: Q72316 Publ Date: 22-MAY-1991

Product Name: Microsoft News Releases

Product Version:

Operating System:

Microsoft Visual Basic

May 1991

Introduction

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

The Microsoft(R) Windows(TM) graphical environment offers many

benefits to end users -- ease of use, user interface consistency,

interapplication integration -- but poses new challenges for

programmers. Writing Windows applications poses a challenge to

programmers because the available development tools lack the very

combination of functionality and ease of use that the applications

themselves feature.

Tools for Developing Graphical Applications

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

Microsoft Windows applications make doing powerful things easy. The

Microsoft Visual Basic(TM) programming system creates applications

that tap into such Windows functionality as rich forms and controls,

pull-down menus, graphics and animation, dynamic data exchange (DDE)

and multi-tasking. These are difficult for Windows programmers using

traditional tools to develop, but very easy to achieve in the

Microsoft Visual Basic programming system. In general, software

development tools have resided at either end of a spectrum, and each

extreme forced developers to make tradeoffs. High-level tools allow

faster development, which is paid for in reduced flexibility and

control and greater runtime overhead. Low-level tools provide better

control and less overhead, but require more programming skill. Thus,

choosing a tool often involves making an undesirable compromise.

Microsoft Visual Basic: Real Windows Applications Really Fast

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

Microsoft Visual Basic programming system is a general-purpose

graphical application development system for the Microsoft Windows

environment that bridges the extremes of the tool spectrum described

above. The Visual Basic system addresses the need for a Windows

programming solution that is both serious and easy to use. It is

specifically designed to accelerate Windows version 3.0 development by

harnessing the power of the graphical environment to make mainstream

programmers more productive. Visual Basic helps programmers create

real Windows applications real fast. Extremely easy to use, it is the

ultimate productivity tool.

Visual Basic Key Features

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

The following is a description of the key features of the Microsoft

Visual Basic programming system.

Visual Design Tools for the User Interface

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

The Visual Basic system offers rich design tools that enable the

visual components of an application to be designed with drawing tools.

No code is required to create graphical user interfaces. Programs are

designed, created and run within the target Windows environment.

With Visual Basic programming system, windows and dialog boxes are

designed visually by selecting a tool from the Toolbox of controls and

then placing and sizing them on a form. All the Windows controls are

included in the Toolbox: command buttons, option buttons, check boxes,

simple and drop-down list boxes and combo boxes, text fields, labels

(static text), pictures (that can display icons, bitmaps, Windows

metafiles and programmatic graphics), Frame (to visually and

functionally group controls), Timer (that responds to the system

clock), scroll bars, and file system controls (drives, directory and

file list boxes). These controls have the appearance and behavior of

Windows controls such as three-dimensional command buttons that push

in and out, scroll bars that scroll, and edit fields that accept text

input and support cutting and pasting without writing any code.

Visual design tools are also used to set the attributes of a form's

appearance and behavior, from within the Visual Basic environment. The

Property Bar provides a list of available properties for each type of

control. A color palette offers a visual way to assign color

properties. Menus, complete with access keys and accelerators, are

created in outlining fashion in a menu design window. A project or

application can include many forms.

A Structured, Powerful Programming Language

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

The Visual Basic language is a powerful, structured, general-purpose

programming language. It is a derivative of the Microsoft

QuickBasic(TM) modern programming system. Visual Basic language offers

all the modern programming structures such as Subs and Functions,

Block If...Then...Else..., Select Case, Do While/Until, For/Next and

error trapping with an easy-to-learn syntax.

An Event-Driven Programming Model

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

The Visual Basic system introduces a high-level, event-driven

programming model that is especially suited for programming in a

graphical environment. Events such as mouse clicks and key presses are

automatically detected and processed by the system. The Visual Basic

programmer doesn't need to deal with event trapping or Windows message

dispatching and can simply tell the Visual Basic application how to

respond to a specific recognized event on a particular form or

control. The Visual Basic system's visual design tools, combined with

its event-driven nature, free the programmer to think of how the

application should look and behave, instead of having to concentrate

on lower-level system events or coding the user interface.

A Fast, Responsive Coding and Debugging Environment

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

The Microsoft Visual Basic programming system's combination of an

intuitive front-end building tool with an easy-to-learn programming

language creates a highly productive development environment.

Further productivity is realized by the system's threaded p-code

incremental compiler, a technology first introduced in Microsoft

QuickBasic programming system version 4.0 in 1987. Each line of code

is automatically parsed and incrementally compiled as soon as it is

typed in. Syntax errors are trapped immediately, alerting the

programmer to any syntax problem. The incremental compilation allows a

very fast transition from Design mode to Run mode. Break mode is also

available when the program encounters a runtime error or a breakpoint

in the code. The programmer can then single-step or procedure-step

through the application. The programmer also can set the next

statement to be executed anywhere within a procedure. An Immediate

window lets the programmer interact with the application while it is

temporarily suspended in the running state. The programmer can check

or even change the value of a variable, or enter any valid line of

code, which is directly executed without affecting the source code.

The programmer can then copy code entered in the Immediate window to

the Code window, to be included in the program's source code. This

revolutionary technology, first introduced in Microsoft QuickBasic

system version 4.0, is the threaded p-code incremental compiler.

For additional productivity, help is readily available in both online

and printed form. A detailed computer-based tutorial gets the user up

and running fast, and manuals (Programmer's Guide and Language

Reference) provide further training and reference materials. Context-

sensitive online Help provides readily available reference information

on the programming language and environment. Code examples from Help

can be copied and pasted to an application's source listing.

The Ability to Create Real Windows .EXE Files

When a program is designed, coded, debugged and fully functional, the

programmer simply chooses Make EXE File from the File menu to create

an .EXE file that can be freely distributed, without any royalties or

runtime fees. .EXE files can have all the features generally

associated with Microsoft Windows programs, such as multiple windows,

pull-down menus, standard controls (command buttons, text fields,

option buttons), graphics and icons, drag-and-drop and DDE.

Interoperability and Extensibility

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

Microsoft Visual Basic programming system gives programmers access to

DDE and dynamic link libraries (DLLs) for interoperability and

extensibility with other applications. Interapplication communication

and integration is available via DDE. Visual Basic applications can be

DDE clients, servers or both. The environment offers high-level DDE

(paste-link) as well as programmable DDE in the language. Visual Basic

environment includes a rich set of DDE events (LinkOpen, LinkClose,

LinkExecute, LinkError), properties (LinkMode, LinkTopic, LinkItem,

LinkTimeout), and methods (LinkExecute, LinkPoke, LinkRequest,

LinkSend).

Visual Basic programmers can access external routines in DLLs,

including directly calling the Windows API (applications programming

interface). This is accomplished with a very straightforward syntax. A

one-line Function or Sub Declaration is all that is required to use an

external DLL routine as though it were built into the Visual Basic

system's language.

Users can gain powerful additional functionality by extending the

Microsoft Visual Basic development environment with custom controls.

Microsoft has separately announced the Visual Basic Control

Development Kit, which allows Windows developers to create extensions

to the Visual Basic system. Custom controls can have predefined

properties and events and some built-in functionality, just like the

standard controls in the Visual Basic Toolbox. A Visual Basic

programmer can load a custom control into a project, then assign

properties and write code for it just as though it were a built-in

control. Custom controls, like the standard ones, can trap events and

call the appropriate event procedures written in Visual Basic

language. This mechanism allows the Visual Basic environment to be

extended in many different ways, providing custom user-interface

components and specialized functionality such as multimedia, data

access or communications capabilities.

Visual Basic For High Productivity

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

Visual Basic programming system is designed to make Windows

application developers more productive regardless of skill level or

application complexity. Its tightly integrated graphical development

environment helps move applications from concept to executable code in

the shortest possible time.

The Visual Basic User

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

Users of the Microsoft Visual Basic system have the common task of

creating Windows applications, although they come to it with different

backgrounds and skills. They are professional programmers working with

small ISVs, VARs and system integrators; part-time programmers,

including engineers, scientists, analysts and educators; corporate

development staff and MIS professionals; and general PC "power users"

who want to create their own Windows applications. Visual Basic system

doesn't require programming experience, but it is helpful if the user

is familiar with general programming concepts. Anyone who has written

a macro or batch file, or has programmed in any high-level language,

can be productive very quickly with Microsoft Visual Basic. Using the

Visual Basic system, programmers can carry out a variety of tasks,

including writing standalone GUI applications; integrating

applications; developing application front ends, utilities or tools,

and graphical display-oriented programs; and prototyping.

Summary

-------

As Microsoft Windows grows in popularity, development environments are

naturally evolving toward graphical hosts, allowing programmers to

realize the productivity benefits of the graphical user interface.

Microsoft Visual Basic programming system is a low-cost (under $200

U.S. suggested retail price) Microsoft Windows-hosted and targeted

development tool that uses an event-driven programming model. It

offers high-level visual design tools to help programmers develop

interfaces. A graphical tool for graphical systems, the Visual Basic

programming system provides a simple solution to the otherwise complex

task of creating and integrating real Windows applications. It is the

only general-purpose, high-productivity programming system for the

Microsoft Windows environment.

###

Microsoft and the Microsoft logo are registered trademarks and Visual

Basic, Windows and Microsoft QuickBasic are trademarks of Microsoft

Corporation.

For pricing and availability outside the U.S., please contact your

local subsidiary.

 

Knowledge Base

Title: PR MS Visual Basic for Windows Wins Overall "Best of Show"

Document Number: Q72561 Publ Date: 30-MAY-1991

Product Name: Microsoft News Releases

Product Version:

Operating System:

Microsoft Visual Basic for Windows Wins Overall

"Best of Show" at COMDEX/Spring and Windows World

REDMOND, Wash., -- May 29, 1991 -- "Microsoft Visual Basic represents

the "best of the bests" in a field of hundreds of new introductions at

COMDEX and WINDOWS WORLD," said Fred Langa, editor in chief of BYTE

magazine. Show organizers -- The Interface Group and BYTE magazine

editors -- selected the Visual Basic(TM) programming system as the

most exciting new product which will have the most industry impact.

The Visual Basic system also received the "Best of Spring" award for

the Best Windows(TM) Utility. The Visual Basic programming system is a

graphical application development system for Microsoft(R) Windows

graphical environment version 3.0, and combines visual design tools

with a powerful, general-purpose programming language and Windows .EXE

compiler.

The Visual Basic system was introduced May 21, 1991, at a press

conference attended by more than 600 corporate customers, developers

and journalists. Microsoft founder and CEO Bill Gates forecasts that

many more thousands of Windows applications will be written in the

Visual Basic language. Forty-five independent software developers

announced and demonstrated more than 60 products ranging from custom

controls to add-on DLLs for data access and multimedia applications.

Charles Stevens, general manager of the Microsoft data access business

unit, said "Our goal was to make creating real Windows applications

incredibly easy and fast. This award represents an affirmation of our

strategy of combining a rich set of visual design tools with a

powerful, event-driven programming language to achieve just that.

"We also appreciate the feedback from our customers, independent

software vendors and beta sites that helped us build the product they

wanted and which continue to guide our future directions."

Visual Basic programming system for Windows will be available in June

1991 for a U.S. suggested retail price of $199. German and French

versions are scheduled to ship in August, with other language versions

to follow.

Microsoft Corporation (NASDAQ "MSFT") develops, markets and supports a

wide range of software for business and professional use, including

operating systems, network products, languages and applications as

well as books, CD-ROM products and hardware for the microcomputer

marketplace.

###

Microsoft and the Microsoft logo are registered trademarks and Visual

Basic and Windows are trademarks of Microsoft Corporation.

For pricing and availability outside the U.S., please contact your

local subsidiary.

 

Knowledge Base

Title: How to Create Flashing/Rotating Rubber-Band Box in VB

Document Number: Q71489 Publ Date: 17-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Several programs, such as Excel, create a flashing border (which

appears to rotate) when selecting items of the windows when using the

Edit Copy selection of the menu system. You can create a flashing,

rotating border with the DrawMode and DrawStyle properties of a Visual

Basic form.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

By drawing a dashed line on the form and then within a timer event

creating a solid line on the dashed line with DrawMode set to INVERSE,

you can create a special effect of a flashing border that appears to

rotate.

You can draw a rotating rubber-band box as follows:

1. Draw a line using:

DrawStyle = 2 {Dot}

2. Save the [form|.DrawMode and the [form|.DrawStyle.

3. Set the [form|.DrawMode = 6 {Inverse}.

4. Set [form|.DrawStyle = 0 {Solid}.

5. Draw the same line as in step 1.

6. Reset the properties saved in step 2.

7. Delay some time interval.

8. Repeat starting at step 2.

The following code demonstrates the rotating (flashing) border.

Pressing the mouse button and then dragging the cursor some distance

will create a dotted line. Releasing the button will display a

rotating rubber-band box.

In VB.EXE, create a form called Form1. On Form1, create a timer

control with the name Timer1 and with an interval of 100.

Duplicate the following code within the general declaration section of

your code window:

Const INVERSE = 6 'Characteristic of DrawStyle property(Inverse).

Const SOLID = 0 'Characteristic of DrawMode property.

Const DOT = 2 'Characteristic of DrawMode property.

Const TRUE = -1

Const FALSE = 0

Dim OldX, OldY, StartX, StartY As Single

Add the following code in the appropriate event procedures for Form1:

Sub Form_Load ()

'* Must draw a dotted line to create effect. Load a bitmap. Not

required but shows full extent of line drawing.

DrawStyle = DOT

End Sub

Sub Timer1_Timer ()

SavedDrawStyle% = DrawStyle

'* Solid is need to create the inverse of the dashed line.

DrawStyle = SOLID

'* Invert the dashed line.

Call DrawLine(StartX, StartY, OldX, OldY)

'* Restore the DrawStyle back to what it was previously.

DrawStyle = SavedDrawStyle%

End Sub

Sub Form_MouseDown (Button As Integer, Shift As Integer, X As

Single, Y As Single)

' The above Sub statement must be on just one line.

'* Don't add effect as you draw box.

Timer1.Enabled = FALSE

'* Save the start locations.

StartX = X

StartY = Y

'* Set the last coord. to start locations.

OldX = StartX

OldY = StartY

End Sub

Sub Form_MouseMove (Button As Integer, Shift As Integer, X As

Single, Y As Single)

' (The above Sub statement must be on just one line.)

'* If button is depress then...

If Button Then

'* Restore previous lines background.

Call DrawLine(StartX, StartY, OldX, OldY)

'* Draw new line.

Call DrawLine(StartX, StartY, X, Y)

'* Save coordinates for next call.

OldX = X : OldY = Y

End If

End Sub

Sub DrawLine (X1, Y1, X2, Y2 As Single)

'* Save the current mode so that you can reset it on

'* exit from this sub routine. Not needed in the sample

'* but would need it if you are not sure what the

'* DrawMode was on entry to this procedure.

SavedMode% = DrawMode

'* Set to XOR

DrawMode = INVERSE

'*Draw a box

Line (X1, Y1)-(X2, Y2), , B

'* Reset the DrawMode

DrawMode = SavedMode%

End Sub

Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single,

Y As Single)

' (The above Sub statement must be on just one line.)

StartEvent = FALSE

Timer1.Enabled = TRUE

End Sub

 

Knowledge Base

Title: VB Can Determine When a Shelled Process Has Terminated

Document Number: Q72880 Publ Date: 17-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

The Shell function initiates a process and returns back to the Visual

Basic program. The process will continue indefinitely until you decide

to stop it. Terminating the Visual Basic program will not cause the

shelled process to terminate. However, you may not want this behavior

if you want the Visual Basic program to wait until the shelled process

has finished before continuing. This article describes a method by

which a Visual Basic program will wait until a shelled process has

terminated.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

By using the Windows API functions GetActiveWindow and IsWindow, your

program can monitor the status of a shelled process. The API function

GetActiveWindow should be called immediately after the Shell function

to get the window handle of the shelled process. This will work

correctly only if you invoke the Shell function using a window style

with focus, that is, window style 1, 2, or 3. By continually calling

the API function IsWindow from within a While loop, you can cause the

Visual Basic program to wait until the shelled process has terminated.

The Windows API function IsWindow simply checks to make sure that the

window associated with the handle found with GetActiveWindow is still

a valid window.

The Visual Basic program below uses the Shell function to execute

Windows's Calculator accessory. The program is an example of how to

use the Windows API functions GetActiveWindow and IsWindow to wait

until a shelled process has terminated before resuming execution.

Code Example

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

'The Declare statements for Windows API functions need to be included

'in the Declarations section of the form or in the Global module.

'Assume that the following Declare statements are in the Declarations

'section of the default form (Form1).

Declare Function GetActiveWindow% Lib "User" ()

Declare Function IsWindow% Lib "User" (ByVal hWnd%)

'Below is the code contained within the Form_Load event procedure of

'the default form (Form1):

Sub Form_Load ()

x% = Shell("calc.exe", 1) ' Must Shell using a Window Style

' with focus, Window style 1, 2, or 3.

' You must immediately invoke GetActiveWindow%() for this

' technique to work:

ShellWindowHWnd% = GetActiveWindow%() 'Get the window handle

' of the shelled process.

While IsWindow%(ShellWindowHWnd%) 'Wait until the shelled

' process has been terminated.

x% = DoEvents() 'Process other Windows events.

Wend

End

End Sub

 

Knowledge Base

Title: How to Set Tab Stops Within a List Box in Visual Basic

Document Number: Q71067 Publ Date: 18-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

Visual Basic does not have any intrinsic function for creating

multi-column list boxes. To create multi-column list boxes, you must

call several Windows API function calls to set tab stops within the

list box. The tab stops create the multi-column effect.

This information applies to Microsoft Visual Basic Programming System

version 1.00 for Windows.

More Information:

Multi-column list boxes can be created by calling several Windows API

function calls. These functions are GetFocus, SendMessage, and

SetFocus.

The function GetFocus requires no parameters. This function will

return an integer value that represents the handle to the control. Use

GetFocus to get the handle to the control that currently has focus

upon entry to the event-handler procedure. After you store the handle

to the control that currently has focus, set the focus to the desired

list box.

After you set the focus to the list box, you must send a message to

the window's message queue that will reset the tab stops of the list

box. Using the argument LB_SETTABSTOPS as the second parameter to

SendMessage will set the desired tab stops for the multi-column list

box based on other arguments to the function. The SendMessage function

requires the following parameters for setting the tab stops

SendMessage (hWnd%,LB_SETTABSTOPS, wParam%, lparam)

where:

wParam% Is an integer that specifies the number of tab

stops in the list box.

lParam Is a long pointer to the first member of an array

of integers containing the tab stop position in

dialog units. (A dialog unit is a horizontal or

vertical distance. One horizontal dialog unit is

equal to 1/4 of the current dialog base-width unit.

The dialog base units are computed based on the

height and the width of the current system font.

The GetDialogBaseUnits function returns the current

dialog base units in pixels.) The tab stops must

be sorted in increasing order; back tabs are not

allowed.

After setting the tab stops with the SendMessage function, calling

PutFocus with the saved handle will return the focus back to the

control that had focus before the procedure call. PutFocus is the

Alias for the Windows API SetFocus function. The Windows API SetFocus

needs to be redefined using the "Alias" keyword because SetFocus is a

reserved word within Visual Basic.

To create multi-column list boxes within Visual Basic, create a list

box named Listbox1 on Form1. Declare the following Windows API

functions at the module level or in the Global section of your code as

follows:

Declare Function GetFocus Lib "user" () As Integer

Declare Function SendMessage Lib "user" (ByVal hwnd As Integer,

ByVal wMsg As Integer,

ByVal wp As Integer,

lp As Any) As Long

Declare Function PutFocus Lib "user" Alias "SetFocus"

(ByVal hWnd%) As Integer

Note: All Declare statements must each be written out on one line.

Also declare the following constants:

Const WM_USER = &H400

Const LB_SETTABSTOPS = WM_USER + 19

Include the following code within a SUB procedure:

Sub Form_Click ()

Static tabs(3) As Integer

hOldWnd% = GetFocus() 'Remember who had the focus.

list1.SetFocus 'Set the focus to the list box.

lbhWnd% = GetFocus() 'Get the handle to the list box.

'Set up the array of defined tab stops.

tabs(1) = 10

tabs(2) = 50

tabs(3) = 90

'Send a message to the message queue.

retVal& = SendMessage(lbhWnd%, LB_SETTABSTOPS, 3, tabs(1))

'Restore the handle to whoever had it.

R% = PutFocus(hOldWnd%)

'Place some elements into the list box.

list1.AddItem "Name" + Chr$(9) + "Rank" + Chr$(9) + "Serial#"

list1.AddItem "J. Doe" + Chr$(9) + "O-3" + Chr$(9) + "1234"

list1.AddItem "J. Blow" + Chr$(9) + "E-1" + Chr$(9) + "5678"

list1.AddItem "F. Smith" + Chr$(9) + "O-6" + Chr$(9) + "0192"

End Sub

 

Knowledge Base

Title: PR QBasic Interpreter Included with Each Copy of MS-DOS 5

Document Number: Q73245 Publ Date: 20-JUN-1991

Product Name: Microsoft News Releases

Product Version:

Operating System:

Modern Structured Programming Language,

QBasic Interpreter Included with Each Copy of MS-DOS 5

NEW YORK CITY -- June 11, 1991 -- Microsoft Corporation today

announced that Microsoft(R) MS-DOS(R) QBasic(TM) Interpreter, a

powerful, modern Basic interpreter, replaces GW-BASIC(R) interpreter

in the MS-DOS 5 operating system. The new MS-DOS QBasic Interpreter,

an interpreter-only subset of the award-winning Microsoft

QuickBasic(TM) compiler version 4.5, loads and runs most GW-BASIC

programs without modification while permitting far more powerful and

structured applications to be created. QBasic Interpreter is

completely upward-compatible with Microsoft QuickBasic compiler

version 4.5.

Basic, the world's most popular programming language, has been

included in the MS-DOS operating system since it first began shipping

in 1981. In MS-DOS 5, QBasic Interpreter replaces the 10-year-old GW-

BASIC interpreter.

"While our retail Basic products have grown and matured over the last

10 years, we've been looking for an opportunity to provide the same

modern syntax in the version that ships with MS-DOS, that we have in

our retail tools," said Mike Maples, vice president of applications at

Microsoft. "GW-BASIC and BASICA have been the first look at

programming for many computer users. We're excited that beginning

programmers, students and others interested in doing some casual

programming will now have a fully structured, modern programming

language to use -- MS-DOS QBasic Interpreter."

"More than 6 million PC users in the U.S. alone have used Basic in the

past year," said Charles Stevens, general manager of the Microsoft

data access business unit. "Our research shows that more people, both

professional programmers and average computer users, know Basic than

any other programming language. Microsoft now offers a complete line

of compatible Basic development tools for DOS*, from MS-DOS QBasic

Interpreter to Microsoft QuickBasic compiler to Microsoft Basic

professional development system. These are specifically tailored to

different customer segments, from the casual programmer and student to

the professional developer."

A Powerful Programming Tool

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

MS-DOS QBasic Interpreter, like other Microsoft Basic products, uses

the modern Basic language. Old commands and features such as GOTO,

GOSUB and line numbers are unnecessary (but are supported for backward

compatibility). MS-DOS QBasic Interpreter also supports true

procedures and functions with local variables, full parameter passing,

modern control-flow structures (including SELECT CASE, DO/WHILE

LOOP/UNTIL) nested block IFs, user-defined data types structures,

recursion, random, binary and sequential file I/O, and global error

handling.

To make learning the language easier, detailed online help is included

along with code examples that can be copied into a user's program. A

standard, easy-to-use interface using menus and dialog boxes supports

both the mouse and the keyboard and functions much like the user

interface in Microsoft Word version 5.5 or Microsoft Works. Other

features include break points to speed debugging and Search & Replace

for making large-scale changes.

Because Basic is an international favorite, the MS-DOS QBasic

Interpreter will be localized into several languages worldwide,

including Russian, French, German, Italian, Swedish, Dutch, Finnish,

Portuguese and Korean.

Product support is available from Microsoft OnCall(TM) for Basic** at

(900) 896-9999.

Programs written in QBasic language typically run six times faster

than those written in GW-BASIC or BASICA, and have more than twice the

capacity, 160 K versus 64 K. (Microsoft QuickBasic compiler and Basic

professional development system offer increased performance over MS-

DOS QBasic Interpreter with capacities of 640 K and 16 MB,

respectively.)

Available Books

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

More than a half-dozen books on MS-DOS QBasic Interpreter are

currently available or will be soon. Available now are Running QBasic

from Microsoft Press and QBasic Made Easy from Osborne/McGraw-Hill.

Scheduled for a July release are Using QBasic from Que Corporation,

Power QBasic and Teach Yourself QBasic from MIS Books. Howard W. Sams

& Company's First Book of QBasic and The Waite Group's QBasic Primer

Plus will be available in the fall.

Basic Products Available Today

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

In addition to the new MS-DOS QBasic Interpreter, Microsoft offers

several Basic products to meet the needs of different users:

o Microsoft Visual Basic(TM) programming system for the Microsoft

Windows(TM) graphical environment: announced on May 20 and now

shipping in quantities. Visual Basic system is the fast and easy way

to write applications for the Microsoft Windows graphical environment

version 3.0. It combines visual design tools with a powerful, event-

driven programming language and Windows executable program compiler to

enable any programmer to write full-featured Windows applications

quickly.

o Microsoft QuickBasic compiler version 4.5: the world's most popular

DOS-based Basic compiler/interpreter package is a superset of

MS-DOS QBasic Interpreter and adds the power to develop and compile

stand-alone executable programs that can be distributed freely. These

compiled .EXEs execute significantly faster than interpreted programs

and can access all the memory available under 640 K. Microsoft

QuickBasic compiler version 4.5 also has several additional debugging

tools such as a full range of watch variable features, multiple

modules and mixed-language programming support. Single-user and 10-

pack versions are available at a discount to students and schools for

teaching modern, structured programming.

o Microsoft Basic professional development system version 7.1: This

system is designed to offer the commercial application developer the

most powerful toolset available for creating finished DOS software

products fast. Basic version 7.1 includes the most powerful optimizing

Basic compiler available and generates the smallest and fastest

compiled .EXEs possible. It includes advanced memory management

features which make it possible to develop and compile Basic programs

as large as 16 MB using overlays, expanded memory, and far strings. It

also includes integrated data access in the form of Microsoft

Professional ISAM (indexed sequential access method) for data-

intensive business applications, the user interface toolbox for

creating professional user interfaces, and numerous other professional

language features and tools.

Microsoft Corporation (NASDAQ "MSFT") develops, markets and supports a

wide range of software for business and professional use, including

operating systems, network products, languages and applications as

well as books, hardware and CD-ROM products for the microcomputer

marketplace.

*"DOS" as used herein refers to the MS-DOS and PC-DOS operating

environments.

**$2.00 per call.

###

Microsoft, the Microsoft logo, GW-BASIC and MS-DOS are registered

trademarks and Microsoft QuickBasic, OnCall, QBasic, Visual Basic and

Windows are trademarks of Microsoft Corporation.

For pricing and availability outside the U.S., please contact your

local subsidiary.

 

Knowledge Base

Title: Huge Array Support in DLL for Visual Basic for Windows

Document Number: Q72585 Publ Date: 24-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

A dynamic-link library (DLL) is available that contains functions for

managing arrays larger than 64K from Microsoft Visual Basic version

1.0 for Windows. This DLL also provides the ability to create arrays

with more than 32,767 (32K) elements per dimension, and to redimension

arrays while preserving the data inside of the arrays.

This file can be found in the Software/Data Library by searching for

the filename BV0442, the Q number of this article, or S13082. BV0442

was archived using the PKware file-compression utility. When you

decompress BV0442, you will obtain the following files:

HUGEARR.DLL, HUGEARR.BAS, HUGEARR.C, HUGEARR.DEF, HUGEARR.H,

HUGEARR.TXT, MAKEFILE

These files are also available on disk in the application note "Huge

Array Support in DLL for Visual Basic for Windows" (BV0442) by calling

Microsoft Product Support Services.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Microsoft Windows, and to Microsoft Windows 3.0

Software Development Kit (SDK). HUGEARR.DLL is provided only as an

example, which you are free to modify, and Microsoft makes no

performance or support claims for HUGEARR.DLL or its associated files.

More Information:

To use the functions in HUGEARR.DLL, copy the declarations contained

in HUGEARR.BAS into your global module in Visual Basic and copy

HUGEARR.DLL to your Windows directory. The functions can then be used

like any other Windows DLL function.

HUGEARR.DLL allocates memory using the Windows API function

GlobalAlloc. This means that the largest array that can be allocated

is 1 MB in standard mode, and 64 MB in 386 enhanced mode for Windows.

The following routines are contained in HUGEARR.DLL. For a complete

description of the parameters and/or return values of these routines,

see Visual Basic's Declare statement for the routine in question in

the file HUGEARR.BAS. For additional notes on using these functions,

see the HUGEARR.TXT reference file.

1. HugeDim:

Dimensions an array and returns a handle to that array.

2. HugeErase:

Erases an array that was previously dimensioned using HugeDim.

3. HugeRedim:

Redimensions an array created with HugeDim to a different size.

4. GetHugeEl, SetHugeEl:

Gets or sets the contents of the specified array element in a given

huge array.

5. HugeInt, HugeLong, HugeSingle, HugeDouble, HugeCurrency:

Functions that return a value from a specific element in a huge

array of the type corresponding to the function name (Integer,

Long, Single, Double, or Currency data type.)

6. HugeUbound:

Returns the upper bound of a given huge array.

7. NumHugeArrays:

Returns the number of free huge array handles available.

References:

HUGEARR.DLL is written in Microsoft C, and the C source code is

provided in HUGEARR.C and HUGEARR.H. Advanced programmers can

optionally modify and rebuild HUGEARR.DLL by using the Microsoft C

Compiler version 6.0 or 6.0a and DLL libraries from the Microsoft

Windows 3.0 Software Development Kit (SDK), and by running NMAKE.EXE

with the enclosed MAKEFILE. The MAKEFILE tells LINK.EXE to use the

enclosed linker definition file, HUGEARR.DEF.

 

Knowledge Base

Title: Wrong Default Path After Drive Error, VB Open/Add File Dialog

Document Number: Q72878 Publ Date: 25-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

When you choose the Open Project or Add File option from the File menu

in the VB.EXE environment, and you get an error accessing a disk

drive, Visual Basic incorrectly stays logged onto the failed drive

path (even though the previous path is displayed), unless you

explicitly change the drive. (This behavior differs from the Open

command from the File menu in standard Windows applications, such as

Microsoft Word for Windows and Microsoft Excel for Windows.)

Microsoft has confirmed this to be a problem in Microsoft Visual Basic

programming system version 1.0 for Windows. Microsoft is researching

this problem and will post new information here as it becomes

available.

To work around this problem, just change to a valid drive by typing a

path preceded by a valid drive letter, or by selecting a valid drive

letter with the mouse.

More Information:

To duplicate this problem, follow these steps:

1. Start Visual Basic (such as from the C:\VB\ subdirectory for the

following example).

2. From the File menu, choose Open Project or Add File. (The Open

Project or Add File dialog box lets you search for and select the

file you want.)

3. Make sure drive A is empty and open.

4. Select [-a-| from the dialog box. A message box will correctly

appear with the error message "Path Not Found:'' ". (What appears

to be one double quotation mark is really two single quotation

marks with nothing between them.)

5. Choose the OK button. Note that the current path, such as C:\VB

(displayed above the Directories box), is correctly shown to be the

same as before drive A was selected. The Files and Directories

boxes also correctly show the same files as before drive A was

selected. (So far, this behavior is the same as for the files

dialog box in standard Windows applications.)

6. Erase the information in the File Name field, and type the

following:

*.*

7. Choose the OK button.

8. The problem is that Visual Basic now incorrectly gives you the

"Path Not Found:'' " error message, which demonstrates that the

actual current drive fails to match the displayed path (C:\VB), and

Visual Basic is incorrectly attempting to access drive A again.

This behavior differs from standard Windows applications, such as

Microsoft Word for Windows and Excel for Windows, which don't give

an error at this point, and instead correctly show all (*.*) files

in the path (C:\VB) displayed in the dialog box.

To work around this problem, just change to a valid drive by typing

a path preceded by a valid drive letter, such as C:\VB\*.*, or by

selecting a valid drive letter, such as [-c-| with the mouse.

 

Knowledge Base

Title: Settings Box Is Hidden When Properties Bar at Bottom of Screen

Document Number: Q72881 Publ Date: 25-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

When the Properties bar is positioned at the bottom of the screen and

an enumerated property, such as FontName, is selected from the

Settings box, the FontName list is still displayed beneath the

Properties bar, instead of above the Properties bar, making the

FontName list essentially invisible. Because of this behavior,

Microsoft recommends leaving the Properties bar at the top of the

screen.

Note: The Properties bar's entry field is not a combo box, and does

not react as a combo box.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

When you open a combo box and the space below is insufficient to

display the drop-down list, the list will be displayed above the combo

box window. This is exactly how the combo box "Properties list box"

displays when the Properties bar is moved to the bottom of the screen.

Although the Settings box resembles a combo box, the Settings box is

actually an edit box and a push button. This window is not a combo box

because the push button can take on several functions. In some cases

the Settings box is disabled, and in some cases it invokes a pop-up

dialog box (for example, when you select the Picture property of the

Picture control). In other cases, such as for the FontName property,

the Settings box displays a Windows list box just under the Properties

bar. The location of the list box is determined by Visual Basic and

will always be displayed below the Properties bar.

Microsoft recommends leaving the Properties bar at the top of the

screen.

Reference:

Please refer to pages 38-39 of the "Microsoft Visual Basic:

Programmer's Guide" for version 1.0 for definitions of Properties bar,

Properties list box, and Settings box.

 

Knowledge Base

Title: Why VB Sub Might Stay in Proc: List Even After Code Deleted

Document Number: Q73270 Publ Date: 25-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

In a Visual Basic code window, if you want to delete the code for a

Sub...End Sub procedure (or Function...End Function procedure), you

must also delete the two or more blank lines (if any) following that

procedure, or else that procedure will still exist (in a blank code

window and in the Proc: box).

Microsoft has confirmed this to be a problem in Microsoft Visual Basic

version 1.0 programming system for Windows. We are researching this

problem and will post new information here as it becomes available.

To work around this problem, make sure to delete all blank lines in

the code window for the procedure that you want to delete.

More Information:

Steps to Reproduce Problem

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

1. Start Visual Basic (or select New Project from Visual Basic's File

menu if you are already in Visual Basic).

2. Double-click Form1, or press F7, to display the form's Code window.

3. Choose (general) from the Object: box, and enter the statement

Sub Sub1 in the (general) (declarations) code window, and press the

ENTER key. This causes Visual Basic to display the following Sub

procedure:

Sub Sub1()

End Sub

4. Press CTRL+END, or click to the blank line after the End Sub

statement.

5. Press the ENTER key to add a few blank lines after the End Sub

statement.

6. Using the mouse, select (highlight) from the Sub Sub1() statement

to the End Sub statement (but to duplicate the problem, don't

highlight the blank lines after the End Sub statement). From the

Edit menu, choose Delete, or press the DEL key, to delete the

selected text.

7. Now the Proc: box still indicates that Sub1 exists as a procedure,

even though you just tried to delete it.

This problem is caused by the blank lines that were added after the

End Sub statement. To work around the problem, highlight and delete

the blank lines in the Sub1 code window, and the Sub1 procedure will

be properly deleted.

Additional reference words: 1.00

 

Knowledge Base

Title: Can't Get Help Within Any VB Dialog Box After an Error

Document Number: Q73119 Publ Date: 25-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: MS-DOS

Summary:

If you are in any Visual Basic dialog box and an error occurs, after

you dismiss the error message, pressing F1 to get help for the dialog

box will result in getting help on the previous error message, not

help on the dialog box.

Microsoft has confirmed this problem in Microsoft Visual Basic

programming system version 1.0 for Windows. We are researching this

problem and will post new information here as it becomes available.

More Information:

The following steps reproduce the error:

1. From the File menu, choose Save Project.

2. Enter an invalid filename for saving the project.

3. An error message will pop up telling you that the filename is

incorrect.

4. Press ENTER or double-click the OK button to dismiss the error

message.

5. Press the F1 key to get help on the Save Project dialog box.

6. The help message for the error will pop up, instead of help for the

dialog box.

This behavior is incorrect. The above steps should give you help for

the Save Project dialog box.

To work around the problem and get correct help on this dialog box,

dismiss the incorrect error message by double-clicking the control

button, and click CANCEL to get rid of the Save Project dialog box.

Now, choose Save Project from the File menu and press F1; the correct

help should display.

To get help on the error message, press F1 while the error message is

displayed.

 

Knowledge Base

Title: "Method Not Applicable..." with IsHidden Method in VB

Document Number: Q73154 Publ Date: 25-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

"IsHidden" was a method implemented in prerelease versions of Visual

Basic, but IsHidden was removed in the released version (because it

was no longer needed). However, using IsHidden as the name for a

variable, Sub, Function, or object can still give the following error

at run time:

Method not applicable with this Object

To work around this problem, avoid using the name IsHidden.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

The following example demonstrates the problem:

1. Within any event procedure, try the following:

Sub Form_Click()

print ishidden

End Sub

2. This gives a syntax error asking you to add a "(" to the method,

so continue by adding "()":

Sub Form_Click()

print ishidden()

End Sub

3. This results in the following format after pressing ENTER after

ishidden():

Sub Form_Click()

Print IsHidden()

Sub End

This is the format for a predefined method called IsHidden().

After following the steps above, you will receive a run-time error

"Method not applicable with this Object." This error results because

this particular method was not completely unimplemented from the beta

version.

Microsoft will consider completely removing this behavior of the

IsHidden name in a future version of Visual Basic.

 

Knowledge Base

Title: Make EXE with 40-Byte Title Displays Only 39 in Task List

Document Number: Q73155 Publ Date: 25-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

The following steps demonstrate a problem with Microsoft Windows 3.0;

the problem is not caused by Microsoft Visual Basic version 1.0:

1. Start Visual Basic.

2. From Visual Basic's File Menu, choose the Make EXE File command.

3. A Make EXE File dialog box will display. Enter a 40-character

filename in the File Name box.

4. Double-click the OK command button to exit the dialog box.

5. Minimize Visual Basic, go to the Windows Program Manager menu, and

choose File.

6. From the File menu, choose the Run option; the Run dialog box will

display.

7. Now enter that 40-character .EXE filename or path to the .EXE

filename in the Command Line box, and double-click OK when done.

8. The .EXE file will run correctly, but if you press CTRL+ESC to

bring up the Task List box, you will see that your .EXE filename

has been truncated to 39 characters (it no longer is 40

characters).

Microsoft has confirmed this problem in the Microsoft Windows version

3.0 operating system (buglist3.00). We are researching this problem

and will post new information here as it becomes available.

Additional reference words: 3.00

 

Knowledge Base

Title: Removing Disk During VB Setup Terminates SETUP, Missing Files

Document Number: Q73157 Publ Date: 25-JUN-1991

Product Name: Microsoft Visual Basic

Product Version: 1.00

Operating System: WINDOWS

Summary:

While running SETUP.EXE for Visual Basic, you may fail to copy all

files (or experience other problems) if you try to remove the disk

while the SETUP.EXE program is in progress.

Microsoft has confirmed this problem in Microsoft Visual Basic

programming system version 1.0 for Windows. We are researching this

problem and will post new information here as it becomes available.

To work around this problem, wait until SETUP indicates that 100

percent of the files are copied before removing the Visual Basic

floppy disk.

More Information:

Below is an example of one specific problem:

When running SETUP.EXE on Disk 1 of Visual Basic (using 1.2 MB 5.25-

inch disks), you can choose the option to install Visual Basic only.

SETUP's bar graph will start by displaying 4 percent done, and while

the large file C:\VB\VB.EXE is being copied, the disk drive light may

go off and you might assume that Visual Basic is finished running

SETUP. At this point you might (mistakenly) remove Disk 1. Then a

message tells you that SETUP is complete, and you can exit SETUP.

You have now installed VB.EXE, but you did not install some of the

other important files, such as VBRUN100.DLL, which is needed to run

your compiled applications under Windows version 3.0.

If you want to install Visual Basic by selecting Visual Basic only,

then you need to let Disk 1 complete its processing by waiting until

the bar displays 100 percent. If you let Disk 1 run to completion,

then the installed directory C:\VB should correctly contain the

following files:

VB.EXE

VB.HLP

VBRUN100.DLL

README.TXT

PACKING.LST

SETUP.EXE

DECOMP.DLL

CONSTANT.TXT

Additional reference words: 1.00 3.00