The TextBoxEx control is a new version of the TextBox control showing some of the things
that the VB TextBox should be capable of by default. It is another excellent project
from Mike Gainer, although I should point out that I have modified some of the code so if
it doesn't work correctly then you should probably contact me!
How to Build a TextBox
The limitations of the VB TextBox control are quite surprising, and most of them have
survived from the original release of Visual Basic to the current version. The VB TextBox
control seems to ignore all interface enhancements that were added with Windows 95. Similarly,
the design hasn't grown to allow you the flexibility to change parameters at design time
rather than run-time.
The TextBoxEx control is a building block component demonstrating how easy it would be for
VB's coders to add extra features to the TextBox but how difficult it can be from Visual Basic
to create and host a control created directly from the base Win32 API. The additional design
features and options provided in this control are:
Design Time or Run Time style changes.
Rather than accepting limitations on when control styles can be changed this control provides complete flexibility and all styles can be changed,
including which ScrollBars are visible and whether the control is MultiLine or SingleLine, at any time.
Supporting All the TextBox's features.
The standard VB TextBox control can't fail but disappoint by
leaving out obvious and often required features such as support for Cut, Copy, Paste, Delete,Undo, Left and Right Margins, determining the Current Line, Current Column, First Visible Line, raising events when the text is scrolled, allowing text to be scrolled into view and so forth.
Customising the TextBox for Your App.
And then there is customisation. This TextBox can accept TabStops and vary the number of spaces per tab. You can control the response to the Tab and Shift-Tab key combinations to allow multi-line indent and outdent just
like VB. The Context Menu can be disabled. You can stop the control raising Change events for maximum speed.
Tough Code
Whilst this is a seriously flexible TextBox, it is primarily a great project for picking apart
if you want to learn about coding controls from first principles using the API in VB.
The code is the source for the Simpler UserControl Tab Trapping
DLL ,which provides a generic
mechanism to make a Window created using the CreateWindowEx API call
appear part of the TabStop Order in an ActiveX control host
(i.e. VB, IE, Word etc).
Other useful tips include using the IFont object to manage VB and API fonts at the same
time and intercepting the WM_CONTEXTMENU call to allow either a default or customised
right-click menu to be shown.
About The Sample Code
The demonstration sample is a half-assed effort to complete a useful replacement for Notepad.
I don't know about you, but basically the program I want is the same program as Notepad,
except it also has these features:
- VB style Find/Replace
- New Window
- Block Indent/Outdent with Tab
- Readable Print-Out, with headers, page numbers and user definable font.
- Auto-Complete.
Oh alright then, I'm only kidding about the Auto-Complete! The sample project provided with the
control is an attempt at moving towards my goal, in that it goes some way to achieve items 2 and 3,
but the implementation of the other items is either not present or rubbish.
It does provide a nice line-numbering side bar, though, based on an original implementation for a RichEdit
control by David Miles (thanks!).
Who wants to take on the challenge of the other two? And what about more features for simple,
quick, 64k TextEditor? We're obviously not going to take on CodeWright here, but the result could
be seriously speedy and intently focused. Send your ideas and code in to me
(steve@vbaccelerator.com) and we'll see what we can
do to build an Editor like its, erm, 1997!
|