[Back to MENU SWAG index] [Back to Main SWAG index] [Original]
{
This is Turbo Pascal Unit is sent in reply to uuj@ufu107.phys.ufl.edu in
request For help on menu's. I was purely fed up With the TMenu options,
and so I created my own menu Unit. Although it is space consuming in data
initialization, this Unit enables Programmers to enhance their Programs. If
user defined menus are required For your Program, a Text Program can be
created from the Program containing the initialization information. A simple
call can clear the screen and push the menu onto your screen. The info for
usage all exists within the Interface portion of the Unit, so I won't trouble
myself With typing everything down. If this Unit is indeed helpful, please
send me a copy of the end product so I can view the work of which this
nineteen year old Programmer has helped with...
L. Saxon Joseph Ralph Lewis
}
Unit JMenu;
Interface
Uses
Crt;
Type
WinCord = Record
Xa : Byte;
Xb : Byte;
Ya : Byte;
Yb : Byte;
end;
MenuList = Record
MenuLink : Integer;
MenuName : String;
Question : String;
OpenState : String;
NumItems : Integer;
Items : Array [1..15] of String;
ItemCode : Array [1..15] of Char;
end;
Var
Win : WinCord;
List : MenuList;
Xdc,
Ydc : Integer;
Code : Char;
Procedure Border(X, Y : Integer; BackGround : Integer; Color : Integer);
Procedure MenuScr(X, Y : Integer; BackGround : Integer; Color : Integer);
Procedure Println(PStr : String);
Procedure Print(PStr : String);
Function SrchErr(Cher : Char; List : MenuList) : Boolean;
Procedure ShowError;
Procedure Menu(X, Y :Integer; BackGround : Integer; Color : Integer;
List : MenuList);
Procedure Command(X, Y :Integer; BackGround : Integer; Color : Integer;
List : MenuList);
Procedure InitMenu(Var List : MenuList);
Implementation
Procedure Border(X,Y : Integer; BackGround : Integer; Color : Integer);
Var
Xdc, Ydc : Integer;
begin
For Xdc := 2 to (X - 2) do
begin
GotoXY(Xdc + 1, 1);
Write(chr(205));
GotoXY(Xdc + 1, Y);
Write(chr(205));
end;
For Ydc := 2 to (Y - 3) do
begin
GotoXY(1, Ydc + 1);
Write(chr(186));
GotoXY(X, Ydc + 1);
Write(chr(186));
end;
GotoXY(2, 1);
Write(chr(201));
GotoXY(1, 2);
Write(chr(201));
GotoXY(2, 2);
Write(chr(188));
GotoXY(X - 1, 1);
Write(chr(187));
GotoXY(X, 2);
Write(chr(187));
GotoXY(X - 1, 2);
Write(chr(200));
GotoXY(1, Y - 1);
Write(chr(200));
GotoXY(2, Y);
Write(chr(200));
GotoXY(2, Y - 1);
Write(chr(187));
GotoXY(X, Y - 1);
Write(chr(188));
GotoXY(X - 1, Y);
Write(chr(188));
GotoXY(X - 1, Y - 1);
Write(chr(201)); {188}
end;
Procedure MenuScr(X,Y : Integer; BackGround : Integer; Color : Integer);
begin
Window(1, 1, 80, 25);
TextBackground(Black);
ClrScr;
Win.Xa := 40 - Round(X / 2);
Win.Xb := 40 + Round(X / 2);
Win.Ya := 12 - Round(Y / 2);
Win.Yb := 12 + Round(Y / 2);
X := X + 1;
Y := Y + 1;
Window(Win.Xa, Win.Ya, Win.Xb, WIn.Yb);
TextBackground(BackGround);
TextColor(Color);
ClrScr;
Border(X, Y, BackGround, Color);
GotoXY(3, 3);
end;
Procedure Println(PStr : String);
Var
Xdc : Integer;
begin
If Length(PStr) > (Win.Xb - Win.Xa - 4) then
begin
Writeln('Menu too small...');
Halt
end;
Write(Pstr);
Xdc := WhereY;
GotoXY(3, Xdc + 1);
end;
Procedure Print(PStr : String);
Var
Xdc : Integer;
begin
If Length(PStr) > (Win.Xb - Win.Xa - 4) then
begin
Writeln('Menu too small...');
Halt
end;
Write(Pstr);
end;
Function SrchErr(Cher : Char; List : MenuList) : Boolean;
begin
SrchErr := True;
For Xdc := 1 to List.NumItems do
If Cher = List.ItemCode[Xdc] Then
SrchErr := False;
end;
Procedure ShowError;
Var
Me : Char;
T, H : Integer;
begin
MenuScr(42, 8, Red, Yellow);
Println('An Error has been detected.');
Println('Please be careful in your');
Println('Value Entering...');
Print(' [Press Any Key to Continue]');
Me := ReadKey;
TextBackground(Black);
ClrScr;
end;
Procedure Menu(X, Y : Integer; BackGround : Integer; Color : Integer;
List : MenuList);
Var
PrnStr : String;
Cord : Char;
begin
MenuScr(X, Y, Background, Color);
Xdc := Round(X / 2) - round(Length(List.MenuName) / 2);
GotoXY(Xdc, 2);
Println(List.MenuName);
GotoXY(3, 4);
Println(List.OpenState);
For Xdc := 1 to List.NumItems do
begin
PrnStr := Concat(' ', List.ItemCode[Xdc], ' : ', List.Items[Xdc]);
Println(PrnStr);
end;
GotoXY(WhereX, WhereY + 1);
Print(List.Question);
end;
Procedure Command(X, Y : Integer; BackGround : Integer; Color : Integer;
List : MenuList);
Var
PrnStr : String;
Cord : Char;
begin
MenuScr(X, Y, Background, Color);
Xdc := Round(X / 2) - round(Length(List.MenuName) / 2);
GotoXY(Xdc, 2);
Println(List.MenuName);
GotoXY(3, 3);
Print(List.Question);
end;
Procedure InitMenu(Var List : MenuList);
begin
TextBackGround(Black);
Window(1, 1, 80, 25);
ClrScr;
List.MenuName := '';
List.OpenState := '';
List.NumItems := 0;
For Xdc := 1 to 15 do
List.Items[Xdc] := '';
For Xdc := 1 to 15 do
List.Itemcode[Xdc] := ' ';
List.Question := '';
end;
end.
[Back to MENU SWAG index] [Back to Main SWAG index] [Original]