!short: ^BNew features and bug corrections for FiveWin
!short:컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴

!short: FiveWin 1.7 d                                                               
 FiveWin 1.7 d
 =============

* Enhancement: FiveWin TRtfFile Class -for creating Windows help files!- has
  been enhanced to accept characters with ascii over 127 ! This was
  producing errors when trying to create a .HLP file from the FiveWin IDE.
  Try those extended characters now. It is ok! Thanks to Angel Enrique
  Iglesias!

* New: Function PrinterSetup() that shows the Windows standard dialog box to
  setup the printer. It has also been added as TPrinter:Setup() method.

* Sorry! The debugger was not working (a very little error <g>) in 1.7 c.
  Fixed! Sorry for the new download. Thanks,

* The FiveWin Norton Guide is now over 1.1 Mega size (ufff, FiveWin is really
  big!). There is a lot of new documentation and more is coming soon. Thanks
  to all of you that have been waiting for it. We promised you we are going to
  offer the best documentation, and be sure we will do it!

* Enhancement: TCheckBox class has been modified to default initialize
  associated logical variable when it is nil. Our wish is that in no
  circunstance FiveWin may generate an error even if it is not been used
  properly!

* ODBC: Has been greatly enhanced! We are in contact with some companies
  that are working really hard to help us fine tunning FiveWin ODBC. There
  are very nice new tricks that really speed up a lot ODBC processes (like
  automatically generating DBFs from ODBC SQL queries). Thanks a lot to
  Jesus Iniesta from Caja Madrid! See the new SAMPLE\ODBC01.prg developed
  by Jesus Iniesta. And much more is coming soon!

* Enhancement: GETs with password detection. TGet class has a new DATA
  ::lPassword. You may set it to .t. or just specify PASSWORD style from
  inside your resource editor. Thanks to our dear Ignacio Ortiz de Zu쨒ga.

* New functions MsgRun() and MsgWait():

  MsgRun() executes a codeblock and waits for its return before continuing.

        MsgRun( <cCaption>, <cTitle>, <bAction> )

  MsgWait() is a modification on the above, and is specifically for showing
  waiting messages.

        MsgWait( <cCaption>, <cTitle>, <nSeconds> )

  See SAMPLES\TestMsg.prg for a working sample.

* FiveWin VBX support has been enhanced, and now it is not needed to
  especify VBX clause when defining a DialogBox that it is going to use
  VBX controls. See SAMPLES\TestVbx4.prg.


!short: FiveWin 1.7 c                                                               
 FiveWin 1.7 c
 =============

* Feature missing: Dialogs were not processing WM_TIMER events. Now it is
  ok!

* Feature missing: Controls were not processing WM_RESIZE events. Now it
  is ok!

* TBitmap Class has been enhanced. Now it supports ZOOM IN and OUT effects.
  See SAMPLES\TestBmp1.prg. Many thanks to Jesus Iniesta for his help.

* TFile Class: Now working with empty files is Ok! A new Method ::AppendLn()
  added. See SAMPLES\TestFile.prg for a working sample.

* Enhancement: Now FiveWin works also as a DDE Server. Some work is still
  missing to support all features. Also, DDEML support is coming soon!
  See SAMPLES\DdeClien.prg and SAMPLES\DdeServe.prg. Run them together!

* Modification: TWBrowse:lEditCol() has been modified. Latest revisions
  inhabilited the capability of using the same variable edited as part
  of the VALID clause. It works ok now!

* New feature: Clause READONLY has been implemented also in standard GETs.
  See SAMPLES\TestKey.prg.

* Little bug: TMdiClient:Select() was not working with value 1. It was a
  >= instead of >. It is ok now.

* Enhancement: TBitmaps objects were not recognizing doble click with the
  mouse. We have modified TWindow:Register() so now all classes process
  the mouse doble click event. Remember that there is a CodeBlock bLDblClick
  that gets executed -if defined- when processing this event.

  bLDblClick receives three parameters: nRow, nCol, nFlags which are the
  row, col where the mouse was clicked and keyboard special keys flags
  -situation of the keyboard when doble clicking-.

  See SAMPLES\TestBmp.prg for an easy sample of doble clicking on a
  bitmap.

* New: TWBrowse:Report() METHOD !!! Now, you can automatically generate
  a report from a Browse, with exactly the same information as the browse.
  Generating a report from a browse is as easy as doing oBrw:Report().

               <oBrowse>:Report( <cTitle>, [<lPreview>] )

  By default <cTitle> is the title of the container window of the browse and
  lPreview is .t.. In just seconds you can generate all the printouts of
  your browses. Simply great!!! Thanks to Ignacio Ortiz for its superb help!

* Enhancements: METHODs KeyDown() and KeyChar() in Classes TGet and TMultiGet
  have been enhanced to have a higher coherent behavior with SetKey() features
  and READONLY features (both normal TGet and TMultiGet accept now READONLY
  clause).

* New: Function Bin2D() converts a string which holds a double into a number.
  It is usefull for working with ODBC when retrieving numbers.

                 Bin2D( <cDouble> )  --> nDouble

* Bug fixed: Due some late modifications, WHEN were not working properly.
  Now it is ok! We have modified TControl:GetDlgCode() and a new TWBrowse:
  GetDlgCode(). Thanks to Jose Gabriel Escobedo.

* Enhancement: ComboBox objects now also manage numeric values. You may do
  things like:

        REDEFINE COMBOBOX nVar ITEMS ...

        or

        REDEFINE COMBOBOX cVar ITEMS ...


!short: FiveWin 1.7 b                                                               
 FiveWin 1.7 b
 =============

* Bug fixed: Due to the higher execution speed, DDE was not working properly.
  It has been fixed, and now works ok!

* Bug fixed: Thanks God we found the icon erase background bug! Many, many
  thanks to Jes즧 Melgar. Try IDE.EXE, maximize it and iconize it later and
  see the icon, the background of the icon is ok! Many thanks!

* Bug fixed: Due to the much higher execution speed in 1.7, there was a
  strange behavior when closing NonModal DialogBoxes. It has been fixed.
  FiveWin 1.7 is extremelly fast! <g>

* New: Labels in FiveWin! Our friend Ignacio Ortiz de Zu쨒ga has developed
  a really nice and ellegant (and small!) sample for creating labels in
  FiveWin using the FiveWin report engine. Thanks again Ignacio!
  See SAMPLES\Label.prg

