Contents of the READ.ME file
FastEdit v1.0 BETA
November 5, 1992
TERMS & CONDITIONS
I am releasing FastEdit in a pre-production form in order
to get valuable input on its use and functionality. There
are only a few conditions attached to using this product:
You inform me of any problems you discover, and any
enhancement suggestions you may have.
Let me know if you are using it in a commercial
application. A simple EMAIL message via Compuserve
is the best way to reach me. My CIS id: [71735,141]
Complaints about the documentation are kept to
FastEdit is an object oriented editor library for use within
Clipper 5.01 applications. Since Clipper 5.01 is not truly
object oriented, FastEdit depends on external libraries, such
as Class(y) and o:Clip, to provide the OO extensions.
*** YOU MUST OWN CLASS(Y) TO USE THIS RELEASE OF FASTEDIT!! ***
FastEdit is a complete replacement for the Clipper MEMOEDIT()
function. While MEMOEDIT() gives a small amount of control
over your memo editing capabilities, FastEdit gives you total
Here are a few of the things you can do under FastEdit which are impossible
Block operations. Move, copy, delete, & save are just a few of
the operations you can do on blocks.
Embedded printer codes. Use these to support operations such as
bold and underline. These embedded codes may be displayed as part
of the text being editing (ie [BOLD] shown where bold is turned on)
or cause a color change of the specified text (ie text to be made
bold is displayed hilited).
Rectangular Gets. Using this feature you can edit long character
strings in a rectangular area. For example, suppose you have a
character field of length 150 characters and you want to edit this
across 3 lines of 50-characters each. To do this in Clipper, you
would have to break the line into 3 different strings and do a GET
on each one. With FastEdit, just define the rectangular area and
the user will get full editing capabilities--and you don't have
to worry about the resulting string being longer than 150 characters.
Enhanced cursor control. Including word operations, horizontal
and vertical panning, and completely configurable key control.
Emulating your favorite word-processor within Clipper is not out
of the question.
Multiple edit windows. Display multiple edit windows on the screen
at the same time, and switch between them at the press of a key.
Or, incorporate FastEdit directly into your GET system.
Search & Replace. (Not completely implemented yet)
A completely configurable editor environment. The possibilities
are too numerous to mention!
Documentation is found in FASTEDIT.DOC. It is very
sparse. When you link your applications, make sure you
link in these files:
CLASSY.LIB <-- you must own the Class(y) library
If you have used TBrowse, then FastEdit should not pose much
of a challenge. Your best bet is to look at TESTEDIT.PRG,
which demonstrates several features of FastEdit (but by no
means all the features!). You can compile this demo by
typing: RMAKE TESTEDIT
Or, look at WORDPERF.PRG. This is the start of basic
WordPerfect key emulation. It is not meant to be complete,
just an example! To compile: RMAKE WORDPERF
You should probably follow these steps when creating an edit
1) Create browse object. For example:
EditObj := FastEdit():New(5, 1, 10, 20, "W+/B", cText)
This creates an editor object, FastEdit, with the coordinates
(5,1,10,20), color bright white on blue, and editing the
text contained in the variable cText.
2) Set appropriate instance variables:
EditObj:insert := .T. // default to insert mode
EditObj:readOnly := .T. // set to read-only
EditObj:realTab := .F. // pad tabs with spaces
These are just a FEW of the many instance variables available.
See the FASTEDIT.DOC file for a complete listing.
3) Stabilize the edit screen:
4) Enter an event loop:
nKey := 0
DO WHILE nKey != K_ESC
// stabilize window -- NOT incremental!
SETCURSOR(IF(EditObj[np]:insert, SC_INSERT, SC_NORMAL))
// wait for keystroke
nKey := INKEY(0)
CASE nKey == 397// ctrl-up
CASE nKey == 401// ctrl-down
CASE nKey == 127
CASE nKey == K_ALT_M
// toggle block mode
CASE nKey == K_ESC
// Exit key: do nothing
5) That's it! Hope this works out for you. A few developers
are already using this in their applications, so it should be
FAIRLY solid. Let us know!