-
Notifications
You must be signed in to change notification settings - Fork 0
/
articles.json
1 lines (1 loc) · 73.4 KB
/
articles.json
1
[{"title":"A Deep Dive into the VFPX ThemedControls","folder":"A_Deep_Dive_into_the_VFPX_ThemedControls","description":"One of the coolest projects in VFPX is ThemedControls by Emerson Santon Reed (the 2009 Southwest Fox Ceil Silver Ambassador). The ThemedControls project consists of eight controls-ThemedButton, ThemedContainer, ThemedExplorerBar, ThemedForm, ThemedOutlookNavBar, ThemedTitlePageFrame, ThemedToolbox, and ThemedZoomNavBar-that allow you to provide the modern interface users expect in today's applications. This document looks at these controls in detail and shows how to use them in your own applications.","pdf_url":"Pub/ThemedControls.pdf","samples_url":"Pub/ThemedControlsSamples.zip"},{"title":"A File Open Dialog","folder":"A_File_Open_Dialog","description":"A File Open dialog is a better approach than having a long list of forms appear in the File menu. This article presents a reusable File Open dialog that supports grouping forms into different pages in a pageframe and uses ListView controls for a visually appealing display.","pdf_url":"Pub/Nov97.pdf","samples_url":"Pub/199711dhensc.zip"},{"title":"A Generic Import Utility, Part 1","folder":"A_Generic_Import_Utility_Part_1","description":"Data entry forms aren't the only way your users want to put data into their applications. Often, important data is stored in other applications, so you need a way to import that data into your application. This article, part 1 of a two-part series, presents a generic import utility you can add to your applications to provide import capabilities from a variety of data sources.","pdf_url":"Pub/200803dhen.pdf","samples_url":"Pub/200803dhensc.zip"},{"title":"A Generic Import Utility, Part 2","folder":"A_Generic_Import_Utility_Part_2","description":"Part 1 of this two-part series presented a set of classes making up a generic import utility you can add to your applications to provide import capabilities from a variety of data sources. Part 2 focuses on the user interface components.","pdf_url":"Pub/200805dhen.pdf","samples_url":"Pub/200805dhensc.zip"},{"title":"A More Flexible Report Designer","folder":"A_More_Flexible_Report_Designer","description":"This month, Doug presents a way to make the VFP Report Designer more flexible, such as customizing the pages of the properties dialogs without having to change ReportDesigner.APP.","pdf_url":"Pub/201011dhen.pdf","samples_url":"Pub/201011dhensc.zip"},{"title":"A New Beginning","folder":"A_New_Beginning","description":"The development world is moving to reusable components. As goes the world, so goes Doug's column. We'll start off the new \"Best Tools\" column with SFThermometer, a handy progress meter class.","pdf_url":"Pub/Aug97.pdf","samples_url":"Pub/199708dhensc.zip"},{"title":"A New IDE Add-on: FoxTabs","folder":"A_New_IDE_Add-on_FoxTabs","description":"FoxTabs provides easy access to all open windows in your VFP IDE. However, not only is it a great tool, it uses some very cool techniques to do its magic, including Windows message binding and event-driven object messaging.","pdf_url":"Pub/200603dhen.pdf","samples_url":"Pub/200603dhensc.zip"},{"title":"Access and Assign Methods in VFP","folder":"Access_and_Assign_Methods_in_VFP","description":"In my opinion, one of the most useful and powerful additions in Visual FoxPro 6 is access and assign methods. It may seem strange that something as simple as this can be considered powerful, but in this document we'll see some very compelling reasons to use these methods, including the ability to strongly type properties, automatically validate the values of properties, create read-only properties, and support collection classes.","pdf_url":"Pub/AccessAssign.pdf","samples_url":"Pub/AccessAssignSamples.zip"},{"title":"Adapt Your Cursors to CursorAdapters","folder":"Adapt_Your_Cursors_to_CursorAdapters","description":"The CursorAdapter class is one of the most important new features in VFP 8 because it provides an easy-to-use, consistent interface to remote data. In this month's article, Doug examines CursorAdapters and how they work. Next month, we'll take a look at some advanced uses of them.","pdf_url":"Pub/200210dhen.pdf","samples_url":"Pub/200210dhensc.zip"},{"title":"Adding IntelliSense to Your Applications","folder":"Adding_IntelliSense_to_Your_Applications","description":"IntelliSense is easily the best feature ever added to Visual FoxPro. It provides a greater productivity boost to VFP developers than anything added before or since. However, until VFP 9, it was restricted to the development environment. Now, IntelliSense is supported in a runtime environment as well. This document discusses why this is a useful feature for many types of application and shows you how to create a customized IntelliSense environment specific for your application. ","pdf_url":"Pub/AddingIntelliSensetoApps.pdf","samples_url":"Pub/AddingIntelliSensetoAppsSamples.zip"},{"title":"Advantage Database Server for Visual FoxPro Developer","folder":"Advantage_Database_Server_for_Visual_FoxPro_Developer","description":"Advantage Database Server is a full-featured, high-performance client/server database engine. Interestingly, it can use Visual FoxPro DBF files as its data store and provides a number of benefits over accessing these files directly. This document introduces Advantage and discusses how to access it from VFP applications.","pdf_url":"Pub/ADS.pdf","samples_url":"Pub/ADSSamples.zip"},{"title":"Ahoy! Anchoring Made Easy","folder":"Ahoy_Anchoring_Made_Easy","description":"The new event binding feature in VFP 8 makes it easy to have objects resize or move themselves when their container is resized. In this month's article, Doug shows how you can do it by simply setting a couple of properties.","pdf_url":"Pub/200306dhen.pdf","samples_url":"Pub/200306dhensc.zip"},{"title":"Application Security","folder":"Application_Security","description":"Most applications need a way to limit which users can run an application and which functions users can perform in the application. This article presents a set of tools for defining and maintaining application security. It also pulls together the reusable tools described in previous issues to provide a simple application framework.","pdf_url":"Pub/199804dhen.pdf","samples_url":"Pub/199804dhensc.zip"},{"title":"Base Classes Revisited","folder":"Base_Classes_Revisited","description":"Most VFP developers know you should never use the VFP base classes, but instead create your own set of \"base\" classes. It's time to blow the dust off the set of base classes Doug has discussed for the past six years and see how they can be revamped in VFP 8.","pdf_url":"Pub/200308dhen.pdf","samples_url":"Pub/200308dhensc.zip"},{"title":"Best Practices for Vertical Application Development","folder":"Best_Practices_for_Vertical_Application_Development","description":"While a vertical market application shares many of the same goals as a custom application, the bar is higher because the audience is both larger in volume and broader in scope, plus you usually have much less direct contact with the customer. This document examines some of the things to consider when designing and implementing a vertical market application.","pdf_url":"Pub/BestPracticesforVerticalApplicationDevelopment.PDF"},{"title":"Build Your Own Wizards","folder":"Build_Your_Own_Wizards","description":"Wizards provide an ideal way of holding your users hands through complex, multi-step tasks. This month's Reusable Tools column presents a set of classes you can use to build your own wizards.","pdf_url":"Pub/May98.pdf","samples_url":"Pub/199805dhensc.zip"},{"title":"Building Builders with BuilderD","folder":"Building_Builders_with_BuilderD","description":"BuilderD is a new data-driven builder technology that comes with VFP 6. This month, Doug takes a look at how BuilderD works and how you can create builders with it in record time.","pdf_url":"Pub/Mar99.pdf","samples_url":"Pub/199903dhensc.zip"},{"title":"Building Your Own Builders with BuilderB","folder":"Building_Your_Own_Builders_with_BuilderB","description":"Builders make it easy to set properties for objects at design time, which is especially handy for containers which you normally have to drill down into. Ken Levy's BuilderB tool makes creating your own builders almost a trivial job. ","pdf_url":"Pub/Dec97.pdf","samples_url":"Pub/199712dhensc.zip"},{"title":"Building a Builder Builder","folder":"Building_a_Builder_Builder","description":"Creating builders is a snap using enhancements to Ken Levy's BuilderD technology described in this month's article.","pdf_url":"Pub/199904dhen.pdf","samples_url":"Pub/199904dhensc.zip"},{"title":"Building and Using VFP Developer Tools","folder":"Building_and_Using_VFP_Developer_Tools","description":"In addition to being the best darn database management system available, VFP also gives us the ability to highly customize the interactive development environment (IDE). You can modify the menu, install new builders and wizards, implement developer toolbars, change the behavior of the Project Manager, and do lots of other things to make your IDE more productive. Even better is that all of this customization is done in the language we all know and love, so we don't have to have some C++ guru create add-ins for us. Even relatively inexperienced VFP developers can customize their environment to work the way they want. This document will show you how to create simple tools that increase productivity for you and your development team. We'll look at modifying the VFP wizards and builders to provide additional or customized features, and creating your own builders using the BuilderD technology included with VFP 6. ","pdf_url":"Pub/devtools.pdf","samples_url":"Pub/devtoolsSamples.zip"},{"title":"But It Works For Me!","folder":"But_It_Works_For_Me","description":"Figuring out why a user is getting different results than you are can be a frustrating, time-consuming task. This month, Doug looks at a way of instrumenting your application so you can quickly determine what is being executed and how long it's taking.","pdf_url":"Pub/200310dhen.pdf","samples_url":"Pub/200310dhensc.zip"},{"title":"CATCH Me if You Can","folder":"CATCH_Me_if_You_Can","description":"VFP 8 has structured error handling, featuring the new TRY ... CATCH ... FINALLY ... ENDTRY structure. This powerful new feature provides a third layer of error handling and allows you to eliminate a lot of code related to passing and handling error information. This month, Doug discusses structured error handling and shows how it fits in with a complete error handling strategy.","pdf_url":"Pub/200301dhen.pdf","samples_url":"Pub/200301dhensc.zip"},{"title":"COM Enhancements in VFP 7","folder":"COM_Enhancements_in_VFP_7","description":"This is last of a six-part series on language enhancements in VFP 7. This month's article focuses on those enhancements related to COM.","pdf_url":"Pub/Jun01.pdf","samples_url":"Pub/200106dhensc.zip"},{"title":"Christmas Stocking Stuffers","folder":"Christmas_Stocking_Stuffers","description":"Visual FoxPro has a lot more places to put code than FoxPro 2.x. This month's column examines the advantages and disadvantages of creating classes for library routines. It also looks at a replacement for FoxPro's GO command and shows how to make it more obvious that Visual FoxPro controls are read-only.","pdf_url":"Pub/Dec96.pdf","samples_url":"Pub/199612dhensc.zip"},{"title":"Collecting Objects","folder":"Collecting_Objects","description":"Collection classes can help you reduce the complexity of your applications by eliminating multi-column arrays or grouping related objects into one place. They can also help you create an interface to your applications that can be used by the outside world.","pdf_url":"Pub/Jul98.pdf","samples_url":"Pub/199807dhensc.zip"},{"title":"ComboBoxes are Looking Up","folder":"ComboBoxes_are_Looking_Up","description":"Most applications need a way for a user to select a lookup value for certain fields. In this, the first of a two-part article on reusable tools for managing lookups, Doug presents a combobox class for lookup selection and a form for maintaining lookup values.","pdf_url":"Pub/Oct98.pdf","samples_url":"Pub/199810dhensc.zip"},{"title":"Compression the Fast (and Cheap!) Way","folder":"Compression_the_Fast_(and_Cheap)_Way","description":"Need a way to compress and decompress files in your applications? VFP guru Craig Boyd has created a free library to zip and unzip files quickly and easily.","pdf_url":"Pub/201101dhen.pdf","samples_url":"Pub/201101dhensc.zip"},{"title":"Consuming XML Web Services in VFP 8","folder":"Consuming_XML_Web_Services_in_VFP_8","description":"XML Web services are becoming very important for application development, and VFP 8 makes it easier than ever to use them. This month, Doug explores consuming XML Web services in VFP applications, including how to use the new XML Web Service Builder to bind controls to XML Web services results with very little code.","pdf_url":"Pub/200307dhen.pdf","samples_url":"Pub/200307dhensc.zip"},{"title":"Cool Controls for Your Applications","folder":"Cool_Controls_for_Your_Applications","description":"This document examines some controls you can add to your applications to provide a cleaner or fresher user interface. Controls discussed include a splitter, a combobox that drops down to a TreeView control, object-oriented Microsoft Office-like menus, a 100% VFP code date picker control, a control for displaying \"balloon tips\", and a modern-looking progress bar control.","pdf_url":"Pub/CoolControls.pdf","samples_url":"Pub/CoolControlsSamples.zip"},{"title":"Cool Tools by Craig Boyd, Part II","folder":"Cool_Tools_by_Craig_Boyd_Part_II","description":"Doug Hennig continues his examination of cool tools provided to the VFP community by Craig Boyd.","pdf_url":"Pub/200605dhen.pdf","samples_url":"Pub/200605dhensc.zip"},{"title":"Cool Tools from Craig Boyd","folder":"Cool_Tools_from_Craig_Boyd","description":"Craig Boyd has produced some very cool tools for VFP developers. This month, Doug Hennig examines Craig's encryption library and splitter and progress bar controls.","pdf_url":"Pub/200604dhen.pdf","samples_url":"Pub/200604dhensc.zip"},{"title":"Cool Uses for ReportListeners","folder":"Cool_Uses_for_ReportListeners","description":"You've probably seen the demos showing the new ReportListener in VFP 9: dynamically formatted text, rotated labels, and so forth. But did you know report listeners can be used for a lot more than that? This practical session will show you all kinds of cool uses for report listeners, including hyperlinking text in reports, providing a \"live\" preview surface that can handle click events, finding and highlighting text, and more. ","pdf_url":"Pub/CoolUsesforReportListeners.pdf","samples_url":"Pub/CoolUsesforReportListenersSamples.zip"},{"title":"Create Modern Interfaces With VFP 7","folder":"Create_Modern_Interfaces_With_VFP_7","description":"It seems that every new version of Microsoft Office changes user interface standards. Whether you like it or not, your users expect your applications to keep up with this ever-moving target. Fortunately, VFP 7 adds new features that make it easier to create interfaces similar to Office 2000.","pdf_url":"Pub/Oct01.pdf","samples_url":"Pub/200110dhensc.zip"},{"title":"Create Your Own Property Editors","folder":"Create_Your_Own_Property_Editors","description":"VFP 9 makes it possible to create your own editors for custom properties of classes and forms. This month, Doug Hennig presents a framework for these editors, allowing you to focus on the editor itself rather than the plumbing necessary to hook in the editor.","pdf_url":"Pub/200507dhen.pdf","samples_url":"Pub/200507dhensc.zip"},{"title":"Creating ActiveX Controls for VFP Using .Net","folder":"Creating_ActiveX_Controls_for_VFP_Using_.Net","description":"ActiveX controls provide a way to add both functionality and a modern appearance to your VFP applications. Unfortunately, there are few new ActiveX controls these days, especially ones that take advantage of features in Windows Vista and Windows 7. On the other hand, the .Net framework comes with many attractive looking controls, and there's an entire industry devoted to providing even more. This document discusses techniques for creating ActiveX controls from .Net components so we can take advantage of these controls without having to convert our applications to .Net. ","pdf_url":"Pub/ActiveXControls.pdf","samples_url":"Pub/ActiveXControlsSamples.zip"},{"title":"Creating Explorer Interfaces in Visual FoxPro","folder":"Creating_Explorer_Interfaces_in_Visual_FoxPro","description":"Explorer-style user interfaces are among the most popular for today's applications. However, working with and integrating the controls necessary to implement an explorer interface can be challenging. This session presents a set of classes and techniques that makes short work of developing explorer interfaces for your applications. ","pdf_url":"Pub/ExplorerInterfaces.pdf","samples_url":"Pub/ExplorerInterfacesSamples.zip"},{"title":"Custom Classes","folder":"Custom_Classes","description":"This month's column uses great ideas from other applications to create some custom classes you can include in any application.","pdf_url":"Pub/Mar97.pdf","samples_url":"Pub/199703dhensc.zip"},{"title":"Custom UI Controls: SFComboTree ","folder":"Custom_UI_Controls_SFComboTree_","description":"Sometimes you need to display a list of items but don't have much room to do so. While a combo box is usually used in this case, it doesn't display a hierarchical list or support checkboxes for items. SFComboTree fits this need nicely.","pdf_url":"Pub/200909dhen.pdf","samples_url":"Pub/200909dhensc.zip"},{"title":"Custom UI Controls: Splitter ","folder":"Custom_UI_Controls_Splitter_","description":"Adding a splitter control to your forms gives them a more professional behavior and allows your users to decide the relative sizes of resizable controls.","pdf_url":"Pub/200907dhen.pdf","samples_url":"Pub/200907dhensc.zip"},{"title":"DBCX 2: The Quickening","folder":"DBCX_2_The_Quickening","description":"DBCX is a public domain data dictionary extension utility that allows you to define extended properties for database objects. However, it suffers from a number of shortcomings, the biggest one being performance. DBCX 2 is a complete rewrite of DBCX that adds speed and flexibility to this powerful tool.","pdf_url":"Pub/199808dhen.pdf","samples_url":"Pub/199808dhensc.zip"},{"title":"Data Handling Issues, Part I","folder":"Data_Handling_Issues_Part_I","description":"The ability to handle multiple sets of data is a frequent requirement in business applications. So is the management of primary key values for tables. In this first of a two-part article, Doug takes on these data handling issues and looks at the best way to deal them.","pdf_url":"Pub/OCT96.pdf","samples_url":"Pub/199610dhensc.zip"},{"title":"Data Handling Issues, Part II","folder":"Data_Handling_Issues_Part_II","description":"While field and table validation rules protect your tables from invalid data, they also make data entry forms harder to use. In this second of a two-part article, Doug looks at a solution to this problem. He also examines the use of multi-purpose lookup tables, and discusses how to take advantage of new data dictionary features in VFP 5.0.","pdf_url":"Pub/NOV96.pdf","samples_url":"Pub/199611dhensc.zip"},{"title":"Data Strategies in VFP: Advanced","folder":"Data_Strategies_in_VFP_Advanced","description":"In the \"Data Strategies in VFP: Introduction\" document, we examined the different mechanisms for accessing non-VFP data (such as SQL Server) in VFP applications: remote views, SQL passthrough, ADO, XML, and the CursorAdapter class added in VFP 8. In this document, we'll look at CursorAdapter in a lot more detail and discuss the concept of reusable data classes. In addition, we'll take a brief look at the new XMLAdapter base class and see how it can help exchange data with other sources, such as ADO.NET. ","pdf_url":"Pub/DataStrategiesAdvanced.pdf","samples_url":"Pub/DataStrategiesSamples.zip"},{"title":"Data Strategies in VFP: Introduction","folder":"Data_Strategies_in_VFP_Introduction","description":"There are a lot of ways you can access non-VFP data (such as SQL Server) in VFP applications: remote views, SQL passthrough, ADO, XML ... This document will examine the pros and cons of different mechanisms and discuss when it's appropriate to use a particular strategy. We'll also look at an exciting new technology in VFP called CursorAdapter that will make accessing remote data much easier than it is in earlier versions. ","pdf_url":"Pub/DataStrategiesIntro.pdf","samples_url":"Pub/DataStrategiesSamples.zip"},{"title":"Data-Drive Your Applications","folder":"Data-Drive_Your_Applications","description":"As VFP developers, we're used to storing application data in tables. However, another use for tables is to store information about application behavior. This month's article will look at how data-driving key pieces of your applications can make them more flexible and more maintainable.","pdf_url":"Pub/200208dhen.pdf","samples_url":"Pub/200208dhensc.zip"},{"title":"Data-Driving and Scripting Applications","folder":"Data-Driving_and_Scripting_Applications","description":"As VFP developers, we're used to storing application data in tables. However, another use for tables is to store information about application behavior. This session looks at how data-driving key pieces of your applications can make them more flexible and more maintainable. In addition, we'll examine how to make your application scriptable so advanced users can customize its behavior.","pdf_url":"Pub/DataDrivingScripting.pdf","samples_url":"Pub/DataDrivingScriptingSamples.zip"},{"title":"Database Events in Visual FoxPro","folder":"Database_Events_in_Visual_FoxPro","description":"Database (DBC) events are an exciting new addition in Visual FoxPro 7.0. Since these events are automatically fired when anything in a database container is accessed (opened, closed, modified, deleted, etc.), they give us the ability to control what happens before and after the access. This document discusses DBC events in detail and explores some of the uses for this new technology, such as implementing table-level security and powerful developer tools. ","pdf_url":"Pub/DBCEvents.pdf","samples_url":"Pub/DBCEventsSamples.zip"},{"title":"Database, Heal Thyself","folder":"Database_Heal_Thyself","description":"Like regualr FoxPro tables, database containers are subject to corruption. While fortunately this is rare, when it does happen, it can be the start of a very bad day. In this month's article, Doug presents a utility you can use to repair corruption in the PROPERTY memo of DBC records. In addition, this utility can be used to change read-only properties, such as the path for a table or the SQL SELECT statement of a view.","pdf_url":"Pub/200311dhen.pdf","samples_url":"Pub/200311dhensc.zip"},{"title":"Developing Modern Interfaces With VFP 7","folder":"Developing_Modern_Interfaces_With_VFP_7","description":"VFP 7 introduces some new features that allow us to create applications with up-to-date interfaces (such as that in Office 2000). However, there's a lot more to creating an exciting interface than just turning on \"hot tracking\". In this document, you'll learn how to create modern-looking menus (complete with Most Recently Used features), toolbars (including command buttons with drop-down menus), dialogs (using new Windows 2000 features), and forms. These techniques will help you freshen the user interface of your applications to give them a longer shelf life.","pdf_url":"Pub/ModernUI.pdf","samples_url":"Pub/ModernUISamples.zip"},{"title":"Developing VFP Applications for Windows 7","folder":"Developing_VFP_Applications_for_Windows_7","description":"Like Windows Vista before it, Windows 7 changes the rules for many aspects of application development, including the user interface, dialogs, deployment, security, and file access. This document looks at things you need to know to create Windows 7-compatible applications with Visual FoxPro.","pdf_url":"Pub/Windows7.pdf","samples_url":"Pub/PracticalUsesforXMLSamples.zip"},{"title":"Developing Visual FoxPro Applications for Windows Vista","folder":"Developing_Visual_FoxPro_Applications_for_Windows_Vista","description":"Windows Vista changes the rules for many aspects of application development, including the user interface, dialogs, deployment, security, and file access. This document looks at things you need to know to create Vista-compatible applications with Visual FoxPro.","pdf_url":"Pub/Vista.pdf","samples_url":"Pub/VistaSamples.zip"},{"title":"Dismembering MemberData","folder":"Dismembering_MemberData","description":"A couple of common requests from VFP developers are capitalization support for custom properties and methods in the Properties window and IntelliSense and the ability to customize the Properties window. Microsoft listened: VFP 9 gives us both of these, plus the ability to create our own property editors, with a new feature called MemberData.","pdf_url":"Pub/200406dhen.pdf","samples_url":"Pub/200406dhensc.zip"},{"title":"Displaying and Editing Child Records","folder":"Displaying_and_Editing_Child_Records","description":"This month's article presents a grid class to display child records for a parent and a form class to edit the selected child record.","pdf_url":"Pub/Sep99.pdf","samples_url":"Pub/199909dhensc.zip"},{"title":"Drilling Down Into Your Data","folder":"Drilling_Down_Into_Your_Data","description":"Do your users want to drill down into their data to see increasing levels of detail? You might think the TreeView control discussed last month is perfect for this, but it doesn't provide the ability to show columns of information. This month's article describes a technique for drilling down into data using a grid, plus describes how to make your grids act more like a spreadsheet with frozen panes.","pdf_url":"Pub/Jul97.pdf","samples_url":"Pub/199707dhensc.zip"},{"title":"Email and File Transfer the Fast (and Cheap!) Way","folder":"Email_and_File_Transfer_the_Fast_(and_Cheap)_Way","description":"In the previous two issues, Doug discussed free libraries generously provided by Craig Boyd to compress and decompress files and encrypt and decrypt strings and files. In this issue, he discussed two more libraries that add MAPI email and file upload and download capabilities to your applications.","pdf_url":"Pub/201105dhen.pdf","samples_url":"Pub/201105dhensc.zip"},{"title":"Encryption the Fast (and Cheap!) Way","folder":"Encryption_the_Fast_(and_Cheap)_Way","description":"In the previous issue, Doug discussed a free library generously provided by Craig Boyd to compress and decompress files using the ubiquitous ZIP format. This time, he examines another free library from Craig, one that encrypts and decrypts strings and files.","pdf_url":"Pub/201103dhen.pdf","samples_url":"Pub/201103dhensc.zip"},{"title":"Error Handling Revisited","folder":"Error_Handling_Revisited","description":"While objects have Error methods to provide local error handling, how do you provide common, global error handling services to your application? How do you recover when an error occurs? This month's Reusable Tools looks at a proven strategy for implementing error handling in Visual FoxPro applications, starting from individual controls and working up to a global error object.","pdf_url":"Pub/Jan98.pdf","samples_url":"Pub/199801dhensc.zip"},{"title":"Error Handling in VFP 8","folder":"Error_Handling_in_VFP_8","description":"VFP 8 now has structured error handling, featuring the new TRY ... CATCH ... FINALLY ... ENDTRY structure. This powerful new feature provides a third layer of error handling and allows you to eliminate a lot of code related to passing and handling error information. This document examines structured error handling and show how it fits in with a complete error handling strategy. ","pdf_url":"Pub/ErrorHandlinginVFP8.pdf","samples_url":"Pub/ErrorHandlinginVFP8Samples.zip"},{"title":"Error Handling in Visual FoxPro","folder":"Error_Handling_in_Visual_FoxPro","description":"Like most things, error handling is more flexible but a lot more complex in Visual FoxPro than it was in FoxPro 2.x. While objects have Error methods to provide local error handling, how do you provide common, global error handling services to your application? How do you recover when an error occurs? This session looks at a proven strategy for implementing error handling in Visual FoxPro applications, starting from individual controls and working up to a global error object.","pdf_url":"Pub/errorh.pdf","samples_url":"Pub/errorhSamples.zip"},{"title":"Extending Visual FoxPro with Visual FoxPro","folder":"Extending_Visual_FoxPro_with_Visual_FoxPro","description":"One of the coolest things about the Visual FoxPro interactive development environment (IDE) is that it's highly extensible. Even better, you can use VFP code to extend VFP itself. In this document, you'll learn how to extend the VFP IDE to boost your productivity and create simple tools that make your life easier. Topics I'll discuss include: "},{"title":"Extending the VFP 9 IDE","folder":"Extending_the_VFP_9_IDE","description":"One of the key themes in VFP 9 is extensibility. You can extend the VFP 9 Report Designer through report events and the reporting engine through the new ReportListener base class. You can even extend the IDE by trapping system and shortcut menu hits. This month, Doug Hennig shows you how to customize the IDE in ways you never thought possible.","pdf_url":"Pub/200409dhen.pdf","samples_url":"Pub/200409dhensc.zip"},{"title":"Extending the VFP 9 Reporting System, Part I: Design-Time","folder":"Extending_the_VFP_9_Reporting_System_Part_I_Design-Time","description":"Among the new and improved features in the reporting system of VFP 9 is the ability to extend the Report Designer to provide easier-to-use, more powerful, and more flexible report writing to your development team and even your end-users. In this document, you will learn about the new Report Builder application, how it captures and handles events raised by the Report Designer, and how you can create your own handlers to extend the VFP Report Designer in ways you never thought possible.","pdf_url":"Pub/VFP9ReportingDesignTime.pdf","samples_url":"Pub/VFP9ReportingDesignTimeSamples.zip"},{"title":"Extending the VFP 9 Reporting System, Part II: Run-Time","folder":"Extending_the_VFP_9_Reporting_System_Part_II_Run-Time","description":"In addition to the design-time extensibility of VFP 9's reporting system discussed in Part I of this white paper, VFP 9 also provides the ability to extend the behavior of the reporting system when reports are run. In this document, you'll learn about VFP 9's report listener concept, how it receives events as a report is run, and how you can create your own listeners to provide different types of output besides the traditional print and preview.","pdf_url":"Pub/VFP9ReportingRunTime.pdf","samples_url":"Pub/VFP9ReportingRunTimeSamples.zip"},{"title":"Favorites for IntelliSense","folder":"Favorites_for_IntelliSense","description":"Favorites for IntelliSense is a new tool that extends IntelliSense, allowing you to specify which members of a class you want displayed in IntelliSense, as well as easily scripting tooltips or lists of values for properties or parameters of methods.","pdf_url":"Pub/200508dhen.pdf","samples_url":"Pub/200508dhensc.zip"},{"title":"File Your Collections","folder":"File_Your_Collections","description":"While collections are extremely useful, array-based collections with a lot of members can suffer from poor performance at load and destroy time, and take up tons of memory. A file-based collection, on the other hand, takes no load or destroy time at all, since member objects are created on an \"as needed\" basis.","pdf_url":"Pub/Nov00.pdf","samples_url":"Pub/200011dhensc.zip"},{"title":"Fix Problems Fast with Advanced Error Handling and Instrumentation Techniques","folder":"Fix_Problems_Fast_with_Advanced_Error_Handling_and_Instrumentation_Techniques","description":"Your customer calls to report that their application crashes. Where do you start to figure out what's causing the problem? This document looks at techniques for troubleshooting application problems, including advanced error handling to provide complete state information and instrumenting your applications to determine exactly what steps led up to the crash.","pdf_url":"Pub/FixProblemsFast.pdf","samples_url":"Pub/FixProblemsFast_Samples.zip"},{"title":"Get the Message?","folder":"Get_the_Message","description":"This month's article presents a class that can be used to send email from your applications. It combines the two MAPI ActiveX controls that come with VFP into one easy-to-use class.","pdf_url":"Pub/Feb00.pdf","samples_url":"Pub/200002dhensc.zip"},{"title":"Going Ape Over the Windows API","folder":"Going_Ape_Over_the_Windows_API","description":"The Windows API (Win32API) contains thousands of useful functions. However, finding which function to use when, and how to call it from a VFP application, can be challenging. This month's article presents several useful API functions you can call in your VFP applications today.","pdf_url":"Pub/Jul01.pdf","samples_url":"Pub/200107dhensc.zip"},{"title":"Handling Specific Errors","folder":"Handling_Specific_Errors","description":"Letting a general error handler deal with specific foreseeable errors isn't a good idea, since the handler won't know the environment the errors occurred in nor possible resolutions to the problem. This month's column shows techniques for handling specific foreseeable errors at the appropriate level.","pdf_url":"Pub/Feb98.pdf","samples_url":"Pub/199802dhensc.zip"},{"title":"Have Your Cake and Eat it Too","folder":"Have_Your_Cake_and_Eat_it_Too","description":"Visual FoxPro 7.0 has several new functions that can make certain tasks easier, such as executing script code or performing text merges. However, since it's still a long way from release, this month's article presents several routines that emulate these new functions in VFP 6 so you can start using these capabilities today.","pdf_url":"Pub/200012dhen.pdf","samples_url":"Pub/200012dhensc.zip"},{"title":"Horizontally Paginated Reports","folder":"Horizontally_Paginated_Reports","description":"Horizontally paginated reports allow you to print more columns for a given row that will fit on a page. The report prints as many \"horizontal\" pages as needed. This technique has many applications, including cross-tabulation reports. In this article, Doug shows how to create horizontally paginated reports using the FoxPro Report Designer.","pdf_url":"Pub/199704dhen.pdf","samples_url":"Pub/199704dhensc.zip"},{"title":"Hyperlink Your Reports","folder":"Hyperlink_Your_Reports","description":"Last month, Doug Hennig discussed the new ReportListener class in VFP 9 and how it can be used to control report output in ways that previously wasn't possible. This month, he looks at how output generated from reports can have live hyperlinks so some action is performed when they're clicked.","pdf_url":"Pub/200503dhen.pdf","samples_url":"Pub/200503dhensc.zip"},{"title":"I Got Rendered Where?","folder":"I_Got_Rendered_Where","description":"Doug Hennig continues his discussion of report listeners by presenting a set of classes that output the contents of a report run to a cursor and use that cursor to provide a \"live\" report preview surface.","pdf_url":"Pub/200504dhen.pdf","samples_url":"Pub/200504dhensc.zip"},{"title":"I Got Rendered Where? Part II","folder":"I_Got_Rendered_Where_Part_II","description":"Thanks to the new ReportListener in VFP 9, we have a lot more control over where reports are rendered. Last month, Doug Hennig showed a listener that collaborates with a custom preview window to provide a \"live\" preview surface. This month, he takes it a step further and adds support for finding and highlighting text.","pdf_url":"Pub/200505dhen.pdf","samples_url":"Pub/200505dhensc.zip"},{"title":"Implementing Offline Views","folder":"Implementing_Offline_Views","description":"The introduction of updateable views in Visual FoxPro 3 provided new capabilities for FoxPro applications. A new feature of VFP 5 extends the capabilities of updatable views even further: you can now take any view offline. An offline view is \"disconnected\" from the source of its data so data entry can continue while the tables the view is based on are unavailable. Sometime later, you can update the source tables by \"reconnecting\" the view to them. While you could do this type of thing in VFP 3 yourself, it required a lot of coordinating and some slick code. VFP 5 makes it very simple.\r\n\r\nThis document will look at the mechanics of offline views: how you take a view offline, considerations about working with offline views, updating the source tables, and taking a view back online. We'll also look at some uses of offline views: obvious ones like remote applications which allow querying and data entry on the road or branch offices, but also a less-obvious but equally interesting one, that of permitting data entry to carry on while table maintenance (reindexing, updating structures, packing, backing up, etc.) is being done.","pdf_url":"Pub/Offline.pdf","samples_url":"Pub/OfflineSamples.zip"},{"title":"Installing Applications Using Inno Setup","folder":"Installing_Applications_Using_Inno_Setup","description":"Although a limited edition of InstallShield Express comes with VFP, many developers are unhappy with Windows Installer-based installation tools: the tools are slow and cumbersome, the resulting SETUP.EXE files are huge and slow, and Windows Installer sometimes has a mind of its own. Introducing Inno Setup, a free, fast, easy-to-use installation tool that generates fast, lightweight setup executables. This document shows you how to quickly implement Inno Setup to create great setups for your applications. ","pdf_url":"Pub/InnoSetup.pdf","samples_url":"Pub/InnoSetupSamples.zip"},{"title":"Integrating RSS and Visual FoxPro","folder":"Integrating_RSS_and_Visual_FoxPro","description":"RSS (Really Simple Syndication) is becoming a popular way to publish content on Web sites and blogs. However, it can be used for a lot more than that. This document provides an introduction to RSS and explores how VFP can both generate and consume RSS. ","pdf_url":"Pub/IntegratingRSSandVFP.pdf","samples_url":"Pub/IntegratingRSSandVFPSamples.zip"},{"title":"IntelliSense at Runtime","folder":"IntelliSense_at_Runtime","description":"VFP 9 provides support for IntelliSense at runtime. This month, Doug Hennig examines why this is useful, discusses how to implement it, and extends Favorites for IntelliSense to support it.","pdf_url":"Pub/200511dhen.pdf","samples_url":"Pub/200511dhensc.zip"},{"title":"Introduction to ADO","folder":"Introduction_to_ADO","description":"Microsoft's latest data access strategy is focused on ActiveX Data Objects (ADO), a COM-based data engine that acts as a front end for OLE DB. OLE DB is bound to replace ODBC as the defacto data connectivity standard and ADO is the interface that most applications will use to access data functionality. ADO provides an object-based approach to data access and through COM allows the ability to pass data as objects between components. A subset of ADO—Remote Data Service (RDS)—also allows access to ADO recordsets over an HTTP connection. This document discusses the technology involved with ADO and provides examples of how you can implement and use ADO in a VFP environment. ","pdf_url":"Pub/IntroductionToADO.pdf","samples_url":"Pub/IntroductionToADOSamples.zip"},{"title":"Introduction to C# for VFP Developers","folder":"Introduction_to_C#_for_VFP_Developers","description":"Even if you're planning to continue development in VFP, learning another language like C# can be very useful. There are some things that are a lot easier and faster to do in .Net than in VFP (the reverse is also true). This document introduces the C# language, comparing it to constructs and syntax in VFP to shorten the learning curve. ","pdf_url":"Pub/IntroToCSharp.pdf"},{"title":"Introduction to GDIPlusX","folder":"Introduction_to_GDIPlusX","description":"GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This session provides an \r\nintroduction to GDIPlusX, going through the basics of GDI+, looking at the classes in GDIPlusX, and going through various samples of how to use GDIPlusX in VFP applications. ","pdf_url":"Pub/IntrotoGDIPlusX.pdf","samples_url":"Pub/IntrotoGDIPlusXSamples.zip"},{"title":"Introduction to N-Tier Development","folder":"Introduction_to_N-Tier_Development","description":"As applications get ever more complex, designing application in components becomes very important to the successful completion of projects. This session discusses what n-tier development is, why it's important to modern application development, and shows strategies of how you can break out the tiers using Visual FoxPro.","pdf_url":"Pub/ntier.pdf","samples_url":"Pub/ntierSamples.zip"},{"title":"It Just Kicks In","folder":"It_Just_Kicks_In","description":"The best kind of tool is one that automatically does its job without having to set any properties, write any code, or even lift a finger. This column looks at a strategy for implementing these types of tools, and provides a popup calendar for Date fields and a universal find function for your applications.","pdf_url":"Pub/Sep97.pdf","samples_url":"Pub/199709dhensc.zip"},{"title":"Keep Y'er Paws Off My Stuff","folder":"Keep_Yer_Paws_Off_My_Stuff","description":"Need to prevent unauthorized access to your FoxPro data? Cryptor from Xitech provides an easy way to encrypt files and leave them encrypted on disk, even while you access them as normal tables in your application.","pdf_url":"Pub/200404dhen.pdf","samples_url":"Pub/200404dhensc.zip"},{"title":"Kill Objects Dead!","folder":"Kill_Objects_Dead","description":"Dangling object references are among the hardest bugs to track down, and can cause a wide range of problems. This month's article looks at the cause of these problems, presents a couple of tools to help track them down, and discusses techniques for preventing them.","pdf_url":"Pub/Oct99.pdf","samples_url":"Pub/199910dhensc.zip"},{"title":"Language Enhancements in VFP 7, Part I","folder":"Language_Enhancements_in_VFP_7_Part_I","description":"Want an early peek at what's new in VFP 7? This is the first article in a series discussing the language enhancements Microsoft is implementing and how to take advantage of some of them now.","pdf_url":"Pub/Jan01.pdf","samples_url":"Pub/200101dhensc.zip"},{"title":"Language Enhancements in VFP 7, Part II","folder":"Language_Enhancements_in_VFP_7_Part_II","description":"This article continues the series on language enhancements in VFP 7, discussing enhancements to existing commands and functions.","pdf_url":"Pub/Feb01.pdf","samples_url":"Pub/200102dhensc.zip"},{"title":"Language Enhancements in VFP 7, Part III","folder":"Language_Enhancements_in_VFP_7_Part_III","description":"This is the third in a series of articles on language enhancements in VFP 7. This article covers the last of the improvements to existing commands and functions, and starts discussing new commands and functions.","pdf_url":"Pub/Mar01.pdf","samples_url":"Pub/200303dhensc.zip"},{"title":"Language Enhancements in VFP 7, Part IV","folder":"Language_Enhancements_in_VFP_7_Part_IV","description":"This fourth article in a series on language enhancements in VFP 7 article covers six new functions. One of them, EDITSOURCE(), is used in a project text search utility, making it easy to find all occurrences of a string in all files in a project and bring up the found locations in the appropriate editor.","pdf_url":"Pub/200104dhen.pdf","samples_url":"Pub/200104dhensc.zip"},{"title":"Language Enhancements in VFP 7, Part V","folder":"Language_Enhancements_in_VFP_7_Part_V","description":"This fifth in a series of articles on language enhancements in VFP 7 covers the remaining new general-purpose commands and functions.","pdf_url":"Pub/May01.pdf","samples_url":"Pub/200105dhensc.zip"},{"title":"Listening to a Report","folder":"Listening_to_a_Report","description":"Microsoft has opened the architecture of the reporting engine in VFP 9 by having it communicate with the new ReportListener base class. Subclassing ReportListener allows VFP developers to create their own customized output. This month, Doug Hennig looks at ReportListener and shows an example of how it solves a real-world problem.","pdf_url":"Pub/200502dhen.pdf","samples_url":"Pub/200502dhensc.zip"},{"title":"Live Nude Documentation!","folder":"Live_Nude_Documentation","description":"Creating documentation, especially user manuals and help files, is usually the last thing a developer wants to do. HTML Help Builder makes creating HTML Help files actually a fun thing to do!","pdf_url":"Pub/Dec99.pdf","samples_url":"Pub/199912dhensc.zip"},{"title":"Long Live PRGs!","folder":"Long_Live_PRGs","description":"Although classes get most of the attention today, there's still a place for PRGs. This month's article looks at some library routines packaged as PRGs.","pdf_url":"Pub/Nov99.pdf","samples_url":"Pub/199911dhensc.zip"},{"title":"Make Your Menus Pop","folder":"Make_Your_Menus_Pop","description":"Last issue, Doug discussed ctl32_ContextMenu, an object-oriented menu class that's part of the ctl32 library. This month, he looks at another OOP menu class, this time the VFPX PopMenu project.","pdf_url":"Pub/201201dhen.pdf","samples_url":"Pub/201201dhensc.zip"},{"title":"Manage Your Applications","folder":"Manage_Your_Applications","description":"This month's article presents a simple yet useful tool, and discusses several reusable techniques used in this tool.","pdf_url":"Pub/200004dhen.pdf","samples_url":"Pub/200004dhensc.zip"},{"title":"Managing Projects and Class Libraries","folder":"Managing_Projects_and_Class_Libraries","description":"VFP 6 includes several new or enhanced tools for managing projects and class libraries. Projects are now exposed as objects so you can manipulate them in an OOP fashion rather than having to \"hack\" the PJX file. The new ProjectHook class extends this concept even further by allowing you to create objects that VFP automatically instantiates whenever a project is opened. ProjectHook events are called when files are added to, dropped on, or removed from a project, as well as when files are modified or the project built. The Class Browser has new capabilities that extend its usefulness even further. The Component Gallery is a new tool for organizing and managing objects by project, client, application, or any other grouping you see fit. This session will focus on these tools and provide practical examples of using them to boost your productivity. ","pdf_url":"Pub/ManagingProjectsandLibraries.pdf","samples_url":"Pub/ManagingProjectsandLibrariesSamples.zip"},{"title":"May I See Your License?","folder":"May_I_See_Your_License","description":"If you develop commercial applications, you may want to provide multiple levels of your application depending on what your users paid for, and prevent unauthorized users from installing and running the application. This month's article presents a license manager that can help with these tasks.","pdf_url":"Pub/Jun00.pdf","samples_url":"Pub/200006dhensc.zip"},{"title":"Microsoft Virtual PC for VFP Developers","folder":"Microsoft_Virtual_PC_for_VFP_Developers","description":"Microsoft Virtual PC is a free utility that lets you create separate virtual machines on your Windows desktop, each of which virtualizes the hardware of a physical computer. You can use virtual machines to run different operating systems, such as different versions of Windows. Virtual PC is perfect for testing application installs, presentations, legacy application support, training, and to avoid \"polluting\" your main system. This session introduces Virtual PC and covers topics including setting it up, installing different operating systems, managing your virtual machines, and using Virtual PC to solve typical problems VFP developers encounter.","pdf_url":"Pub/vpc.pdf","samples_url":"Pub/ManagingProjectsandLibrariesSamples.zip"},{"title":"Mine Your Data With DynamiCube","folder":"Mine_Your_Data_With_DynamiCube","description":"Providing your users with the ability to analyze their data by breaking it down an unlimited number of ways sounds like a \"pie in the sky\" goal. However, using the DynamiCube ActiveX control, you can easily add this feature to any VFP application in less than an hour.","pdf_url":"Pub/Mar98.pdf","samples_url":"Pub/199803dhensc.zip"},{"title":"Mine for Code in XSource","folder":"Mine_for_Code_in_XSource","description":"Visual FoxPro comes with source code for most of the \"Xbase\" tools that ship with the product, including the Class Browser, Code References, Toolbox, and Task Pane. Looking at source code written by top VFP gurus often gives insight into new, powerful coding techniques. This document looks at various files in XSource to show you cool ideas you can incorporate and even better, code you can directly use in your applications today.","pdf_url":"Pub/MininginXSource.pdf","samples_url":"Pub/MininginXSourceSamples.zip"},{"title":"Mining for Gold in the FFC","folder":"Mining_for_Gold_in_the_FFC","description":"One of the design goals for VFP 6 was to make it easier for programmers new to VFP to get up and running with the tool. The FoxPro Foundation Classes, or FFC, is one of the results of this goal. The FFC, located in the FFC subdirectory of the VFP home directory, is a collection of class libraries that provide a wide range of functions. Don't think that just because previous versions of FoxPro have included some, shall we say, less useful (to be polite) example files that these fall into that category. While some of these do appear to be more demoware than really useful, there are still lots of great classes in here. It's well worth the effort to spend some time looking at these classes, picking through the rocks to find the nuggets. This document will look at some of the FFC classes and see how we might use them or even subclass them to make them even more useful.","pdf_url":"Pub/MiningFFC.pdf","samples_url":"Pub/MiningFFCSamples.zip"},{"title":"Modifying VFP's Wizards and Builders","folder":"Modifying_VFPs_Wizards_and_Builders","description":"The builders and wizards that come with VFP often don't do quite what you need them to. This month's article shows how to remedy this.","pdf_url":"Pub/199908dhen.pdf","samples_url":"Pub/199908dhensc.zip"},{"title":"More Flexible Reporting With XFRX","folder":"More_Flexible_Reporting_With_XFRX","description":"XFRX can make your reporting solutions more flexible since it allows you to output FRX reports to PDF, Microsoft Word, Microsoft Excel, and HTML files. This month, Doug takes a look at how easy it is to incorporate XFRX in your applications.","pdf_url":"Pub/200402dhen.pdf","samples_url":"Pub/200402dhensc.zip"},{"title":"Much ADO About Something","folder":"Much_ADO_About_Something","description":"The release of the OLE DB provider for VFP means better performance and scalability for applications that need to access VFP data via ADO. However, there are some interesting issues and limitations of this provider you need to be aware of. ","pdf_url":"Pub/Sep01.pdf","samples_url":"Pub/200109dhensc.zip"},{"title":"Multi-User and Data Buffering Issues","folder":"Multi-User_and_Data_Buffering_Issues","description":"In FoxPro 2.x, developers edited records using scatter memvar, editing the memory variables, and gather memvar. The purpose of this indirect editing of fields was to protect the record by buffering it. With Visual FoxPro, data buffering is built in, so fields can be edited directly. This session will discuss how data buffering works and explores strategies for selecting which buffering mechanism to use and how to handle multi-user conflicts.","pdf_url":"Pub/Buffer.pdf"},{"title":"New Language Features in Visual FoxPro 7.0","folder":"New_Language_Features_in_Visual_FoxPro_7","description":"Every new version of Visual FoxPro introduces changes to the programming language and Visual FoxPro 7.0 is no exception. This document highlights new and changed commands, functions, properties, events, and methods. Due to time constraints, we won't discuss database events, COM enhancements, IntelliSense, or IDE enhancements, all of which introduce some changes to commands and functions. ","pdf_url":"Pub/NewLanguageVFP7.pdf","samples_url":"Pub/NewLanguageVFP7Samples.zip"},{"title":"New OOP and Language Features in Visual FoxPro 9.0","folder":"New_OOP_and_Language_Features_in_Visual_FoxPro_9","description":"VFP 9 has an incredible list of new features: dockable forms, control anchoring, polygon shapes, word wrapping for checkboxes and option buttons, IntelliSense support within WITH/ENDWITH and within memo fields, removal of limits in such places as the number of elements in an array or size of PRG files, new data types ... the list seems endless! This session will focus on new and improved OOP and language features so you can quickly get up to speed on the newest version of VFP.","pdf_url":"Pub/NewLanguageVFP9.pdf","samples_url":"Pub/NewLanguageVFP9Samples.zip"},{"title":"Objectify Your Menus","folder":"Objectify_Your_Menus","description":"Object-oriented menus have been one of the most commonly requested enhancements to VFP. This month, Doug presents a set of classes that allow you to implement object-oriented menus right now.","pdf_url":"Pub/200108dhen.pdf","samples_url":"Pub/200108dhensc.zip"},{"title":"PEMs For Your Base Classes","folder":"PEMs_For_Your_Base_Classes","description":"This month's column examines some ideas to put in your subclasses of Visual FoxPro base classes. Some of these ideas are straightforward, but others may be less obvious. We'll look at some custom properties and methods you can add to provide more automatic functionality to your applications.","pdf_url":"Pub/Feb97.pdf","samples_url":"Pub/199702dhensc.zip"},{"title":"Persistence without Perspiration","folder":"Persistence_without_Perspiration","description":"This month's article presents a set of classes that persist values. A common application of this technique is restoring a form's last size and position when it's opened.","pdf_url":"Pub/Jan00.pdf","samples_url":"Pub/200001dhensc.zip"},{"title":"Practical Uses for GDIPlusX","folder":"Practical_Uses_for_GDIPlusX","description":"GDIPlusX is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. GDIPlusX makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This document looks at some practical uses for GDIPlusX, including creating gradients, resizing images, fully justifying text in reports, creating screen snapshots, adding text to images, reading image information, and many other uses.","pdf_url":"Pub/GDIPlusX.pdf","samples_url":"Pub/GDIPlusXSamples.zip"},{"title":"Practical Uses for New Features in Visual FoxPro 8.0","folder":"Practical_Uses_for_New_Features_in_Visual_FoxPro_8","description":"Going over a list of the new features in VFP 8 doesn't really tell you how and where to use them. This document takes a practical look at new features to create things like picklist grids, page frames with delayed instantiation of contents, labeled option boxes, objects that know how to resize themselves in a form, dynamic data objects, and many more.","pdf_url":"Pub/PracticalUsesforVFP8.pdf","samples_url":"Pub/PracticalUsesforVFP8Samples.zip"},{"title":"Practical Uses for XML","folder":"Practical_Uses_for_XML","description":"XML can be a great way to store some types of data or transfer data from one application to another. This session discusses what XML is and presents various methods of generating and parsing XML. It also shows why XML is useful and demonstrates some practical examples of how I've used XML in my applications.","pdf_url":"Pub/PracticalUsesforXML.pdf","samples_url":"Pub/PracticalUsesforXMLSamples.zip"},{"title":"Putting Parameters in Perspective","folder":"Putting_Parameters_in_Perspective","description":"Concentrating on communication between routines can reduce up to one-third of the errors in your applications. This month's column examines some \"Best Practices\" regarding the use of parameters.","pdf_url":"Pub/MAY96.pdf","samples_url":"Pub/199605dhensc.zip"},{"title":"Raise a Little Event of Your Own","folder":"Raise_a_Little_Event_of_Your_Own","description":"Event binding, added in VFP 8, is getting more and more used as VFP developers discover its powerful capabilities. This month, Doug Hennig examines a couple of uses he's been making of this technique lately.","pdf_url":"Pub/200510dhen.pdf","samples_url":"Pub/200510dhensc.zip"},{"title":"Report Objects","folder":"Report_Objects","description":"FoxPro developers have wanted an object-oriented report writer since VFP 3 was released. Although the classes presented in this article don't have a pretty visual designer tool, they do expose the FRX as a set of objects and provide a simple way to create reports programmatically.","pdf_url":"Pub/Jun99.pdf","samples_url":"Pub/199906dhensc.zip"},{"title":"Reporting Errors","folder":"Reporting_Errors","description":"This month's article presents an error reporting class that prompts the user to fax or email you information about errors that occur. Doug also describes improvements he's made to the error handling scheme he presented in articles two years ago.","pdf_url":"Pub/200008dhen.pdf","samples_url":"Pub/200008dhensc.zip"},{"title":"Reporting System Enhancements in VFP 9","folder":"Reporting_System_Enhancements_in_VFP_9","description":"The major focus of VFP 9 is improving the reporting system. The list of new and improved features is enormous: multiple detail bands, protection of objects in the Report Designer, design-time events, ability to position objects absolutely, more zoom levels, better menus, etc. This document explores these enhancements in detail, demonstrates some types of reports you couldn't do in earlier versions of VFP, and provides an introduction to the \"Extending the VFP 9 Reporting System\" documents.","pdf_url":"Pub/VFP9ReportingOverview.pdf","samples_url":"Pub/VFP9ReportingOverviewSamples.zip"},{"title":"Retrieving and Updating Data With CursorAdapters","folder":"Retrieving_and_Updating_Data_With_CursorAdapters","description":"The new CursorAdapter base class added in VFP 8 provides an easy-to-use, consistent interface to data. This month's article shows how to use CursorAdapter to access local data and remote data via ODBC, ADO, and XML, discussing the particular requirements and \"gotchas\" for each.","pdf_url":"Pub/200211dhen.pdf","samples_url":"Pub/200211dhensc.zip"},{"title":"Reusable Data Classes","folder":"Reusable_Data_Classes","description":"VFP developers have wanted reusable data classes for a long time. Although there were various ways of handling this in earlier versions, they were often kludges. Now in VFP 8, we have true reusable data classes. This month, Doug looks at subclasses of CursorAdapter and DataEnvironment, creates some reusable data classes from these subclasses, and shows how these data classes can be used in both forms and reports.","pdf_url":"Pub/200212dhen.pdf","samples_url":"Pub/200212dhensc.zip"},{"title":"Role-Based Security","folder":"Role-Based_Security","description":"Role-based security allows you to specify which users have rights to particular secured entities, but at a group, or role, level. This month, Doug Hennig starts a discussion of how he implements role-based security in his applications.","pdf_url":"Pub/200512dhen.pdf","samples_url":"Pub/200512dhensc.zip"},{"title":"Role-Based Security, Part II","folder":"Role-Based_Security_Part_II","description":"In part 2 of Doug Hennig's series on role-based security, he looks at code used for manage the rights users and roles have to secured elements, discusses password encryption, and shows how user login works.","pdf_url":"Pub/200601dhen.pdf"},{"title":"Role-Based Security, Part III","folder":"Role-Based_Security_Part_III","description":"This month, Doug Hennig winds up his series on role-based security by examining a form class responsible for maintaining users and roles.","pdf_url":"Pub/200602dhen.pdf","samples_url":"Pub/200602dhensc.zip"},{"title":"Searching With Web Services","folder":"Searching_With_Web_Services","description":"Web Services make it easy to access functions on other computers. Several Web sites now provide a Web Service to search their archives for text. However, every Web Service has a different interface and returns results in a different format. This month, Doug shows how to create a wrapper to provide a consistent way to search for the same text from many Web Services.","pdf_url":"Pub/200206dhen.pdf","samples_url":"Pub/200206dhensc.zip"},{"title":"See Reports in Your Mind's Eye","folder":"See_Reports_in_Your_Minds_Eye","description":"Interested in more flexibility in your reports? Want to output to PDF files? How about graphs? The Mind's Eye Reporting Engine is an incredible new tool that'll make you forget the VFP Report Preview window. In this month's article, Doug explains why.","pdf_url":"Pub/200304dhen.pdf","samples_url":"Pub/200304dhensc.zip"},{"title":"Spam, Wonderful Spam","folder":"Spam_Wonderful_Spam","description":"This month's article puts emailing on steroids. The tools presented here provide the ability to send bulk emails to anyone listed in a table.","pdf_url":"Pub/Mar00.pdf","samples_url":"Pub/200003dhensc.zip"},{"title":"Splitting Up is Hard to Do","folder":"Splitting_Up_is_Hard_to_Do","description":"While they aren't used everywhere, splitter controls can add a professional look to your applications when you have left/right or top/bottom panes in a window. This month's article implements a splitter using the new OLE drag and drop features added in VFP 6.","pdf_url":"Pub/Jul99.pdf","samples_url":"Pub/199907dhensc.zip"},{"title":"Taking Control","folder":"Taking_Control","description":"This month, Doug Hennig discusses a simple way to make anchoring work the way you expect it to and how to control the appearance and behavior of a report preview window.","pdf_url":"Pub/200506dhen.pdf","samples_url":"Pub/200506dhensc.zip"},{"title":"Tame Your ActiveX Controls","folder":"Tame_Your_ActiveX_Controls","description":"ActiveX controls are forwardly but not backwardly compatible. This means if you install a newer version of an OCX on your system, any applications you ship to people with an older version installed will break. This article presents a reusable tool that solves this problem in a simple, easy-to-use manner.","pdf_url":"Pub/Jun98.pdf","samples_url":"Pub/199806dhensc.zip"},{"title":"Task Scheduler","folder":"Task_Scheduler","description":"This provides classes that can be used to create tasks in the Windows Task Scheduler. There are separate classes for Windows Vista, which uses Task Scheduler 2.0 and earlier Windows versions, which use Task Scheduler 1.0.","pdf_url":"Pub/TaskScheduler.zip"},{"title":"The Best of Both Worlds","folder":"The_Best_of_Both_Worlds","description":"You don't have to sacrifice performance for ease of installing new versions of applications. Using STARTAPP, you can run applications from local drives for best performance, and yet have them automatically updated from a common server directory when you install a new version. This solution also gives a secondary benefit: you can easily change where your data files are located without rebuilding your application.","pdf_url":"Pub/Oct97.pdf","samples_url":"Pub/199710dhensc.zip"},{"title":"The Happy Project Hooker","folder":"The_Happy_Project_Hooker","description":"Project objects and ProjectHooks are new in VFP 6. Together, they provide the ability to add to or change the behavior of the Project Manager. Doug's article presents tools that allow you to have project-specific field mappings, perform text search on all files in a project, log activities, and have a toolbar of useful project functions.","pdf_url":"Pub/Sep98.pdf","samples_url":"Pub/199809dhensc.zip"},{"title":"The Last Pick List You'll Ever Need","folder":"The_Last_Pick_List_Youll_Ever_Need","description":"Last month's column looked at classes dealing with lookup tables. Closely related to lookups are pick lists. Pick lists were ubiquitous in FoxPro 2.x applications, but even with comboboxes and listboxes, are still useful in today's applications. This month, Doug presents reusable classes that provide pick list features, and expands our base class library to provide row highlighting in grids.","pdf_url":"Pub/Nov98.pdf","samples_url":"Pub/199811dhensc.zip"},{"title":"The Mother of All TreeViews","folder":"The_Mother_of_All_TreeViews","description":"If you've ever had to work with a TreeView control, you'll appreciate Doug Hennig's article this month: it provides a class that encapsulates all of the quirky behavior of a TreeView so you don't have to worry about it. You need only implement a few methods to get a fully-functional control that provides the features your users need.","pdf_url":"Pub/200407dhen.pdf","samples_url":"Pub/200407dhensc.zip"},{"title":"The Mother of All TreeViews, Part 2","folder":"The_Mother_of_All_TreeViews_Part_2","description":"Last month, Doug presented a reusable class that encapsulates most of the desired behavior for a TreeView control. He discussed controlling the appearance of the TreeView, loading the nodes in the TreeView, and restoring the TreeView's state. This month, he finishes the discussion of this class and shows a form class that provides the features needed in any form that displays a TreeView and the properties of the selected node.","pdf_url":"Pub/200408dhen.pdf","samples_url":"Pub/200408dhensc.zip"},{"title":"Tools for and by Geeks and Gurus","folder":"Tools_for_and_by_Geeks_and_Gurus","description":"HackCX Professional and ViewEditor Professional are two tools from Geeks and Gurus that can make your life easier. HackCX allows you to edit SCX and VCX files in ways the Form and Class Designers can't, and ViewEditor is more convenient and safer to use than VFP's View Designer.","pdf_url":"Pub/200312dhen.pdf"},{"title":"Understanding DBCX 2","folder":"Understanding_DBCX_2","description":"DBCX is a public domain data dictionary extension manager for Visual FoxPro. A colloboration between leading industry vendors Stonefield Systems Group, F1 Technologies, Flash Creative Management, and Micromega Systems, DBCX provides a core set of functions that allows third party products to effectively share extended data dictionary information. DBCX was recently rewritten to add speed and flexibility. This session concentrates on the design and implementation of DBCX so you can understand what goes on \"under the hood\" in products such as Visual FoxExpress and Stonefield Database Toolkit.","pdf_url":"Pub/UnderstandingDBCX2.pdf","samples_url":"Pub/UnderstandingDBCX2Samples.zip"},{"title":"Unit Testing VFP Applications","folder":"Unit_Testing_VFP_Applications","description":"Unit testing is a very important part of application development and yet it seems that few VFP developers use this important technique. Unit testing allows you to confirm that code has the functionality expected of it, and is especially important when refactoring or making other changes to your code. This document introduces you to unit testing and the VFX FoxUnit project so you can be confident in your application's success before you deploy it.","pdf_url":"Pub/UnitTesting.pdf","samples_url":"Pub/UnitTesting_Samples.zip"},{"title":"Updating an Application over the Internet","folder":"Updating_an_Application_over_the_Internet","description":"Ever wanted to update your client's applications with minimal effort? This month's article, the first of two on this topic, presents a set of classes that download an application's files from an FTP site, automating the process of distributing application updates.","pdf_url":"Pub/Sep00.pdf","samples_url":"Pub/200009dhensc.zip"},{"title":"Updating an Application over the Internet, Part II","folder":"Updating_an_Application_over_the_Internet_Part_II","description":"This second of a two-part series looks at several strategies for automating the process of distributing application updates by downloading an application's files from an FTP site.","pdf_url":"Pub/Oct00.pdf","samples_url":"Pub/200010dhensc.zip"},{"title":"Using VFP to Create CHM Files From Word Documents","folder":"Using_VFP_to_Create_CHM_Files_From_Word_Documents","description":"Tools like the Microsoft HTML Help Workshop or West Wind HTML Help Builder can make short work of generating an HTML Help (CHM) file. However, what if you're not starting from scratch but from a set of existing Word documents? This session discusses the basics of generating CHM files, covers the tasks necessary to create CHM files from Word documents, and presents a set of tools that automates the process.","pdf_url":"Pub/WordToCHM.pdf","samples_url":"Pub/PracticalUsesforXMLSamples.zip"},{"title":"Using Visual FoxPro's ActiveX Controls","folder":"Using_Visual_FoxPros_ActiveX_Controls","description":"Visual FoxPro includes a lot of ActiveX (formerly OLE) controls that can add great new features to your applications. Many of these, including the TreeView, ListView, StatusBar, and CommonDialog controls, allow you to create a Windows 9x interface for your applications. Others, such as the MAPI controls and Comm control, allow you to add messaging and serial port control to your applications. Some of these controls are less useful: the \"Threed\" controls, for example, provide very little beyond what the native VFP controls already have, and seem to just be there for Visual Basic or Access usage.","pdf_url":"Pub/ActiveX.pdf","samples_url":"Pub/ActiveXSamples.zip"},{"title":"Using ctl32 to Create a More Modern UI","folder":"Using_ctl32_to_Create_a_More_Modern_UI","description":"Carlos Alloatti has created an incredible library called ctl32 that you can use to quickly add attractive controls to your VFP applications. It allows you to both provide a fresher, more modern interface and to add functionality that other VFP controls don't have. This document examines the library in detail and shows you how to implement the controls in your own applications.","pdf_url":"Pub/ctl32.pdf","samples_url":"Pub/ctl32Samples.zip"},{"title":"Using the Coverage Profiler","folder":"Using_the_Coverage_Profiler","description":"Visual FoxPro (VFP) includes an important tool called the Coverage Profiler that provides both code coverage and profiling. This document examines how to use this tool for effective application testing, and shows how simple add-ins can increase its usefulness. I'm not going to discuss when or why, but how. In other words, we're not going to look at testing and profiling theories and concepts, but rather how the Coverage Profiler works and how to use it.","pdf_url":"Pub/coverage.pdf","samples_url":"Pub/coverageSamples.zip"},{"title":"Web Page Components","folder":"Web_Page_Components","description":"With its fast and powerful string functions, VFP is a great tool for generating HTML. This month, Doug Hennig shows how you can treat Web pages as a collection of reusable HTML \"components\", to easily generate both static and dynamic Web sites.","pdf_url":"Pub/200405dhen.pdf","samples_url":"Pub/200405dhensc.zip"},{"title":"Win32API for VFP Developers","folder":"Win32API_for_VFP_Developers","description":"The Windows API (Win32API) contains thousands of useful functions. However, finding which function to use when, and how to call it from a VFP application, can be challenging. This document discusses how API functions are called in VFP, where to find information on the API, and presents lots of useful API functions you can call in your VFP applications today.","pdf_url":"Pub/Win32API.pdf","samples_url":"Pub/Win32APISamples.zip"},{"title":"Windows 95 Issues for FoxPro","folder":"Windows_95_Issues_for_FoxPro","description":"This month's column examines issues FoxPro developers must take into account when developing applications that will run under Windows 95. We'll also look at techniques for creating cross-platform (Windows 3.1 and Windows 95) applications.","pdf_url":"Pub/Aug96.pdf","samples_url":"Pub/199608dhensc.zip"},{"title":"Windows Event Binding Made Easy","folder":"Windows_Event_Binding_Made_Easy","description":"A feature available in other development environments but missing in VFP is the ability to capture Windows events. VFP 9 extends the BINDEVENT() function to allow our own code to be called when Windows passes certain messages to VFP windows. This has a wide range of uses, some of which Doug examines in this month's article.","pdf_url":"Pub/200501dhen.pdf","samples_url":"Pub/200501dhensc.zip"},{"title":"Working With Arrays","folder":"Working_With_Arrays","description":"This month's column examines some best practices for working with arrays, including a library routine that does a better job of searching an array than ASCAN and one that cleans up by closing all tables opened by a routine.","pdf_url":"Pub/Jan97.pdf","samples_url":"Pub/199701dhensc.zip"},{"title":"XML Web Services for Visual FoxPro Developers","folder":"XML_Web_Services_for_Visual_FoxPro_Developers","description":"XML Web services are becoming very important for application development. Based on XML, SOAP and open standards, XML Web services are the building blocks of distributed applications. Visual FoxPro 8 makes it easier than ever to register, explore, consume, and publish XML Web services. This document explores the use of XML Web services in VFP applications. You'll see how to use the new XML Web Service Builder to bind controls to XML Web services results with very little code. You'll also discover how to publish XML Web services written in VFP.","pdf_url":"Pub/XMLWebServices.pdf","samples_url":"Pub/XMLWebServicesSamples.zip"},{"title":"Zip it, Zip it Good","folder":"Zip_it_Zip_it_Good","description":"This month's article presents a class to zip and pack the files in a project, and a class to interface VFP with a zipping utility like WinZip. Combining these classes with a ProjectHook and a project toolbar helps improve your productivity.","pdf_url":"Pub/May00.pdf","samples_url":"Pub/200005dhensc.zip"}]