* New function: MsgRetryCancel( <cMsg> [,<cTitle>] ) --> lRetry. See
  SAMPLES\TestMsg.prg for a working sample.


!short: FiveWin 1.7                                                                 
 FiveWin 1.7
 ===========

* Bug fixed: TWorkArea FieldGet() and FieldPut() incorrect behaviors.
  Thanks to Harry Van Tassel.

* Enhancements: OClone(). OClone() is an internal Objects.LIB engine
  function to generate duplicated objects.

* Build.bat: We have increased the number of segments linking specifications
  for using Microsoft LINK. Remember: If you get a too many segments, just
  increase the /SE: parameter, or use a Clipper.EXE .CLP file to reduce
  the number of segments.

* New: MDI Childs may have now their own PullDown Menus which will be
  automatically used by the main window frame when the child is selected.
  Original implementation: Derk from Netherlands. Thanks Derk!

* Debugger: In previous release IV there was a bug a the source code
  was not visible from the debugger. Now it is Ok!

* New: Insert key toggles insert cursor on a GET. Now, when the user
  press insert key over a GET, the cursor changes to a blinking block.
  Pressing TAB to go to next GET does not keep this feature active
  (but we plan to support it ASAP!)

* Enhancements: Some WHEN and VALID clauses were missing in some
  controls. They have been added to all controls (well, those where
  it has sense to have them <g>).


!short: FiveWin 1.7 - PreRelease IV                                                 
 FiveWin 1.7 - PreRelease IV
=============================

* New!!!: We have already added support for Windows MAPI : Mail Services.
  See TestMail.prg for a sample. Now you may take advantage of NetWork
  mail system in Windows which it is really powerfull.

* VBXs support!!! Yes, we already manage Visual Basic VBXs files. See
  TestVbx_.prg for several samples. Probably this is the most important
  enhancement we have done lately to FiveWin!

  See documentation for a full explanation and use guides.


* There was a missing METHOD in TMultiGet Class:

  METHOD HScroll( nWParam, nLParam ) VIRTUAL

  So, MultiLine Gets were not working properly when using an
  horizontal scrollbar. Now it is ok!

  See TestMemo.prg for a full working sample,

* New Methods for TPrinter Class:

    TPrinter:SetLandscape()
    TPrinter:SetPortrait()
    TPrinter:SetCopies( nCopies )    // number of copies to generate

  to automatically select printer orientation from source code,
  without showing the DialogBox. See SAMPLES\TestPrn1.prg for
  a working sample.

* Bug fixed: The new resources control system implemented in FiveWin
  had a problem that only was activated when generating a lot of
  Dialog Boxes (several hundreds). It has been fixed and now it works
  perfect!

* Enhancement: We have adapted FiveWin ListBox controls to work also
  with numeric values. This means that now you may also do:

  local nValue := 2

  REDEFINE LISTBOX nValue ITEMS { "One", "Two", "Three", "Four" } ;
     ID ... OF oDlg ...

  And nValue will keep the ListBox selected position. Remember: ListBoxes
  now are usefull for managing string and numeric variables. We plan to
  do this also to ComboBoxes.

* Enhancements: Ignacio Ortiz has been working improving Report Engine
  speed (it was already fast, but now it is... incredible!). Also he
  has done very nice improvements on drawing lines, focus control, and
  more things... Thanks Ignacio! Simply fantastic!

* Enhancements: Error.log information has been increased. Now we tell
  you all the other active tasks and their names! We keep looking for
  a way to detect if double space is working -please let us know if
  you discover it!- We want to offer a really powerfull error.log info.

* Enhancements: MDIChild windows now accept all kind of user defined
  styles. You may have MDIChilds with no maximize button, no border,
  etc... See TestMDI5.prg for a working sample.

* New: Background process management! Now FiveWin offers you the
  possibility of controlling idle periods. Don't confuse idle actions
  with timers. Idle actions get processed when _there_is_nothing_ else
  to process. Modal dialog boxes don't produce Idle periods. See
  TestIdle.prg for a working sample.

* Error.log information has been enhanced: Now we include all the
  parameters and local variables available to all active procedures
  and functions. You will find this very helpfull when trying to detect
  an error.

* ButtonBar has been enhanced. Now you can specify TOP, LEFT, RIGHT or
  BOTTOM and the ButtonBar will show at that side. Also, if you click
  the right button of the mouse on it, it will appear a popup to
  manually select the new position.


!short: FiveWin 1.7 - PreRelease III                                                
 FiveWin 1.7 - PreRelease III
============================

* New function MsgAbout(): This function calls automatically the
  undocumented Windows function ShellAbout().

      MsgAbout( cMsg, cTitle )  --> nil

* Bug fixed: pressing "," in a Get caused an error. It was a missing
  parentesis in the source code. Now it is ok. Thanks to Miguel
  Escarra.

* Missing feature: Method TWBrowse::LButtonDown was not calling the
  default TWindow:LButtonDown which evals the bLClicked codeblock.
  It has been corrected, so now it is possible to define actions
  for bLClicked.

* New clause READONLY or NOMODIFY for GET ... MEMO controls. Now it is
  possible to show a MEMO without letting the user modify its contents.
  Using the :Disable() method is not a proper way because it also
  disable the scrollbar, so there is no way to review all the memo
  contents. This READONLY clause stop the user for writting on it,
  but the entire memo can be reviewed with normal navigation keys and
  using the scrollbar.

* Enhancement: COLORS.CH. We have replaced the calls to RGB() for their
  equivalents numeric constant values. This increase the initialization
  speed in Dialog Boxes when using user colors. Thanks to Jose Gabriel!

* Enhancement: Radio buttons where not properly initializing when
  placing them over windows -instead of Dialog boxes-. We have also
  added the clause SIZE nWidth, nHeight for properly controlling sizes
  when placing RADIOs over windows -without using resources-.
  Thanks John Stolte!

* New: Error.log file automatically created when an application error
  occurrs. This will help the programmer to detect users runtime errors.
  Feel free to enhance your error.log reported information.
  See source\function\errsysw.prg.

* Missing: PIXEL clause added to GROUP controls. Thanks to Hans M.
  Polsterer.

* New function: Report( [ oLbx ] ). It generates an automatic and elegant
  paged report from the current workarea, or from the oLbx:cAlias
  specified as parameter.

  Sample:

  USE Clients             or         @ ... LISTBOX oLbx ... FIELDS ... or
  Report()                           REDEFINE LISTBOX oLbx ... FIELDS...

                                     Report( oLbx )

  A complete and professional report generated in just few seconds !!!
  See browse.prg for source code. ( Thanks Ignacio Ortiz, you are great! )

