Memo Field Replacement for Xbase++
Version 1.2 Now Available

is a Multiple Line Edit control for memos which stores text in DBF files instead of DBT/FPT files.  It eliminates the need for memo fields and avoids the problems inherent in them.  X-Memo has Encryption (optional) and Automatic Record Recycling so it is secure, has no unused space, and does not need to be Packed.  It is a subclass of XbpMle and can be placed on a data entry form or in a popup memo dialog, just like a standard Mle object.

X-Memo accepts either Pixel or Row/Column coordinates so it can be used by any Xbase++ programmer, including users of Top-Down Library and eXpress++.  The package includes a special version for use in the Top-Down DE System.  It uses the same file structure as "Word Wrapper" (the popular Clipper utility of similar function) and can use Word Wrapper files from Clipper applications being converted to Xbase++.  Source code is included.  The price is $59 US.


Return to: Top-Down Library pageSoftware and Services | Home

1) Stores text in DBF files - avoids the shortcomings of DBT/FPT memo files:

a) DBT/FPT files store text in blocks so there is unused space, and they do not shrink when text is erased.  Even if the program uses record recycling on the primary data DBFs, the memo files continue to grow over time, creating bloated files, and the entire database must be packed in order to remove discarded text and reduce size. This is time consuming, creates down-time for the system, requires large amounts of free hard drive space, and carries the usual dangers associated with large scale data operations.  In addition, depending on how the data is deleted, sensitive memo information can remain in the memo file and be visible to prying eyes. 

X-Memo does not create blocks of unused space and has Automatic Record Recycling to reuse any records that are discarded.  If a memo is erased or reduced in size, its discarded records are blanked out, so no data remains.  X-Memo uses the blank records before appending any new ones, so there is rarely any unused space.  If a large amount of memo text is erased, X-Memo's built in Pack routine can be called to immediately reduce the file size, without touching the primary data.  Only the memotext DBF is packed, completely eliminating the need to pack the data DBF.

b) Memo files can get corrupted.  If a memo file is damaged or missing, the data DBF cannot be opened.  X-Memo avoids these dangers by using standard DBF files for the memotext storage.  The memo text is always available through any DBF utility or programming interface.  The data DBF can be moved or opened for maintenance purposes, free from any dependence on the memotext file.

2) Encryption - Text in memo files can be easily read with file viewers.  X-Memo has an optional encryption algorithm which keeps sensitive information safe from snoopers.

3) Insert and Overstrike modes - The standard Mle object has Insert Mode only.

4) Insert Key codeblock -  X-Memo accepts an optional codeblock to be evaluated whenever the Insert Key is pressed.  This allows you to add an INS/OVR display to your user interface.

5) HotKeys - Any number of HotKeys and their associated codeblocks may be assigned to the X-Memo object.  When a HotKey codeblock is evaluated, the X-Memo object is sent into the codeblock as a parameter.  This allows easy manipulation of the X-Memo object from the user interface.

6) Edit Timeout - Built in edit timer allows setting the timeout interval, and a codeblock for controlling the Timeout behavior.

7) Ctrl-U keystroke for Undo - This keystroke is common to Clipper programs and allows compatibility with legacy Clipper applications.

8) Built in Message System - The results of every operation, such as loading or saving memos, are written to the X-Memo instance variable :cRetMsg where they can be easily accessed.  This includes any error messages from the error trapping logic.  Many possibilities exist for this information, such as writing to a logging routine, pop up dialogs to inform the user, or status bar displays.

9) Language control - All of the messages passed to :cRetMsg are defined in the xmemo.ch file.  They may be translated into other languages.

10) Word Wrapper compatibility -  X-Memo uses the identical memo DBF file structure as used by the popular Clipper utility.  Existing Word Wrapper files can be used directly by the Xbase++ program.

11) Convenient Class methods -  X-Memo contains several easy to use methods for controlling the Mle (the cKey parameter represents a unique memo_key string such as a customer ID number):

:LoadMemo(cKey) - Loads memo from the memotext DBF into the Mle buffer. 

:SaveMemo(cKey) - Writes buffer contents to the memotext DBF.

:EraseMemo(cKey) - Erases entire memo from the memotext DBF.

:GoToEnd() - Forces cursor to end of existing text. Display will scroll down if 

:HasMemo(cKey) - Returns True if cKey exists in the memotext DBF.

:PackFile() - Removes any blank records from the memotext DBF.

:PrnArray(nLineWd) - Formats memo for printing.  Returns an array in which  
 each element is a row of text to be printed

 :SetTimer() - Allows external control of the built in Edit Timer.

12) Configuration - Many items are configurable with X-Memo parameters, including the following (all but datalink and filename have default values):

datalink - a codeblock which returns the unique memo_key.  Example:

bDatalink := {|| CUST->idnum }

filename - name of the memotext DBF
alias - alias for the memotext DBF
path - path for the memotext DBF
DBE - Dabase engine for the memotext DBF
edit/view mode - can open in either mode, and can be switched
font - uses compound font names
view mode background color - any color usable in Xbase++
vertical and horizontal scroll bars - either or both

...and all other attributes and methods inherited from XbpMle.

13) Pre-Written Utilities

 PopXmemo() - A ready-to-use "black box" routine which pops up a dedicated window with an Xmemo control and "Save"/"Cancel" buttons.  Parameters exist to configure all aspects of the Xmemo and the window, including size, location, and whether it is a Modal or a Child.


Alaska Software authorized Technology Partner

Copyright © 2009 Clayton Jones
   All rights Reserved

Return to: Software and Services | Home