How to Limit User Input in VB Combo/Text Box; SendMessage API

ID Number: Q72677

1.00

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 that 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)

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(s):

"Programming Windows: the Microsoft Guide to Writing Applications for

Windows 3," Charles Petzold. Microsoft Press, 1990

"Microsoft Windows Software Development Kit: Reference Volume 1,"

version 3.0

WINSDK.HLP file shipped with Microsoft Windows 3.0 Software

Development Kit

Additional reference words: 1.00 3.00