JSTools Components:

This component was written to give me quick access to some Registry functions commonly used for applications. I often use this component in conjunction with a Menu item. The property can be read on startup, and the menu item set and Poof!, cool options for my users.
This component was written when I needed to know every mouse click and key press that was happening in Windows. This component implements a journal hook which traps *all* events. For safety and sanity, I have only exported the events for the specific things I was searching for. The component must be modified to export any other events. Enabled turns the hook on and off.
This component was written to give my forms a memory. I always like to give my programs the ability to remember where they were last on the screen, or to pop up centered over the main form, as well as store the options set by the end user (and sometimes even panel sizes, etc.) The task of writing registry procedures on ‘form create’, and ‘close query’ got too tedious so I wrote this component. I can drop it on a form, set the ‘save form’ position to True, and forget it. It also has the ability to store other settings [With the form] in the registry. Therefore, if you want to store other settings, just fill out the appropriate events and watch your forms begin to behave intelligently.
Being an old-timer (in computer years), I liked the look of the green and white-striped paper because I found it easy to follow across the page so I wrote a grid that allows me to have alternating colors in the rows. This grid also evolved to have sort routines; support types ‘String’, etc., for the columns; and to have the sorting of the grid (as well as justification) pay attention to the column type. This grid also supports some "data bound-like" functions because it accepts a ‘VariantArray’ in a function call to populate itself, and will return a ‘VariantArray’ when asked for its contents. It will also accept another ‘VariantArray’ to populate the columns with types, captions, and widths (Not too shabby!) The default colors are supposed to look like Microsoft Money.
Inherits from JSGrid, and is very similar, except it has a Fixed row at the bottom of the grid which contains the sum of all numeric rows in the grid.
Now that's a cool tool.
Do you ever get tired of writing ‘About’ boxes? I did. So I wrote a component to take care of this. Just drop it on the form and you have a decent ‘About’ box. You set a few properties, and you have an ‘About’ box with system information, version information, and give your users the ability to link to your web site, or send you compliments by e-mail. Additionally, all your programs will have a "Standard look and feel" with little or no work.

Note: uses JSFormTools, JSVersion, JSSysInfo components.
System information, sometimes it Is necessary for your program to function, some times it just gives that touch of class to polish off an application (like in the about screen). Either way you can spend lots of time pouring over API calls until you find the call you want, then do it all over again in six months. I decided to get off of that merry-go-round and just wrote a component.

Suggestions for needed enhancements to this component are appreciated (especially when accompanied with the API call to populate it).
The need for a large, fast log file that would allow me to debug a non-visual program drove this one. It has also been useful as a crude profiling tool. The log component is pretty self contained, just drop it on, set 'Active' to 'True' and start calling it's 'Log' procedure and pass in the string you want to write to the log. You can set 'FileName' to control the path and file name of the log, but the default will be the path and file name of the application (with a .log extension). The speed and size are achieved through the use of file pointers which are fast, and the maximum size should be around four Tera-Bytes. No, I never tested the max size (I would run out of disk space first (If anyone wants to donate a drive large enough for the testing, I'll gladly provide the results, and a free copy of these controls).
Do you ever write Share ware applications? I do. I got tired of writing custom "Register here” screens. (Besides- that isn't the fun part of programming :-). So I wrote a component to collect the information for me. Now I simply drop it on and call ‘Execute’ (just like a Standard Dialog) and all the necessary information is entered and ready for me to check the serial number--if that is the way this program is registered.
A nice splash screen that loads fast is a must for large or well- written programs, but these screens can be repetitive and cut & paste errors can be really embarrassing. (Imagine the ‘help’ e-mails that leaving the title of a different program on your screen may generate:-) So, I wrote a component, which you drop on your main form, set the Properties, and Voila instant splash screen.
I've seen and used a lot of these and wondered what would happen if I included one from someone else in a package for sale by me (Probably nothing good :-) So, I wrote a very simple one to use with the other components here and decided to go ahead and publish it since you might have a use for it...
Have you ever shipped a new version of a program only to have an immediate call from a customer to tell you the version on your ‘About’ screen hadn't changed? Worse yet, you’ve spent literally hours debugging over the phone only to discover that the customer ‘kind of copied’ some components from a new version over to a computer that had an older version of your program on it and that's why they called? JSVersion to the rescue!

This component retrieves the version information from your programs, and related programs and publishes these as properties. On complex programs, and version sensitive programs I use this component to check and make sure all my files have the same version stamp, and eliminate many ‘support’ requests before they even get to me.
Please visit my web site for a list of Properties, samples, and more information.