Monday, March 19, 2018

New VFPX Projects

There are six new VFPX projects:

  • FastXTab is a replacement for VFPXTab.prg that creates cross-tab tables and cursors. This is an updated version of the class, originally created by Alexander Golovlev, by Vilhelm-Ion Praisach.

  • Win32API provides documentation for calling hundreds of Win32API functions from VFP. This project was generously donated to VFPX by Anatoliy Mogylevets from its original source,, which is no longer available. Tore Bleken converted the documentation into Markdown format.

  • Name Syntax Checker verifies the correctness and controls the translation of a string into a syntactically correct name of a particular domain (the name of VFP variables or fields, the name of XML elements, etc.). This and the rest of the projects are from António Lopes.

  • CalendarCalc provides a set of classes to perform specific calendrical processing tasks, help with internationalization, and build multicultural solutions.

  • CSVProcessor extends VFP capabilities of CSV file handling.

  • XML Library Set extends the VFP XML processing capabilities.

It’s great to see the VFP community continuing to provide features to our beloved development platform!

Friday, February 09, 2018

Fixing Chrome Freezing

I put my Windows 10 machine to sleep when I’m done for the day. For the past month or so, after awaking from sleep, Chrome would take forever (at least 2 minutes but usually a lot more) to refresh or open a web page. Restarting always resolved the problem but that eliminates the benefit of sleep mode. I’d Googled this issue before and hadn’t found any useful results but I tried again yesterday and found a suggestion that worked: turn off automatically detecting proxy settings. To get at that setting, click Start, type “settings” to bring up Windows Settings, choose Network & Internet, choose Proxy, and turn off Automatically Detect Settings.

Monday, February 05, 2018

Presenting Session on wwDotNetBridge

I’m presenting “Practical Uses of wwDotNetBridge to Extend Your VFP Applications” this Saturday 2018-02-10 at 10:00 EST for GRAFUG but anyone’s welcome to attend online: See for the description of the session.

Tuesday, January 23, 2018

Save the Dates for Southwest Fox 2018

Geek Gatherings LLC is officially asking you to save the dates for Southwest Fox 2018! The conference takes place October 18-21, 2018 at the San Tan Elegante Conference and Reception Center, the same great location as last year.

We choose speakers from the developer community based on their session proposals. We are always looking for new speakers. Watch the Call for Speakers page of the conference website; we'll post the Call for Speakers in late February.

As in prior years, we run a substantial risk in running the conference, primarily the tens of thousands of dollars we have to commit to the conference center. So, once again, we ask you to register for the conference before the July 1 deadline so we can make our go or no-go decision.

All the details about registration, speakers, sessions, and more will be available in May.

Special Request!!!

If there are any topics you hope will be covered this year, please send them to, right away.

Thursday, January 11, 2018

Stonefield Query for AccountMate webinars

Stonefield is presenting a webinar for AccountMate Business Partners on Stonefield Query for AccountMate and our new ClickBase competitive upgrade on Wednesday, January 17, 2018 at 1:00 Eastern. Register today on the AccountMate Business Partner web site.

We are also presenting a webinar for AccountMate users on Stonefield Query for AccountMate and our new ClickBase competitive upgrade on Wednesday, February 7, 2018 at 1:00 Eastern. Register today at

Tuesday, December 26, 2017

New White Papers for 2017

I added eight new white papers to my web site, all from sessions or articles I wrote in 2016: The new ones are:

  • Need Help? HTML Help Builder to the Rescue: Creating documentation for an application is something most developers dread. However, using West Wind Technologies' HTML Help Builder makes working on a help file almost fun!
  • Working with Microsoft Excel, Part 1: Microsoft Excel is one of the most widely-used applications ever. Because of its popularity, other applications often need to read from or write to Excel documents. This document, the first of two, discusses several mechanisms for outputting VFP data to Excel.
  • Working with Microsoft Excel, Part 2: Part 1 discussed several mechanisms for outputting VFP data to Excel. This document looks at ways to read Excel documents into VFP.
  • Advanced Uses for Dynamic Form: Dynamic Form is an under-used project in VFPX. Its ability to create forms quickly and dynamically isn't something every developer needs but if you need it, Dynamic Form is indispensable. In this document, Doug discusses some advanced uses for Dynamic Form, including data driving the markup code.
  • A Generic About Dialog: In "Advanced Uses for Dynamic Form", Doug discussed a couple of dynamic dialogs built with the assistance of Dynamic Form. In this document, he presents another dynamic, generic dialog, this time to display application information.
  • Processing Whole Words: Visual FoxPro has many text processing functions, including ATC() and STRTRAN(). However, these functions suffer from one flaw: they are character-based rather than word-based, so they can find substrings you may not have wanted. In this document, Doug presents replacement functions that word on whole words.
  • Creating Beautiful Web Sites Easily Using Bootstrap: Laying out a web page using HTML and CSS can be challenging. Botstrap is a free, open source framework for developing responsive, mobile-first web sites. It solves many problems web developers typically face and makes it easy to create beautiful web sites in record time, even for inexperienced developers. his document shows how to get started with Bootstrap, examines using its grid system to easily layout your page elements, and discusses how Bootstrap components add attractive and functional elements to your web site. We'll do a "makeover" of a real web site to show how easy is it to make it more attractive, functional, and mobile-friendly.
  • Lessons Learned in Version Control: Rick Borup's sessions at previous Southwest Fox conferences really helped me get started using version control for my application development. Since then, I've made a ton of mistakes and learned a lot of lessons the hard way. This document discusses what has evolved into my team's best practices for version control. It's intended for those who are familiar with version control but are looking for ideas about how to improve their processes.