* Bug corrected: TWindow::UpdateCoors() was not working properly. Now
  it is ok! See source\winapi\rects.c : GETCOORS() to check how we
  calculate it now.

* Bug corrected: TWindow::GetFont() was not correctly creating a TFont
  object, now it is ok! We properly get its nHeigth, nWidth and lBold.
  Thanks to Manuel Pino !!!

* Enhancement: ButtonBars were not showing the 'white border' when
  a button pressed. It has been corrected!

* Bug corrected: TRadMenu:End() was calling Super:End() (and there was
  no super!) It is Ok now. Thanks to Miguel Oliveira.

* Enhancements: Under very extreme low memory conditions, sometimes
  we were producing an error "Not defined method :HandleEvent". It has
  been corrected. Now it is ok! It was related to SetProp() and GetProp()
  Windows API behavior. Also we have added also RemoveProp() calls.
  Thanks to Javier Alcazar!

* Enhancements: new clause ON CHANGE for GETs controls. Now it is
  possible to execute a codeblock everytime a key is pressed over a
  GET and you may perform any action and also you can avoid to
  further process that key:

    ... GET ...  ON CHANGE lMyFunc( nKey, nFlags, Self )

  lMyFunc() receives three parameters: nKey, nFlags, Self. And it
  has to return .t. if you want that key to be processed or .f. if
  you want to ignore it. Thanks to Javier Alcazar!

* New: PEN commands support:

    DEFINE PEN <oPen> ;
       [ STYLE <nStyle> ] ;
       [ WIDTH <nWidth> ] ;
       [ COLOR <nColor> ]

    To destroy a Pen, do:       oPen:End() or oPen:Release()

* New function: GetWinDir() returns the Windows directory in the
  computer.

* Browse enhancements:

  - Standard FiveWin browse.prg function has been enhanced to allow
  doble click in-cell editing. Review this sources to learn how
  to do easy in-cell editing in your applications.

  - New TBrowse:nAtCol() method. It returns the browse column correspon-
  ding to a pixel-column position. See Browse.prg how to use it to
  easily doing in-cell editing.

  - Enhacement: Now TBrowse-columns mouse resizing works even if the
  browse has been already scrolled to the right or left. Also the mouse
  cursor changes in those circunstances.

* New Report capabilities:

  - Automatic PREVIEW capability: Now you may review ALL your report
    on screen before sending it to the printer. You may go forward and
    backwards, and print only the pages that you want.

  - TO FILE ... output generation. Which produces an ascii output
    of the report.

  Many thanks to Ignacio Ortiz who is doing an excelent job enhancing
  FiveWin. Thanks Ignacio.

* DDE: Has been enhanced. New clause VALID. See DDE.ch. The VALID
  clause is executed when the connection is ending.

* New: CA-Ret DDE management: See SAMPLES\CARET.PRG.

* Bug: REDEFINE GET ... MEMO ... UPDATE was not working properly. Now it
  is ok.

* clause ON CHANGE on Browses: You may NOT use SysRefresh() inside clauses
  ON CHANGE or it will produce an incorrect behavior when clicking on its
  scrollbars. We don't know why ? But it happens. Remember: Don't use
  SysRefresh() on Browse ON CHANGE.

* Modification: We have eliminated the ::aButtons DATA of the ButtonBar
  Class. Now we are using standard aControls DATA.

* VERY IMPORTANT: We have done a major modification in order to get better
  coherency and design simplicity, and because in previous versions of
  FiveWin there was confusion about :End(), :Release(), and RELEASE:

  Now there is just one RELEASE command, which gets translated to:

  RELEASE <ClassName> <oObject> => <oObject>:End(); <oObject> := nil

  You may RELEASE several same class objects at the same time:

  RELEASE <ClassName> <oObject1>, <oObject2>, ...

  The End() METHOD is a general purpouse ending system. :End() will check
  VALID clause if defined and in some circunstances :End() will generate a
  :Destroy() call, which will do the necessary resources cleaning, handles
  cleaning, etc...

  Windows generates for some objects the WM_DESTROY message, and now we call
  :Destroy() there automatically.

  Change all your :Release() calls to :End() calls. We apologize for the
  inconveniences and possible bugs you may get cause this, but we are
  convince this way will be much better and easy to understand from now on.

  Now, we may use :End() for ending any kind of object in FiveWin.

* Modifications and enhancements: TGet class has been modified to automatically
  update ::nPos DATA. Also, :SetPos() method has been modified.

* Incremental searches in browses: There is a demo of building incremental
  searches. See SAMPLES\BUSSINES\Customer.prg

* New printing capabilities: Beta-Testers of version 1.7 liked so much
  FW reports that they requested that power for any print-out, and it is
  done!

  Use:           PRINT ... PREVIEW
                    ...
                 ENDPRINT

  This means that you want to preview that printing job! Remember to include
  Preview.dll to access the resources used there. Try it! It is cool!

  From inside the preview you may step pages forward and backwards and you
  may print just any page you want. It is necessary that the SET TEMP=
  directory has been declared in autoexec.bat to send there the temporary
  files.

* Enhancement: Error.log. When a error ocurrs we automatically generate
  Error.log, as this will be very helpfull to track your users run-time
  mistakes and problems. We have enhanced the information we produce there,
  and we will like very much if you report us what kind of extra information
  you will like to find there.

* Modifications and enhancement: Main TWindow:HandleEvent() has been
  redesign to only call METHODs from inside it, this has two main direct
  benefits: HandleEvent() is really now Object Oriented, so you may
  easily inherit and redefine it and, also, this will let us in short to
  port it to C language. As HandleEvent() is one of the METHODs more often
  called, this will increase execution speed very much. We want FiveWin
  to be extremelly fast and small !!!

* SOMETHING REALLY GREAT !!!  We have coded Window:HandleEvent() all in
  C code. We were sure we were going to have better speed but... this is
  quite incredible !!! Try your applications again now! Uhhhhhh! What
  a really nice speed ! FiveWin is now extremelly fast !!! And we are
  working to make it faster and faster! Still we have to do the same in
  TDialog and TControl... so we are going to be much faster !!! <g>

* Going for more speed: We have written a 286 version of Objects.LIB and
  now has been placed inside FiveWin !!! Much better! We are preparing a
  new 386 version which will be added soon!

