home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 12 / CD_ASCQ_12_0294.iso / news / 563 / omenu / omenu.int < prev    next >
Text File  |  1993-11-29  |  6KB  |  148 lines

  1. UNIT OMENU;
  2. { Dropdown menu system in graphics
  3.   copyright 1993, and written by
  4.              Jay Faubion,
  5.              Binary International Marketing
  6.              139 Eastern Avenue
  7.              Plainfield, IN  46168
  8.              Compuserve 72763,200
  9. }
  10.  
  11. {$DEFINE FGI}                   {Define FGI if using the Fastgraph
  12.                                  routines from Ted Gruber Software.
  13.                                  Otherwise, use the Borland BGI }
  14. {$A+     + Align Data on}
  15. {$B-     - Boolean Eval short}
  16. {$D+     + Debug info on}
  17. {$E+     + 8087 Emulation on}
  18. {$F+     + Force far calls on}
  19. {$G+     + Generate 286 code}
  20. {$I+     + IO checking on}
  21. {$L+     + Local symbols on}
  22. {$N-     - Numeric Processing off}
  23. {$O-     - Overlays off}
  24. {$R+     + Range checks on}
  25. {$S+     + Stack checks on}
  26. {$V-     - Relaxed String checks}
  27. {$X+     + Extended Syntax on}
  28.  
  29. interface
  30. const
  31.     MaxItems              = 25;                 { max items on a menu }
  32.     ParseDelimiter        : char    = '|';
  33.     ShadowOn              = true;               { use shadow booleans }
  34.     ShadowOff             = false;
  35.     UserShadWt            : integer =  5;       { default shadow width }
  36.     BorderOn              = true;               { use border booleans }
  37.     BorderOff             = false;
  38.    {CellHt                : integer =  16;}     { Cell height, VGA modes 17,18 }
  39.     CellHt                : integer =  14;      { Cell height, EGA modes }
  40.     CellWt                : integer =   8;      { Cell width,  VGA modes 17,18 }
  41.     black                 : integer =  0;
  42.     blue                  : integer =  1;
  43.     green                 : integer =  2;
  44.     cyan                  : integer =  3;
  45.     red                   : integer =  4;
  46.     magenta               : integer =  5;
  47.     brown                 : integer =  6;
  48.     gray                  : integer =  7;
  49.     dgray                 : integer =  8;
  50.     lblue                 : integer =  9;
  51.     lgreen                : integer = 10;
  52.     lcyan                 : integer = 11;
  53.     lred                  : integer = 12;
  54.     lmagenta              : integer = 13;
  55.     yellow                : integer = 14;
  56.     white                 : integer = 15;
  57.  
  58.  
  59. {The following 8 procedures are not objects ! }
  60.   procedure GraphInit;                { init graphics environment }
  61.   procedure GraphDone;                { return to text mode }
  62.   procedure GGotoxy(x,y:integer);     { gotoxy }
  63.   procedure GWriteXy(x,y:integer;s:string;bg,fg:integer);
  64.             {write at xy using text coordinates}
  65.   procedure GWritePXy(x,y:integer;s:string;bg,fg:integer);
  66.             {Write at xy using pixel coordinates (640x480}
  67.   procedure GWriteXyClip(x,y:integer;s:string;Bg,Fg,clp:integer);
  68.             {write at text-xy and truncate string to fit }
  69.   procedure GClrScr(color:integer);
  70.             { clear the screen in any color }
  71.  
  72. type
  73.    TMenuParms = record                  { record to hold parms for }
  74.      Menu,x1,y1,x2,y2,Nbg,NFg,HBg,HFg,  { each menu you set up }
  75.           px1,px2,py1,py2,
  76.        Border,shadow,NumItems,Highlight: integer;
  77.      BordOn,ShadOn                     : boolean;
  78.      AStr                              : string;
  79.      end;
  80.  
  81.   Ohmenu = object
  82.     onscreen                           : boolean;  {is menu now on screen?}
  83.     MenuNumber                         : integer;
  84.     MenuParms                          : TMenuParms;
  85.     TArray : array[1..MaxItems] of string[105];    {up to 25 items}
  86.     Buffer                             : pointer;  {ptr to hold image buffer}
  87.     Buffersize                         : longint;  {size of image buffer}
  88.     Result                             : integer;  {user keypress Result }
  89.     Choice                             : integer;  {user menu choice }
  90.     BuffW,BuffH                        : integer;  {buffersize}
  91.     EraseOK                            : boolean;  {can erase menu?}
  92.     ShadWt                             : integer;  {shadow width}
  93.  
  94.     constructor Init;
  95.     destructor  Done;
  96.     function    ParseText(TStr:string):integer;    { get the menu items }
  97.     procedure   UseMenu(m:integer);    virtual;    { items delimited by '|' }
  98.     procedure   ShowMenu;              virtual;    { called from UseMenu }
  99.     procedure   EraseMenu;                         { erase, free buffer }
  100.     procedure   MakeBuffer;                        { save screen on heap }
  101.     function    GetChoice : integer;               { returns user choice }
  102.     end;
  103.  
  104.   OVMenu =  object (OHMenu)
  105.     constructor Init;
  106.     procedure   UseMenu(m:integer);   virtual;
  107.     procedure   ShowMenu;             virtual;
  108.    end;
  109.  
  110.  
  111.   OHVMenu = object
  112.     HVResult    : longint;
  113.     HResult     : shortint;
  114.     VResult     : shortint;
  115.     VertMenus   : shortint;
  116.     MenuArray   : array[0..25] of TMenuparms;
  117.     HMenu       : OHMenu;
  118.     VMenu       : OVMenu;
  119.     constructor Init;
  120.     destructor  done;
  121.     procedure   SetHorItems(
  122.                 x1,y1,x2,y2,Nbg,NFg,HBg,HFg,
  123.                 Border,shadow,Highlight:integer;
  124.                 BordOn,ShadOn:boolean;
  125.                 AStr:string);
  126.     procedure   PutHParms(num:integer);
  127.     procedure   SetVerItems(
  128.                 menu,x1,y1,x2,Nbg,NFg,HBg,HFg,
  129.                 Border,shadow,Highlight:integer;
  130.                 BordOn,ShadOn:boolean;
  131.                 AStr:string);
  132.     procedure   PutVParms(num:integer);
  133.     function    GetHResult:shortint;               virtual;
  134.     function    GetVResult:shortint;               virtual;
  135.     function    GetHVResult:longint;               virtual;
  136.     function    GetHChoice:shortint;               virtual;
  137.     function    GetVChoice:shortint;               virtual;
  138.     function    GetHVChoice:longint;               virtual;
  139.     procedure   UseMenu;                           virtual;
  140.     function    MenuResult(EraseH,EraseV:boolean):integer;
  141.     end;
  142.  
  143.   {$IFNDEF FGI}
  144.   procedure EgaVGADriver;
  145.   {$ENDIF}
  146.  
  147. {****************************** implementation *************************}
  148.