Wednesday, November 22, 2017

Photos of German DevCon 2017

Jean Maurice from France took a lot of photos at the recent German DevCon 2017, November 16-18. They’re available in a Google Photos album at

Tuesday, November 07, 2017

Issue Accessing Microsoft Excel Spreadsheets

A Windows update on October 10, 2017 caused the Microsoft Excel ODBC driver (specifically, the “Microsoft Excel Driver (*.xls)” driver) to stop working correctly. Many of our customers use the ODBC driver to report on Excel data in Stonefield Query, including combining data stored in Excel with data stored in traditional databases such as Microsoft SQL Server in a single report, something Stonefield Query can easily do.

The solution is to use the “Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)” driver instead. However, this requires installing the latest Microsoft Access Database Engine components, which you can download from

Friday, November 03, 2017

2017 VFPX Administrators’ Award

Congratulations to Greg Green for being awarded the 2017 VFPX Administrators’ Award at Southwest Fox 2017. He was awarded this for his work on the VFPXWorkbookXLSX project, a tool that allows VFP developers to read from and write to Excel XLSX files quickly and easily without needing Excel installed. I’ve used VFPXWookbookXLSX for several years and can attest to it usefulness.

Monday, October 16, 2017

VFP's Weird File Naming Rules

Visual FoxPro was written for Windows, which is a filename case-insensitive operating system. So, startup.PRG and startup.prg are the same thing. However, there's a lot of inconsistency in how VFP names files:

  • If you don't specify the extension in the MODIFY command when you edit a file, edited files end up with uppercased extensions. For example, for files named form1.scx and form1.sct, MODIFY FORM form1 results in files named form1.SCX and form1.SCT when you save.

  • If you do specify the extension in the MODIFY command, the extension of the main file is set to whatever you specify and the extension of the memo file is uppercased. For example, for files named form1.scx and form1.sct, MODIFY FORM form1.scx results in files named form1.scx and form1.SCT when you save. If instead you specify MODIFY FORM form1.SCX, you end up with form1.SCX and form1.SCT.

  • The MODIFY command also respects the specified case of the stem name. For example, for files named form1.scx and form1.sct, MODIFY FORM Form1.scx results in files named Form1.scx and Form1.SCT.

  • The extension rules don't apply to VCT files: their extension doesn't change when a class is saved; if it was lowercase before, it's still lowercase after.

  • The extension rules are different for tables. The DBF extension doesn't change case when the table structure is changed or records added, modified, or deleted, or the table packed. CDX files are created with an uppercased extension but if you rename it to a lowercased extension, it isn't changed back to uppercase when you change the index structure, add, modify, or delete records, or PACK or REINDEX the table. FPT files are also created with an uppercased extension but if you rename it to a lowercased extension, it isn't changed back to uppercase when you add, modify, or delete records, or PACK the table. However, it is changed back to FPT if you modify the structure of the table.

Why is this important? Because if you use Git, you may have problems when VFP renames a file behind your back because Git is case-sensitive for filenames. Fortunately, it can be configured to be case-insensitive by executing these commands from a Command or PowerShell window:

git config --global core.ignorecase true
git config --system core.ignorecase true

Here's do a little experiment in VFP to test the case-insensitivity:

md c:\testcase
cd c:\testcase modify command startup.prg && enter some text, save, and close ! git init ! git add startup.prg ! git commit -m "Initial commit" modify command startup && notice no extension specified: when change text, save,
&&and close, file is renamed to startup.PRG ! git status --porcelain > status.txt modify file status && shows that startup.prg has been modified ! git commit startup.prg -m "Saved changes" ! git status --porcelain > status.txt modify file status && shows that startup.prg is no longer modified