* Bug: Class TWorkArea:ReCall() has been corrected. Now it is ok! Thanks
  very much to Harry Vantassell who is really helping us sending many
  comments and enhancements. Thanks a lot Harry!

* Once more we really want to thank all our friends who are really helping
  us to go ahead. Five project is for all of us! Thanks so much,

  Thanks to our excelent distributors who are taking care of us like ours
  big brothers and excelent friends. Really thanks to:

         * John Stolte        - Hey, John, you are really good! <g>
         * Miguel Oliveira    - our big friend against 'coyotes' <g>
         * Max Bressel        - An excelent expert and friend!
         * Benito Martinez    - A superb manager to make Five a reality!
         * Gerassimus         - Our Greece great friend
         * Franco Scannapieco - A great friend in Italy
         * Julio, Ariel, and many, many others...

  And more and more people who are taking the Five Project with the same
  illusion as we do. All of you are the energy that fills our engines!
  Thanks!

* Enhancement: We have developed a new function ASend() which speed up
  very much the process of sending the same message to an array of
  objects -now we use it in TDialog:Init()- It avoids evaluating a
  code block and it is really fast! We want to speed up the Dialog Boxes
  now as much as possible, specially those that uses many, many controls
  (remember Windows API has a limit of 255 controls by Dialog Box! <g>)

* Ok, we did it: Now TWindow, TDialog and TControl :HandleEvent() METHODs
  are written in C language. Execution speed has been increased very much.
  Now you have a very good reason to keep your loved 386! <g>
  And as the whole system is getting more and more stable we plan to keep
  porting big parts to C language to increase speed and reduce size...

* File Manager Drop-Files management! Now you may easily perform actions
  when receiving dropped files from Window File Manager. See TestDrop.prg
  and TestDrp2.prg samples. You could never imagine this may be so easy!

* Enhancement: All FiveWin Msg...() functions, have been modified to
  automatically convert any kind of data into a string. So, now, when
  you want to display a Msg with a date, numeric, logical, etc... don't
  worry for converting it into a string.
  Let's be as easy and simple as possible! <g>


!short: FiveWin 1.6 e                                                               
 FiveWin 1.6 e
=============

* Bug corrected: We were not initializing ::oFont in MdiFrame and
  MdiClient. This bug only appeared when trying to place a Bitmap
  on the oWndClient DATA of a MdiFrame window.

* Enhancement: The constructor method ::New() of the Class TPrinter
  now support creating the object without showing the typicall
  Print dialog Box. So, it is possible to start a print work without
  showing that dialog box. See PRINT.CH for new syntax added.

* Missing: Clause MESSAGE was missing on ComboBox! It has been
  corrected. Thanks Garry!

* TIcon::SetName() was not working properly. Check now TestIco.prg and
  it will work fine!

* Enhancement: PIXEL clause was missing at @ ... LISTBOX ... FIELDS.
  Now it is ok.

* New method ::Enable() and ::Disable() for RadMenu objects. They
  work on every Radio contained in the RadMenu object.

* Bug corrected: ComboBoxes when losing focus where not updating properly
  its ::nAt data.

* New CodeBlock DATA for Dialog Boxes: ::bStart. This CodeBlock if exists
  will be evaluated after the first time the Dialog Box is painted. Here
  you have a great chance to start executing some processes that can not
  be issued from the ON INIT clause, because at that time the Dialog Box
  is not already visible !!! See the source code of MsgMeter.prg to see
  an example of use.

* New user interface Message function: MsgMeter(). This function shows a
  Modal Dialog Box which has a meter and a cancel button. This is the
  perfect funtion for building indexes, searches, etc... You have to
  supply this function a CodeBlock that will be executed as soon as the
  message appears on the screen:

         MsgMeter( bAction, cMessage, cTitle )

  bAction is a CodeBlock which receives the following parameters:

          bAction  ==>  { | oMeter, oText, oDlg, lEnd | ;
                          MyFunction( oMeter, oText, oDlg, @lEnd ) }

  oMeter is the Meter object, so you can change its ::nTotal represented
  value and also you can ::Set() it new values. Don't forget to call
  SysRefresh() when you change its value to give Windows some time to
  stabilize (Clipper runs faster than Windows!!!). oText is the SAY object,
  so you can change its contents asn many times as you want. oDlg is the
  Dialog Box itself, do what you want with it! And lEnd is a variable by
  reference which will change as soon as the user press cancel.

  The source code of MsgMeter() is supplied in \SOURCE\FUNCTION\MsgMeter.prg
  feel free to study and modify it if you need to.

* Bug corrected: VALID clause in Non-modal Dialog Boxes were being tested
  many times, when returning .f.. Now it is ok.

* Enhancement: New Clause OF <oDevice> for Fonts creation:
  Many of you inform us that the same font on diferent printers returned
  different sizes. Now you can easily avoid this problem:

      PRINT oPrn NAME "MyDoc"

         DEFINE FONT oFont NAME "Arial" SIZE 0, -20 OF oPrn

         ...

  This will automatically create a specific font of -20 points for THAT
  specific printer !!!

* Bug corrected: Bitmaps with automatic scroll were not working when only
  one scrollbar (vertical or horizontal) were shown. Now it is working ok!

* TBrowse::lEditCol() method is ready !!! Now you can edit Browse cells on
  the fly!

  Syntax:  oBrw:lEditCol( nCol, @uVar, cPicture, bValid, nClrFore, nClrBack )

  Parameters:

  nCol            The column of the browse to be edited
  uVar            A variable passed by reference. Remember to use @Var
  cPicture        The picture for the Get
  bValid          the get validation
  nClrFore,       The colors of the Get, by default we use Browse colors
  nClrBack

  Return:         .t. or .f. if the Get was completed or Esc was pressed

  The new value for uVar gets automatically stored (this is why you have
  to use it by reference) in uVar. If the user cancel the operation, uVar
  again will have the same original value before editing.

  Example:

              local cName := "Hello"

              if oBrw:lEditCol( 2, @cName,,;
                 { || MsgInfo( "Hello" ), .t. } )

* Bug corrected: SAYs with fonts produced _blinking_ due to a repaint of its
  container. In TWindow::SetFont we removed the :Refresh() call. Corrected!
  If you want the new font to appear inmeadiately after changing it, then
  :Refresh() it.

* Bug corrected: when pressing the "." or "," in a numeric GET with
  ( i.e.) PICTURE "999.99", the position of the cursor and the visible
  result was not properly updated. Now it is ok!

