My Stuff
I create a lot of software for use in development. Some of it I give away, and some, because it represents a significant investment in time and effort, is available in other ways. Some, like xCase2VPM, are sold products. Some, like products still in development, are given away with relevant trainging courses.. That is, those who take the training receive instruction on using the software, support in using it, and a license to use it freely in their work. The license does not give the user the freedom to give it to other developers to use: they must take the training, or if in the same company as a developer who has taken the training, be covered by a support contract. Those on a support contract also receive continuing updates and all new software, of course.
Here's some free stuff, and a list of non-free software I've created.
Free Stuff
| Name | File | Features |
| SubClass_VPM | subclass_vpm_psp.prg | Creates one or more intermediate subclasses between VPM* and PRO* in your application, or optionally for the VPM PRO* classes. Preserves existing classes in intermediate classlibs. Controllable by #DEFINEs in program. Based on work by Markus Winhard and Frank Camp, but does not implement "pathless" sub-classing (initial testing was disastrous <s>). There are routines called in this program that you will have to write yourself (acolscan() will be in VFP7), and code that integrates with the Source Control Kit you will probably want to strip out. |
| AddZIP | zipup.prg, ziplist.prg | Demo's use of AddZIP, by showing how to bundle all files in a PJX with a single command. A TIP shows how to use VPMCOM.DLL to hook AddZIP when viewing a listing. |
| Candidate Keys | candykeymsg.prg | Changes to form_toolbar.save, combined with this prg, and a particular method of defining the candidate key in VFP (taken care of you if you use xCase2VPM), allows the user-friendly use of candidate keys in your application. |
| TBCLSBRW | tbclsbrw.zip | The Class Browser is your friend. <s> Unzip this somewhere in your development path, and you will have the Class Browser available on your development toolbar. Not only that, but you will have 3 different options (previous classlib, previous class, find file) depending on whether you click the toolbar icon using the shift and ctrl keys or not. The code illustrates how to create addins for the Class Browser. A shameless advertisement for the Advanced VFP/VPM Online Training course, of course. <g> |
Non-Free Stuff
| Name | File | Features |
| xCase2VPM | xc2vpm.exe | Now a commercial product, available via the ProMatrix web site. Slices, dices, and chops your data structure. |
| ctListBar Wizard | ctLBWiz.APP | Demo's and facilites use of ctListBar in applications. |
| sfQuery Link | stonefield.vcx | Drop-on class fills in Stonefield Query with VPM DD information on-the-fly. To be implemented: use with filter method in VPM. |
| ctTree Drag-and-Drop | dbi_tech.vcx | Fixes drag-and-drop bug in ctTree in VFP, allowing within-tree DnD. |
| VPM DD Library | manager_h.vcx | Access the VPM DD through method calls in development and at runtime without disturbing the current data environment. |
| xCase DD Library | manager_h.vcx | Access the xCase DD through method calls in development (and atruntime if desired). |
| txtSmartDate | pspctrls.vcx | Date control works with date, datetime, and string controlsources, bound or unbound; has associated dropdown calendar, works with or without it. Smart formatting, smart keyboard shortcuts. |
| txtSmartTime | pspctrls.vcx | The time control to work with txtSmartDate. Under development: spnSmartTime, for mouse addicts. |
| 1:M Mover | cmdGoMover (pspctrls.vcx) | Drop-on command button (with mover image, no text) adds the Mover form to the Many part of a 1:M form where there is a defined set from which to choose. This allows ordering of the Many side, as well as selection from a set. |
| cblPickDir | pspctrls.vcx | Picks a directory, utilizing combobox control. |
| cblPickFile | pspctrls.vcx | Picks a file, utilizing combobox control. |
| cblPKPicker | pspctrls.vcx | Moves the record pointer in any alias you select; includes a builder to work with the s<app>dmvu entries created for you by xCase2VPM. Very handy for filtering a form where you don't want to emphasize this alias(), and a combo selector will work because there aren't that many choices. |
| grdRefresh | pspctrls.vcx | End refresh problems on related pagreframe while commenting out the .updatepages method, thus eliminating all those cumbersome refreshes. |
| grdMoverRecord | pspctrls.vcx | Works with txtGridOrder_h to allow numeric entry reordering of a grid_toolbar. Grids are difficult to |
| JS Engine | jsengine.js | Javascript engine that interacts with xWorks backend to move data from/to web pages without manual programming. |
| xWorks Engine | xmain.prg and associated prgs | Facilitates use of xWorks in quickly (both in programming time and run time) moving application data to and from web pages. This is superceded by ProSysPlus Server Pages, from which PSP evolved. |
| Utility Prgs | programs\*.prg | Multiple prgs to accomplish utility tasks, such as concatenating an array into a val_data style list and the opposite; writing the object path as a thisform... reference; determining the number of decimals and places in a numeric expression; etc, etc. |
| CRW Class | crw.vcx, associated prg and form class | Custom object that facilitates use of Crystal Reports, including previewing within a VFP window inside _screen. |
| Word Class | worduse.vcx | Custom object that facilitates use of Word integrated with VPM. To be implemented: automagic mailmerge based on current VPM ISA and temporary relations. |