Welcome to GraphVision package!

It is an updated version. Many thanks to all people, who sent
messages with suggestions and bug reports.


List of reported bugs
=====================

   1. GraphStaticBitmap.Done doesn't free memory.  Fixed.
   2. Push button's hot keys takes no effect.  Fixed.
   3. SetExclusiveArea procedure doesn't work properly. Fixed.
   4. If non-Microsoft mouse driver used, mouse moving garbages screen. Fixed.
   5. MouseHardInt procedure doesn't restore Graphics Address
      register value.  Fixed.
   6. Some little bugs in manual.doc are fixed.



Q & A
=====

Q. How to recompile GraphVision package?
A. You need to have some files from TurboVision package for it:

      SYSINT.OB*,
      FORMAT.OBJ, 
      OBJECTS.TP*,
      MEMORY.TP*.

   Depending from videomodes you will use, you may need also
   EGAVGA.OBJ or VESA16.OBJ files. If you don't have these files,
   use BINOBJ.EXE utility to convert .BGI files to .OBJ files:

       BINOBJ EGAVGA.BGI EGAVGA.OBJ GRDRIVER
   or
       BINOBJ VESA16.BGI VESA16.OBJ GRDRIVER

   Note that public name (3rd parameter) alwais GRDRIVER.

   Copy all files listed above to directory where sources are placed,
   or be sure Turbo Pascal compiler knows directories where these files
   are placed.
   Make sources directory current directory and then run BUILDR.BAT for
   real mode version or BUILDP.BAT for DPMI version.
   Copy .TP* files to your tpu's directory.

Q. How can I create a new resource, picture for example?
A. You should to prepare picture image by any way (sorry, I don't have
   utilities for it), save it in memory area, then create TByteFlow-type
   object for it (see ExtObj.pas module and docs) and place it into resource
   file with unique name:

   begin
      RegisterObjects;
      RegisterExtObj;
      Rsc.Init(New(PBufStream,Init('standard.rsc',stOpen,1024)));
      ......
      {create image here }
      ......
      Size := ImageSize(x1,y1,x2,y2);
      Img := MemAlloc(Size);
      GetImage(x1,y1,x2,y2,Img^);
      ImgObj := New(PByteFlow,Init(Size,Img));
      Rsc.Put(ImgObj,'NewPicture');
      ...
   end.

   For new mouse cursor create TMouseCursor object and put it into stream.
   As for button, you should to create TByteFlow object for each possible
   button state, incorporate them into collection and then place it
   into stream.

Q. How to use VESADRV unit?
A. Do as folloving:
   - rename GRDRIVER.TP* files;
   - copy VESADRV.TP* to GRDRIVER.TP*;
   - recompile your program;

   If your SVGA videocard is not VESA-compatible, try to use one from
   special TSRs gives possibility to make your videocard VESA-compatible.


Q. Broadcast message which my custom control sends to dialog HamdleEvent
   has no effect.
A. In TurboVision controls inserted into dialog usually sends evBroadcast
   event to its owner (dialog) HandleEvent:

      Message(Owner,evBroadcast,Command,InfoPtr);

   But in GraphVision, if you want send message to dialog HandleEvent,
   you should use evMessage mask instead evBroadcast:

      Message(Owner,evMessage,Command,InfoPtr);

   Why? There is one additional group in GraphVision windows and
   dialogs - workspace group. By default, all objects inserted
   into window (and into dialog), inserts into workspace group.
   So all control's broadcasts sends to workspace HandleEvent method.
   But if workspace receives evMessage, its HandleEvent converts
   evMessage to evBroadcast event and resends it to dialog HandleEvent.
   Of course, in dialog HandleEvent you should check for evBroadcast
   event.

Q. How can I insert contol into window or dialog instead their workgroups?
A. Just use GraphGroup.Insert instead GraphWindow.Insert.
   See GraphWindow.StandardScrollBar method as an example.