* Enhancement: New resizing capability automatically available from Browses.
  Now you can click on a browse column border and resize the column just
  draging with the mouse. Really usefull! Try it!

* New! New! New!!! The incredible FiveWin Report Engine is working!!!
  Thanks very much to our friend and excelent programmer Ignacio Ortiz de
  Zu쨒ga who did a super job!

  The FiveWin Report Engine has a powerfull xBase syntax -all based on
  true Objects- which lets produce very easily reports very, very
  sophisticated. In just two minutes of having a look at its syntax
  you will learn how to use them. In fact... you already know how to
  use them! (the magic of FiveWin and OOPS!)

  See TestRpt(x).prg demos for a complete review! Your FiveWin applications
  will produce incredible reports with a minimum effort by your side!

* bug corrected: We were loosing Windows resource-memory. It was a quite
  hidden bug but now it is 100% ok. We could not solve this before because
  we did not find any way to inspect it. Now it is working perfect!

* Warning, warning, warning !!! We have changed some parameters order in
  the SAY.prg Class. If you are using SAYs objects directly you may have
  troubles! Please check that your parameters (only for those of you who
  uses :New() and :Redefine() directly).

  Now we have very powerfull features in SAY objects:

                CENTERED, RIGHT, BORDER, SHADED, BOX, RAISED

* WHEN clause it is working!!! Thanks very much to Jose Gabriel Escobedo
  for helping us enhancing FiveWin syntax. Gracias Jose.

  Warning: Mouse driven enviroments as Windows do not allow to execute
  code in WHEN clauses. WHEN _only_ controls if a control must be shown
  disabled or enabled. Do not perform any other tasks there !!!

  Two new methods added:

  TWindow():AEvalWhen()    It is automatically called to :Enable() .or.
                           :Disable() controls when the window or
                           dialog is being activated.

  TControl():ForNext()     It evals the WHEN clause of the next or previous
                           control to get focus, and disable or enable it
                           acording to its WHEN logic result.

  One new DATA added in
  TWindow() class:

  TWindow():nLastKey       It keeps the value of the latest keyboard
                           navigation value pressed.

* New DBMS classes and Data dictionaries: Thanks very much to Jose
  Mariano Rodriguez. Some of them are still under development, but
  it is an excelent approach to modern DBMS for those of you who are
  interested in data dictionaries for application development.
  Thanks Jose!

* TRtfFile Class enhancements: Thanks to Manolo from I2 for these new
  RTF supported features. See RtfFile.prg for details. Thanks Manuel!

* Warning: We have detected that Clipper DbCreate() does not close
  (at least in Windows) the handle of the file that creates. This means
  that in some circunstances where you create many new files, you may
  don't have enough availables file handles. The solution to this is
  to call DbClose() or DbCloseAll() which does close the just created
  new DBF handle.


!short: FiveWin 1.6 d                                                               
 FiveWin 1.6 d
=============

* Bug corrected: numeric GET correctly updates now when loosing focus.

* Bug corrected: moving left or right in numeric gets now properly
  updates cursor position.

* Bug corrected: We were not properly controlling Bad Dates on a date
  GET. Now it is working ok! See TestDat2.prg sample.

* Enhancement: Now we you finish typing in a GET -i.e.: when you finish
  typing a date- the focus automatically jumps to the next control.
  Like in Clipper MsDos! See TestDat2.prg sample.

* Enhancement: Now it is possible to set the message ::cMsg of any control
  so when the mouse moves over the control the message bar of the container
  window of the control will show on its message bar (if defined) the
  control message. This is very usefull to let the user identify the
  functionality of all the differents elements of the screen just moving
  the mouse over them. See IDE.exe for a good sample.

  The message of the control also gets automatically selected when the
  control gets the focus. So the message stored in the data ::cMsg of
  a control will be shown when the mouse moves over it and also when the
  control gets focused.



!short: FiveWin 1.6 c                                                               
 FiveWin 1.6 c
=============

* Bug corrected: When pressing the up or down arrows on the ScrollBar of
  a ListBox a Clipper error was generated. Now it is Ok! Thanks Garry &
  thanks Manuel Pino! See TestLbx.prg for a sample.

* TestPop.prg sample has been corrected, now it is working properly.
  nRow, nCol coordinates were mixed, Thanks John.

* Popup menus may be created now also from resources. This is a feature
  Windows does not offer, but FiveWin yes! Now you can easily store
  Popup Menus in resources. See TestPop2.prg for a sample.

* Enhanced behavior: Ctrl-F4 and Ctrl-F6 keystrokes are properly working
  now on MdiChilds Windows !!!

* Today we got an incredible hidden bug! When were adjust the ButtonBar
  we were changing its zorder !!! My God! Now it is over and remember
  it for the future: always use SWP_NOZORDER when calling SetWindowPos(),
  you will sleep much better! <g>

* New MESSAGE clause added to all controls! Now you may specify message
  information for every GET, CHECKBOX, LISTBOX, etc... Remember that for
  using this capability you have you have to specify which window is the
  owner of the Dialog Box:

                // OF oWnd let us show the messages at oWnd

               DEFINE DIALOG oDlg RESOURCE "Clients" OF oWnd

                                    ...

               REDEFINE GET ... ...    MESSAGE "Whatever..."


* TextMetrics in Dialog Boxes has been corrected!  Thanks Derk and Miguel!
  Now, the dimensions of a Dialog Box and Windows dont change if you change
  the screen mode.

* New clause CENTERED added to SET MESSAGE OF oWnd TO ...
  Thanks Edmundo !!!

               SET MESSAGE OF oWnd TO "Whatever..." CENTERED

* Hot, hot, hot!!! We have a new DataBase Class that lets you manage
  DataBase as Objects. You may access the Fields as DATA of the DataBase
  Object:

        USE MyDbf

        DATABASE oDbf     // Automatically builted from the Alias
                          // We automatically inherit a new Class
                          // from TDataBase and we automatically
                          // instanciate an Object!

        @ nRow, nCol GET oDbf:Name OF oWnd

  We access the fields as DATA ! So there is no need to declare an keep
  local variables!  The information of the DataBase is automatically
  managed through a buffer ! So this is the perfect way to access DataBases
  in NetWorks!  Try them !  See DBF01.prg. FiveWin will follow this system
  more and more in the future.

