home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / chap28 / object4 / main.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-03-21  |  6.0 KB  |  232 lines

  1. unit Main;
  2.  
  3. { Program copyright (c) 1995 by Charles Calvert }
  4. { Project Name: OBJECT4 }
  5.  
  6. { This program is a simplified warehouse simulation.
  7.  
  8.   When you open the program there are a number of
  9.   empty palettes sitting in a large room. If you
  10.   click on one of the palettes, you can "stock" it
  11.   with either yellow, blue, green or violet widgets.
  12.  
  13.   If you click on a palette that has widgets, you
  14.   can see the number and type of widgets on that
  15.   palette.
  16.  
  17.   If you click on the List menuitem, you get a list
  18.   of all available items in the warehouse, shown
  19.   in a graphics based format.
  20.  
  21.   If you click on the Sell menuitem, you can "sell"
  22.   items from the warehouse, which means that stocked
  23.   items will be deleted. If you sell an entire
  24.   palettes worth of items, then that palette will
  25.   be removed. }
  26.  
  27. interface
  28.  
  29. uses
  30.   SysUtils, WinTypes, WinProcs,
  31.   Messages, Classes, Graphics,
  32.   Controls, Forms, Dialogs,
  33.   StdCtrls, ClassDef, ExtCtrls,
  34.   Menus, Buttons, SellDlgs;
  35.  
  36. type
  37.   TMenagerie = class(TForm)
  38.     PopupMenu1: TPopupMenu;
  39.     Blue1: TMenuItem;
  40.     Yellow1: TMenuItem;
  41.     Timer1: TTimer;
  42.     Green1: TMenuItem;
  43.     Violet1: TMenuItem;
  44.     MainMenu1: TMainMenu;
  45.     Sell1: TMenuItem;
  46.     List: TMenuItem;
  47.     Panel1: TPanel;
  48.     Panel2: TPanel;
  49.     Panel3: TPanel;
  50.     Panel4: TPanel;
  51.     Panel5: TPanel;
  52.     Panel6: TPanel;
  53.     sp41: TSpeedButton;
  54.     Sp42: TSpeedButton;
  55.     Sp43: TSpeedButton;
  56.     Sp44: TSpeedButton;
  57.     Sp45: TSpeedButton;
  58.     Sp46: TSpeedButton;
  59.     Sp47: TSpeedButton;
  60.     Sp48: TSpeedButton;
  61.     Sp49: TSpeedButton;
  62.     Sp410: TSpeedButton;
  63.     SpeedButton12: TSpeedButton;
  64.     SpeedButton13: TSpeedButton;
  65.     SpeedButton14: TSpeedButton;
  66.     SpeedButton15: TSpeedButton;
  67.     SpeedButton16: TSpeedButton;
  68.     SpeedButton17: TSpeedButton;
  69.     SpeedButton18: TSpeedButton;
  70.     SpeedButton19: TSpeedButton;
  71.     SpeedButton20: TSpeedButton;
  72.     SpeedButton21: TSpeedButton;
  73.     SpeedButton22: TSpeedButton;
  74.     SpeedButton23: TSpeedButton;
  75.     SpeedButton24: TSpeedButton;
  76.     SpeedButton25: TSpeedButton;
  77.     SpeedButton31: TSpeedButton;
  78.     SpeedButton33: TSpeedButton;
  79.     SpeedButton34: TSpeedButton;
  80.     SpeedButton35: TSpeedButton;
  81.     Panel7: TPanel;
  82.     SpeedButton1: TSpeedButton;
  83.     SpeedButton11: TSpeedButton;
  84.     SpeedButton26: TSpeedButton;
  85.     SpeedButton27: TSpeedButton;
  86.     SpeedButton28: TSpeedButton;
  87.     SpeedButton29: TSpeedButton;
  88.     SpeedButton30: TSpeedButton;
  89.     SpeedButton32: TSpeedButton;
  90.     SpeedButton36: TSpeedButton;
  91.     SpeedButton37: TSpeedButton;
  92.     SpeedButton38: TSpeedButton;
  93.     SpeedButton39: TSpeedButton;
  94.     SpeedButton40: TSpeedButton;
  95.     SpeedButton41: TSpeedButton;
  96.     SpeedButton42: TSpeedButton;
  97.     SpeedButton43: TSpeedButton;
  98.     SpeedButton44: TSpeedButton;
  99.     SpeedButton45: TSpeedButton;
  100.     SpeedButton46: TSpeedButton;
  101.     SpeedButton47: TSpeedButton;
  102.     SpeedButton48: TSpeedButton;
  103.     procedure Timer1Timer(Sender: TObject);
  104.     procedure WidgetClick(Sender: TObject);
  105.     procedure Sell1Click(Sender: TObject);
  106.     procedure ListClick(Sender: TObject);
  107.     procedure sp41Click(Sender: TObject);
  108.   private
  109.     { Private declarations }
  110.     FCurSp: TSpeedButton;
  111.     FWidget: TWidget;
  112.     procedure SellProduct(var Widget: TWidget; var DataRec: TDataRec);
  113.   end;
  114.  
  115. var
  116.   Menagerie: TMenagerie;
  117.  
  118. implementation
  119.  
  120. {$R *.DFM}
  121.  
  122. uses
  123.   Status;
  124.  
  125. procedure TMenagerie.sp41Click(Sender: TObject);
  126. var
  127.   P: TPoint;
  128. begin
  129.   FCurSp := TSpeedButton(Sender);
  130.   P := Point(FCurSp.Left, FCurSp.Top);
  131.   WinProcs.ClientToScreen(FCurSp.Parent.Handle, P);
  132.   PopUpMenu1.Popup(P.X, P.Y);
  133. end;
  134.  
  135. procedure TMenagerie.WidgetClick(Sender: TObject);
  136. var
  137.   WidgetType: Integer;
  138.   Widget: TWidget;
  139. begin
  140.   WidgetType := (Sender as TMenuItem).Tag;
  141.   case WidgetType of
  142.     idBlue:  Widget := TBlue.Create(Self);
  143.     idYellow:  Widget := TYellow.Create(Self);
  144.     idGreen: Widget := TGreen.Create(Self);
  145.     idViolet: Widget := TViolet.Create(Self);
  146.   end;
  147.   FCurSp.Enabled := False;
  148.   FCurSp.Visible := False;
  149.   Widget.Parent := FCurSp.Parent;
  150.   Widget.Left := FCurSp.Left;
  151.   Widget.Top := FCurSp.Top;
  152.   Widget.Twin := FCurSp;
  153.   Widget.Show;
  154. end;
  155.  
  156. procedure TMenagerie.Timer1Timer;
  157. var
  158.   i: Integer;
  159.   A: TWidget;
  160. begin
  161.   for i := 0 to ComponentCount - 1 do
  162.     if Components[i] is TWidget then begin
  163.        A := TWidget(Components[i]);
  164.        if A.Quantity <= 0 then begin
  165.          A.Twin.Enabled := True;
  166.          A.Twin.Visible := True;
  167.          A.Free;
  168.          Exit;
  169.        end;
  170.     end;
  171. end;
  172.  
  173. procedure TMenagerie.SellProduct(var Widget: TWidget; var DataRec: TDataRec);
  174. var
  175.   NewTotal: LongInt;
  176. begin
  177.   if Widget is TBlue then
  178.     NewTotal := DataRec.BlueTotal
  179.   else if Widget is TYellow then
  180.     NewTotal := DataRec.YellowTotal
  181.   else if Widget is TGreen then
  182.     NewTotal := DataRec.GreenTotal
  183.   else
  184.     NewTotal := DataRec.VioletTotal;
  185.  
  186.   if NewTotal <= Widget.Quantity then begin
  187.      Widget.Quantity := Widget.Quantity - NewTotal;
  188.      NewTotal := 0;
  189.   end else begin
  190.      NewTotal := NewTotal - Widget.Quantity;
  191.      Widget.Quantity := 0;
  192.   end;
  193.  
  194.   if Widget is TBlue then
  195.     DataRec.BlueTotal := NewTotal
  196.   else if Widget is TYellow then
  197.     DataRec.YellowTotal := NewTotal
  198.   else if Widget is TGreen then
  199.     DataRec.GreenTotal := NewTotal
  200.   else
  201.     DataRec.VioletTotal := NewTotal;
  202. end;
  203.  
  204. procedure TMenagerie.Sell1Click(Sender: TObject);
  205. var
  206.   DataRec: TDataRec;
  207.   i: Integer;
  208.   Widget: TWidget;
  209. begin
  210.   if not SellDlg.GetData(DataRec) then exit;
  211.   for i := 0 to ComponentCount - 1 do begin
  212.     Widget := TWidget(Components[i]);
  213.     if Components[i] is TWidget then
  214.       SellProduct(Widget, DataRec);
  215.   end;
  216. end;
  217.  
  218. procedure TMenagerie.ListClick(Sender: TObject);
  219. var
  220.   i: Integer;
  221.   List: TList;
  222. begin
  223.   List := TList.Create;
  224.   for i := 0 to ComponentCount - 1 do
  225.     if Components[i] is TWidget then
  226.        List.Add(Components[i]);
  227.   StatusForm.RunAll(List);
  228.   List.Free;
  229. end;
  230.  
  231. end.
  232.