home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 12
/
CD_ASCQ_12_0294.iso
/
news
/
563
/
omenu
/
omenu.int
< prev
next >
Wrap
Text File
|
1993-11-29
|
6KB
|
148 lines
UNIT OMENU;
{ Dropdown menu system in graphics
copyright 1993, and written by
Jay Faubion,
Binary International Marketing
139 Eastern Avenue
Plainfield, IN 46168
Compuserve 72763,200
}
{$DEFINE FGI} {Define FGI if using the Fastgraph
routines from Ted Gruber Software.
Otherwise, use the Borland BGI }
{$A+ + Align Data on}
{$B- - Boolean Eval short}
{$D+ + Debug info on}
{$E+ + 8087 Emulation on}
{$F+ + Force far calls on}
{$G+ + Generate 286 code}
{$I+ + IO checking on}
{$L+ + Local symbols on}
{$N- - Numeric Processing off}
{$O- - Overlays off}
{$R+ + Range checks on}
{$S+ + Stack checks on}
{$V- - Relaxed String checks}
{$X+ + Extended Syntax on}
interface
const
MaxItems = 25; { max items on a menu }
ParseDelimiter : char = '|';
ShadowOn = true; { use shadow booleans }
ShadowOff = false;
UserShadWt : integer = 5; { default shadow width }
BorderOn = true; { use border booleans }
BorderOff = false;
{CellHt : integer = 16;} { Cell height, VGA modes 17,18 }
CellHt : integer = 14; { Cell height, EGA modes }
CellWt : integer = 8; { Cell width, VGA modes 17,18 }
black : integer = 0;
blue : integer = 1;
green : integer = 2;
cyan : integer = 3;
red : integer = 4;
magenta : integer = 5;
brown : integer = 6;
gray : integer = 7;
dgray : integer = 8;
lblue : integer = 9;
lgreen : integer = 10;
lcyan : integer = 11;
lred : integer = 12;
lmagenta : integer = 13;
yellow : integer = 14;
white : integer = 15;
{The following 8 procedures are not objects ! }
procedure GraphInit; { init graphics environment }
procedure GraphDone; { return to text mode }
procedure GGotoxy(x,y:integer); { gotoxy }
procedure GWriteXy(x,y:integer;s:string;bg,fg:integer);
{write at xy using text coordinates}
procedure GWritePXy(x,y:integer;s:string;bg,fg:integer);
{Write at xy using pixel coordinates (640x480}
procedure GWriteXyClip(x,y:integer;s:string;Bg,Fg,clp:integer);
{write at text-xy and truncate string to fit }
procedure GClrScr(color:integer);
{ clear the screen in any color }
type
TMenuParms = record { record to hold parms for }
Menu,x1,y1,x2,y2,Nbg,NFg,HBg,HFg, { each menu you set up }
px1,px2,py1,py2,
Border,shadow,NumItems,Highlight: integer;
BordOn,ShadOn : boolean;
AStr : string;
end;
Ohmenu = object
onscreen : boolean; {is menu now on screen?}
MenuNumber : integer;
MenuParms : TMenuParms;
TArray : array[1..MaxItems] of string[105]; {up to 25 items}
Buffer : pointer; {ptr to hold image buffer}
Buffersize : longint; {size of image buffer}
Result : integer; {user keypress Result }
Choice : integer; {user menu choice }
BuffW,BuffH : integer; {buffersize}
EraseOK : boolean; {can erase menu?}
ShadWt : integer; {shadow width}
constructor Init;
destructor Done;
function ParseText(TStr:string):integer; { get the menu items }
procedure UseMenu(m:integer); virtual; { items delimited by '|' }
procedure ShowMenu; virtual; { called from UseMenu }
procedure EraseMenu; { erase, free buffer }
procedure MakeBuffer; { save screen on heap }
function GetChoice : integer; { returns user choice }
end;
OVMenu = object (OHMenu)
constructor Init;
procedure UseMenu(m:integer); virtual;
procedure ShowMenu; virtual;
end;
OHVMenu = object
HVResult : longint;
HResult : shortint;
VResult : shortint;
VertMenus : shortint;
MenuArray : array[0..25] of TMenuparms;
HMenu : OHMenu;
VMenu : OVMenu;
constructor Init;
destructor done;
procedure SetHorItems(
x1,y1,x2,y2,Nbg,NFg,HBg,HFg,
Border,shadow,Highlight:integer;
BordOn,ShadOn:boolean;
AStr:string);
procedure PutHParms(num:integer);
procedure SetVerItems(
menu,x1,y1,x2,Nbg,NFg,HBg,HFg,
Border,shadow,Highlight:integer;
BordOn,ShadOn:boolean;
AStr:string);
procedure PutVParms(num:integer);
function GetHResult:shortint; virtual;
function GetVResult:shortint; virtual;
function GetHVResult:longint; virtual;
function GetHChoice:shortint; virtual;
function GetVChoice:shortint; virtual;
function GetHVChoice:longint; virtual;
procedure UseMenu; virtual;
function MenuResult(EraseH,EraseV:boolean):integer;
end;
{$IFNDEF FGI}
procedure EgaVGADriver;
{$ENDIF}
{****************************** implementation *************************}