* New method :Update() added in Class TWindow. :Update() checks which
  of its controls need to be :Refresh()ed. This is extremelly usefull
  to avoid declaring controls Object references in Dialog Boxes:

        We usually did:

        local oName

        REDEFINE GET oName VAR cName ID ... OF ...


        Now we can simply do:

        REDEFINE GET cName ID ... OF ...  UPDATE


        Later, when we want to repaint these controls, we just have to
        do:

        oDlg:Update()

        and only the UPDATE controls will be :Refresh()ed.

  Resuming: :Update() method is a selective :Refresh() that only works
  on some controls (those which have been declared with UPDATE clause).
  It is a very simple system ! That let us reduce a lot of code.

  Try this powerfull feature with the new DataBase Class and you will
  avoid a lot of writting code in your programs!!! Review the sample
  DBF01.prg and you will see how easy it is !!!

  We will follow this techniques more and more in the future!

 * New method :Set3DLook() added to Controls. Now you can make 3D look
   any control no matter if they are placed on a Dialog Box (in that
   case it gets 3D automatically if you did SET 3DLOOK ON).

 * Bug corrected: We were not default initializing control's :nId before
   calling -internally- ::DefControl(). Now it is ok! This only affected
   people who create Dialog Boxes from source code -You all should use
   Borland's Resource Workshop! and resources <g>-

 * Enhancement: Now it is possible to :End() a Window from a floating
   PopupMenu! Thanks Miguel Oliveira. It was quite sofisticated but...
   we did it!  See TestPop2.prg for a sample.

 * REDEFINE SAY clause has been enhanced to use both VAR | PROMPT, also
   you may specify FONT clause and the Say object gets automatically
   related with the shown value (we create a bSETGET codeblock!) , so
   changing the value and doing :Refresh() is ok to redisplay the SAY.

 * See MMedia.bat and MMedia files for an incredible MultiMedia demo
   completelly builted with FiveWin. -Configure your in screen in
   800x600 to test it better- Thanks Santi for this excelent FiveWin
   demo!   We are MultiMedia 100% !

 * New method added to TWindow base Class, ::Iconize() automatically
   iconizes a Window. Also a new method has been added to MDIFrame
   Windows, ::IconizeAll() which ::Iconize() all MDIChild Windows.
   Also a new default option has been added to standard MDI menu:
   "&Iconize All" which executes ::IconizeAll() method.

 * New method added to Menu Class, ::AddMdi(), automatically creates
   the standard MDI popup to control MDI Child windows from a MDI
   enviroment. See TestRpt1.prg to see how easy and powerfull is this
   new method!



!short: FiveWin 1.6 b                                                               
 FiveWin 1.6 b
=============

* New bMMoved data added to base Class TWindow. Now we can defined actions
to performed when the mouse is moved:

              oWnd:bMMoved = { | nRow, nCol, nKeyFlags | ... }

* Dialogs ON INIT Clause is now working. When and Init clauses were
incorrectly managed. WHEN shoud avoid Dialog Execution and INIT, now,
properly initializes if defined. Thanks Satiago Perez!

* We have added control to Windows WM_QUERYENDSESSION, that is, the message
Windows sends to check if we allow to finish Windows execution. When we
receive this message we try to :End() the window or the DialogBox. If
successfully then we allow Windows to End(). Try this:

     DEFINE WINDOW oWnd FROM 1, 1 TO 10, 50 TITLE "You can not end me!"

     ACTIVATE WINDOW oWnd ;
        VALID MsgYesNo( "Do we let Windows end ?" )

Execute it and try to End Windows!

* ON [ LEFT ] DBLCLICK clause added to standard ListBoxes! It was missing.

* ADJUST clause on ButtonBitmaps was missing! Now it is ok.

* The Windows Help designer at the IDE is working! Now you may easily
  create Windows Help files without having to use any word processor!
  Extremely easy to build documentation for applications! The Norton
  Guides generation support will be added pretty soon.

* Now to refresh a SAY on screen you may just change the associated
  variable value and then do :Refresh() to the SAY Object. We have added
  this behavior to standarize it with the rest of Controls we manage.

  Also, it is possible to especify VAR or PROMPT, as now we will reflect
  automatically -when :Refresh()ing- the new values of the VARiable.

* We already have SET KEYs !!! like in MsDos !!! My God! How easy was it
  to implement it and how blind we were <g> !!! Enjoy SET KEY power !!!
  Look at TestKeys.prg example.

* The debugger is working !!!  Just compile with /b and... uhhhhhhh!!!
  We have modified BUILD.BAT to easily debug a program, just do:

                          BUILD MyProg /b

   The whole debugger has been written using FiveWin !!! We are going to
   provide all the debugger source code so you will be able to customize
   the debugger to your own needs !

 * The Windows Help files generator is working from the IDE !!! Try it!
   You will be able to write HLP files in a matter of minutes... !!!
   You need the utility HC.EXE or HC31.EXE to generate the HLPs from
   inside the IDE. Look at your Borland\bin directories or at Microsoft.
   You may even place bitmaps in your HLPs very easily.

 * The Dialog Box designer from inside the IDE is almost ready. Start
   testing it, and see how quicly FiveWin generates source code !!!
   Now we must add VALID, etc... capabilities. We are working on it.

 * A new expression Builder is almost ready. Review Indexes from the IDE.
   To build an expression just do:

              cGetExpression( [ cOldExpression ] [, cTitle ] )

   with expression-syntax checking and the ability to review all workareas
   fields, variables, ...

 * New method :SetFore() for Bitmaps Objects. This Method forces the
   Bitmap to implement its own palette, so its image gets properly
   -with its colors- displayed. See FwRes.prg for an example.

 * What is the next ? We go for documentation... yes, very soon, as
   quickly as we can. And meanwhile we are preparing something really
   hot: Drag&Drop FiveWin own interface. Visual Programming is nothing
   for what you are going to see very soon...  The next step in CASE
   technologies is about to arrive... stay tuned! <g>

 * We have been reducing the .CH files trying to avoid Clipper 5.01
   memory overbooked problem when compiling. Sorry for this. We were
   using version 5.2 and we forgot about 5.01 problems. If you get
   this problem try to remove unnecessary CH and, if you can, use
   Clipper 5.2 !

 * We want to thank all the people who is helping us. From all countries
   people is providing very important help to develop FiveWin. An
   incredible Reporting engine is about to be added coming from Madrid
   -thanks Ignacio!-, a superb-Browse is near to be ready coming from USA
   -thanks Kevin!-, an incredible Data-Driven-Dictionary is beeing builted
   -thanks J. Mariano!-, the power to read and write RCs from FiveWin is
   coming from Netherlands -thanks Derk!- Thanks Alan Ashendorf for his
   support, his ideas and experience. Thanks all of you for putting
   your heart on this project!

   

!short: FiveWin 1.6                                                                 
 FiveWin 1.6
===========

* New RecAdd() method for TWBrowse. Adds a new record to the Alias where
  the TWBrowse was created. RecAdd() evals a codeblock placed at the
  instvar :bAdd. Change that codeblock to suit your particular needs
  for adding records from inside the Browse.

* New UpStable() method for TWBrowse. This avoid the typicall Clipper
  Browse bug when seeking to an above item in the Browse. Call :UpStable()
  to properly stabilize browses in those situations.

* Bug fixed: TWindow:Move() method was not updating the Window coors!
  Now it is working fine.

* Bug fixed: ListBox created from source code were not properly initializing
  its items. Now it is ok. A new Method added: TListBox:Default() which
  initializes items from source code and form resources also.

* We are removing the 3D effects we implemented in previous versions of
  FiveWin. Much better to use CTL3D.DLL so we will move easily to next
  Windows 4 - named Chicago.

* New INDEXED FILTERS for Browses !!! Now you can use Indexed Filters,
  wich are extremely fast- with Browses. This means, you may especify
  a selection to be only shown on the Browse:

         @ ..., ... LISTBOX ... BROWSE ...
           ...
           SELECT <cField> FOR <uVal1> [ TO <uVal> ]


  cField is the name of the Index Key field. FiveWin will do a SEEK based
  on cField on the current INDEX. The SEEKed expression is <uVal1> and
  the Browse will show from that value up to the next change of the Index Key
  or <uVal2> if especified.

  Before ACTIVATING the Dialog where the Browse control is Shown, you MUST
  SEEK the <uVal1> expression to properly place the RecNo of the DataBase.

  See FwBrow.prg for a complete demo of the new powerfull Clause!!!

  Also a new method :SetFilter() has been implemented in Browses, letting
  you change the indexed filter on the fly!!! Extremely powerfull!

* Bug fixed: INI file is working fine now! Sorry, we forgot about it.
  See the new IDE.prg for a complete example about how to manage them.
  Extremely easy!

* Fonts for Browses! Now you may specify any font to be used by the Browse.
  Uhhhh! Really elegant!

* VALID for Windows: We are implementing VALIDations for :End() ing Windows.
  MDI Child already support them. Very, very usefull when you have to close
  an area before ending the Window.

* We are almost ready for Trees! in FiveWin! Like the ones you may see at
  Chicago or at OS2 ! Now you can review the information like a 'tree':
  opening and closing the tree extensions. Trees are implemented on Clipper
  Linked Lists (yes, like C ones!). We are going to inherit from TWBrowse.

* 24/04/94: Objects 3.0 has been added to FiveWin. Now FiveWin is much faster
  , less stack consuming and has a _lot_ of new features. We will cover in
  the documentation all the new aspects of Objects 3.0 engine!

* New Clause 3D for ButtonBars. Now you can have the same look as Borland's
  ButtonBars. Try it with BUTTONSIZE clause also, to make them larger!

* CursorHand() now let show the nice WinHelp Hand Cursor! It is not necessary
  to load any DLL as we create the cursor inside FiveWin.lib !!!

* Also try CursorCatch()

* SetDate( nDay, nMonth, nYear ) new function to change System Date from
  Windows.

  Example: SetDate( 25, 11, 1982 )  --> returns .t. if success

* Bug fixed in xPad...() functions. Now we use as default Chr(32) instead of 32.

* Bug fixed in Popup Menus: They worked fine but they did not process
  actions. Thanks Miguel!

* cGetFile() have been enhanced! Now you may use all these ways:

              cGetFile( "*.dbf", "Select a DataBase" )

              or

              cGetFile( "Clipper DataBase (*.dbf) | *.dbf |" + ;
                        "Paradox DataBase (*.db) | *.db |" + ;
                        "ODBC DataBase (*.odb) | *.odb", "Select a DataBase" )

In this last example you may specify a third parameter to indicate in which
kind of file you want to start:

              cGetFile( "Clipper DataBase (*.dbf) | *.dbf |" + ;
                        "Paradox DataBase (*.db) | *.db |" + ;
                        "ODBC DataBase (*.odb) | *.odb",;
                        "Select a DataBase", 2 )      // Starts with Paradox

* Colors standarization: We are using for GETs now the standard colors
at Windows. You may select any color -from @ or from REDEFINE- on GETs
-normal GETs and multiline GETs-. Thanks to Jon Kilburn!

* We have implemented COLOR clause in all Windows and almost all controls.
 Also, now it is possible to use COLOR <cXBASEColor>, the standard color
 strings format:

     ... COLOR "W+/B"

 See Color Management at the documentation NG file.

* Warning, warning, warning:
  We have been checking the new Borland's C++ 4.0 BWCC.DLL and
  be aware that we have found some problems with colors in controls.
  It seems the new BWCC.DLL does not work properly, or at least in
  the same manner as in the previous version. We needed one full day
  work to find this bug!!!  Be aware of the BWCC.DLL you use !!!

* ChooseColor() has been changed. Now it returns the nRGBColor we provide
it in case the user selects cancel.

* Bug fixed: ::BeginPaint() was not initializing ::nPaintCount. Now it is
  Ok!

* VALID clause added to Windows. Try TestEnd.prg. Now we can decide if
  allow to :End() a Window.

* VALID clause working also in MDI Windows! The main MDI Frame Window will
  request its MDI Childs to VALID before ending :End() them.

* We are controlling Palettes!!! When a bitmap gets focus also set its
  palette. All is done automatically!

* :SelFont() method has been enhanced. Now we automatically detect previous
  font used by the Object, and also we select the color the user chooses.

* Focus management changed: Now we have :SetFocus(), :GotFocus() and
  :LostFocus() methods.

  To give the focus to a control just do:  oCtrl:SetFocus()

* Automatic Cursors management for all Windows and controls. Now you can
  assign a nice mouse cursor to be automatically selected when the mouse
  is over your control or window.

  See TestCurs.prg

* Bug corrected: We were duplicating ComboBox items when initializing.
  This was already solved in ListBox Class but it was missing in ComboBox.
  Sorry!

* ODBC is working: Yes! See TestODBC.prg for a full working demo. In previous
versions we had the bug ODBC only manages LONG handles! God! Now it is
going super! We have been testing it with the xBase ODBC driver provided
with Borland's Visual Solutions Pack. Please, if you develop some ODBC
examples send some to us. Thanks!

* Communications are working! See TestComm.prg for a full working version.
We would like to add ZModem support to FiveWin. If you please know about
some freeware zmodem code please let us know! Thanks!

* New Methods: :Hide() and Show() . They have been implemented at TWindow
base Class, so all Objects which classes inherits from TWindow may use
them! Hide() hides an Object and Show() shows the Object <g>.

* New methods: :Save() for TGet and TMultiGet Class. They updates the
Clipper character related variable with the screen control text.


!short: FiveWin 1.5                                                                 
 FiveWin 1.5
===========

 * Reset() method added to TComboBox Class -it was missing!- It resets
   the contents of a ComboBox and also empties the associated array.

 * TRadMenu:Refresh() method added. Also, TRadio:lIsChecked() method added.

 * Automatic defaults values for TRadMenu -to 1- and for TCheckBox -to .f.-.
   This avoid crashing the system when the user forgets to properly
   initialize variables.

 * New PIXEL clause now added to ScrollBars. We are testing this Clause to
   be soon implemented to all controls.

 * New scrolling methods for Bitmaps!!! Really nice! You may Scroll a bitmap
   in the four directions inside its own area.

   ::ScrollUp(), ::ScrollDown(), ::ScrollLeft(), ::ScrollRight()

   You may review now bitmaps bigger than their visible area !!!

 * All the above -Scrolling Bitmaps- it is automatically! executed when
   doing a @ ..., ... BITMAP ... SCROLL...      It is extremely easy!

 * Bug fixed: Missing correct initialization when doing @ ...,... SCROLLBAR.
   Now everything goes fine!

 * New INLINE clause added in OBJECTS.CH. INLINE Clause gets converted into
   a BLOCK clause but it is much more easier to manage. We are preparing
   FiveWin for the new OBJECTS 3.0 engine will be included in next version
   of FiveWin. We will replace BLOCK clauses into INLINE -better xBase!-

 * More capabilities: Max number of INSTVARS -DATA- now up to 100!
   Thanks Miguel! If someone needs more, please say. -Those enhancements
   have been done inside OBJECTS engine modules- If you are using OBJECTS
   also for your Clipper DOS Classes, you just need DATA.OBJ from inside
   FiveWin. Take it using LIB.EXE FiveWin * Data,,

*  ADJUST clause for Bitmaps! Now, it is possible to make a Bitmap adjust
   its picture to its own visible area!

   @ nRow, nCol BITMAP oBmp ... ADJUST ...

   or just doing:

   oBmp:lStretch = .t.
   oBmp:Refresh()

   or

   oBmp:lStretch = .f.
   oBmp:Refresh()

   to restore it to its normal state!

* Bug correction: in Browses ON THUMBPOS did not activate ON CHANGE clause.
  Now it works correctly!


!short: FiveWin 1.5 b                                                               
 FiveWin 1.5 b
=============

* DOUBLES numbers params added to CallDll() and DLL.ch.
  Thanks Miguel!

* New BUTTONSIZE clause for BUTTONBARs: Now it is possible to define the
  desired width and height of the Buttons of the ButtonBar when creating
  the ButtonBar.

          DEFINE BUTTONBAR oBar BUTTONSIZE 80, 40 OF oWnd

  Also, they have been enhanced to support 256 colors! and the ability to
  adjust automatically its size to the whole area of the button:

          DEFINE BUTTON OF oBar ...  ADJUST

* We are already using intensively the OOPS clause INLINE. It is very
  fast and very nice xBase!

* Bug fixed: Method TTimer:DeActivate(). Now it is ok. Thanks Javier Blasco!

* New Pixel param added to TWindow:Say() method:

       oWnd:Say( nRow, nCol, cText, nClrText, nClrBack, oFont, lPixel )

  If lPixel is .t. FiveWin uses pixels instead of characters.


!short: FiveWin 1.4                                                                 
 FiveWin 1.4
===========

 * New: PullDown Menu from resources !!! And also, MenuItems bitmaps
   from resources.


 * Bug: cCtrl2Chr() admits now any length (always less than 64Ks). This
   was detected when doing MemoEdits from source code with char variables
   bigger than 200 characters:

               @ nRow, nCol GET cText DIALOG oDlg MULTILINE


 * Bug: We detect when compiling with /b and avoid errors. We are working on
   the debugger for Windows.


 * WndCenter() now accepts two parameteres:

        1. The hWnd of the Window to be centered.
        2. The hWnd of the Parent Window. GetDesktopWindow By default.

   A new method added to TWindow:  Center( oWnd )


 * Clause ON CHANGE / ON CLICK added to RadioButtons!


 * SET RESOURCES now admits as many DLLs as we need. They automatically
   get freed when application ends. We may select an active RESOURCES DLL
   doing SET RESOURCES TO ...  -previously opened DLL-.


 * New clause for Scrollbars: ON THUMBPOS YourAction( nPos )

     This event is generated when the user moves the Scrollbar Thumb
     and places it into a new position.

     We automatically supply nPos parameter wich is the ScrollBar
     Bar in Range new nPosition. It is responsability of you to let
     the scrollbar updates its thumb:

     REDEFINE SCROLLBAR oScrollBar ...
       ...

     ON THUMBPOS ( DbSkip( nPos - RecNo() ),;     // To move through DBF
                   oScrollBar:SetPos( nPos ) )    // We let the ScrollBar
                                                  // updates its pos

     If you don't clearly understand what means nPos, try this:

     ON THUMBPOS MsgInfo( Str( nPos ) )


 * New and incredible powerfull print methods!!! :

   :Print( oPrint, nRow, nCol, nScale )     // Print any Window on printer oPrn

   :HardCopy( nScale )    // Makes a hardcopy of any Window, Dialog, Control,
                          // Bitmap, etc... to printer

   They admit a nScale factor! to set the desire size we want!

   -try FwBorl.prg and press Print button on Clients Dialog Box! Really hot!


 * New Clause ON CLICK / ON CHANGE for Browses.


 * New Clauses ON [ LEFT ] CLICK and ON RIGHT CLICK for Bitmaps!

   Three parameters are automatically supplied: nRow, nCol, nKeyFlags when
   executing the action you provide for those events.

           ON CLICK MsgInfo( Str( nRow ) + ";" + Str( nCol ) + ";" + ;
                             Str( nKeyFlags ) )






