home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / chap28 / object4 / classdef.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-20  |  5KB  |  258 lines

  1. unit Classdef;
  2.  
  3. { Program copyright (c) 1995 by Charles Calvert }
  4. { Project Name: OBJECT4 }
  5.  
  6. interface
  7.  
  8. uses
  9.   Classes, Controls, Graphics,
  10.   Dialogs, ExtCtrls, Buttons;
  11.  
  12. const
  13.   idBlue = 100;
  14.   idYellow = 101;
  15.   idGreen = 102;
  16.   idViolet = 103;
  17.  
  18. type
  19.   THMethod = (hmScreen, hmDisk);
  20.  
  21.   TMyObject = class(TImage)
  22.   public
  23.     procedure ShowHierarchy; virtual;
  24.   end;
  25.  
  26.   THierarchy = class(TMyObject)
  27.   private
  28.     FHierarchyMethod: THMethod;
  29.     procedure SetHierarchy(H: THMethod);
  30.   public
  31.     procedure ShowHierarchy; override;
  32.   published
  33.     property HierarchyMethod: THMethod read FHierarchyMethod write SetHierarchy;
  34.   end;
  35.  
  36.   TWidget = class(THierarchy)
  37.   private
  38.     FQuantity: LongInt;
  39.     FBoxSize: LongInt;
  40.     FMaxQuantity: LongInt;
  41.     FDescription: string;
  42.     FTwin: TSpeedButton;
  43.   protected
  44.     procedure MouseDown(Sender: TObject; Button: TMouseButton;
  45.                            Shift: TShiftState; X, Y: Integer);
  46.   public
  47.     constructor Create(AOwner: TComponent); override;
  48.     procedure Sell(Amount: LongInt); virtual;
  49.     procedure Stock; virtual;
  50.     function GetName: string; virtual;
  51.   published
  52.     property Description: string read FDescription;
  53.     property Quantity: LongInt read FQuantity write FQuantity;
  54.     property Twin: TSpeedButton read FTwin write FTwin;
  55.     property BoxSize: LongInt read FBoxSize write FBoxSize;
  56.     property OnMouseDown;
  57.   end;
  58.  
  59.   TBlue = class(TWidget)
  60.     public
  61.     constructor Create(AOwner: TComponent); override;
  62.     procedure ShowHierarchy; override;
  63.   end;
  64.  
  65.   TYellow = class(TWidget)
  66.     public
  67.     constructor Create(AOwner: TComponent); override;
  68.     procedure ShowHierarchy; override;
  69.   end;
  70.  
  71.   TGreen = class(TWidget)
  72.     public
  73.     constructor Create(AOwner: TComponent); override;
  74.     procedure ShowHierarchy; override;
  75.   end;
  76.  
  77.   TViolet = class(TWidget)
  78.     public
  79.     constructor Create(AOwner: TComponent); override;
  80.     procedure ShowHierarchy; override;
  81.   end;
  82.  
  83. implementation
  84.  
  85. uses
  86.   HierDlg,
  87.   Reports,
  88.   StrBox;
  89.  
  90. var
  91.   FActive: Boolean;
  92.  
  93. { --- TMyObject --- }
  94.  
  95. procedure TMyObject.ShowHierarchy;
  96. const
  97.   CR = #13#10;
  98. var
  99.   AClass: TClass;
  100.   S: string;
  101. begin
  102.   S := ClassName;
  103.   AClass := ClassParent;
  104.   while AClass <> nil do begin
  105.     S := S + CR + AClass.ClassName;
  106.     AClass := AClass.ClassParent;
  107.   end;
  108.   MessageDlg(S, mtInformation, [mbOk], 0);
  109. end;
  110.  
  111. { --- THierarchy --- }
  112.  
  113. procedure THierarchy.ShowHierarchy;
  114. var
  115.   F: System.Text;
  116.   AClass: TClass;
  117. begin
  118.   if FHierarchyMethod = hmscreen then
  119.     inherited ShowHierarchy
  120.   else begin
  121.     System.Assign(F, 'inherit.txt');
  122.     ReWrite(F);
  123.     WriteLn(F, ClassName);
  124.     AClass := ClassParent;
  125.     while AClass <> nil do begin
  126.       WriteLn(F, AClass.ClassName);
  127.       AClass := AClass.ClassParent;
  128.     end;
  129.     Close(F);
  130.   end;
  131. end;
  132.  
  133.  
  134. procedure THierarchy.SetHierarchy(H: THMethod);
  135. begin
  136.   FHierarchyMethod := H;
  137. end;
  138.  
  139. { --- TWidget --- }
  140.  
  141. constructor TWidget.Create(AOwner: TComponent);
  142. begin
  143.   inherited Create(AOwner);
  144.   FBoxSize := 5;
  145.   OnMouseDown := MouseDown;
  146.   FDescription := 'I don''t talk!';
  147.   ClientWidth := 25;
  148.   ClientHeight := 25;
  149.   FActive := True;
  150. end;
  151.  
  152. function TWidget.GetName: string;
  153. begin
  154.   result := StripFromFront(ClassName, 1);
  155. end;
  156.  
  157. procedure TWidget.Stock;
  158. begin
  159.   FQuantity := FQuantity + FBoxSize;
  160. end;
  161.  
  162. procedure TWidget.Sell(Amount: LongInt);
  163. begin
  164.   if FActive then
  165.     FQuantity := FQuantity - FBoxSize;
  166. end;
  167.  
  168. procedure TWidget.MouseDown(Sender: TObject; Button: TMouseButton;
  169.                             Shift: TShiftState; X, Y: Integer);
  170. begin
  171.   FActive := False;
  172.   Report.Run(Self);
  173.   FActive := True;
  174. end;
  175.  
  176. { --- TBlue --- }
  177.  
  178. constructor TBlue.Create(AOwner: TComponent);
  179. begin
  180.   inherited Create(AOwner);
  181.   Picture.LoadFromFile('blue.bmp');
  182.   FDescription := 'A blue widget!';
  183.   FQuantity := 800;
  184.   FBoxSize := 50;
  185.   FMaxQuantity := 1000;
  186. end;
  187.  
  188. procedure TBlue.ShowHierarchy;
  189. begin
  190.   if FHierarchyMethod = hmDisk then
  191.     inherited ShowHierarchy
  192.   else
  193.     HierarchyDlg.Run(Self, clBlue);
  194. end;
  195.  
  196. { --- TYellow --- }
  197.  
  198. constructor TYellow.Create(AOwner: TComponent);
  199. begin
  200.   inherited Create(AOwner);
  201.   Picture.LoadFromFile('yellow.bmp');
  202.   FDescription := 'A yellow widget!';
  203.   FQuantity := 10;
  204.   FBoxSize := 1;
  205.   FMaxQuantity := 15;
  206. end;
  207.  
  208. procedure TYellow.ShowHierarchy;
  209. begin
  210.   if FHierarchyMethod = hmDisk then
  211.     inherited ShowHierarchy
  212.   else
  213.     HierarchyDlg.Run(Self, clYellow);
  214. end;
  215.  
  216. { --- TGreen --- }
  217.  
  218. constructor TGreen.Create(AOwner: TComponent);
  219. begin
  220.   inherited Create(AOwner);
  221.   Picture.LoadFromFile('green.bmp');
  222.   FDescription := 'A green widget!';
  223.   FQuantity := 500;
  224.   FBoxSize := 50;
  225.   FMaxQuantity := 650;
  226. end;
  227.  
  228. procedure TGreen.ShowHierarchy;
  229. begin
  230.   if FHierarchyMethod = hmDisk then
  231.     inherited ShowHierarchy
  232.   else
  233.     HierarchyDlg.Run(Self, clGreen);
  234. end;
  235.  
  236.  
  237. { --- TViolet --- }
  238.  
  239. constructor TViolet.Create(AOwner: TComponent);
  240. begin
  241.   inherited Create(AOwner);
  242.   Picture.LoadFromFile('violet.bmp');
  243.   FDescription := 'Violet widget palette';
  244.   FQuantity := 600;
  245.   FBoxSize := 70;
  246.   FMaxQuantity := 740;
  247. end;
  248.  
  249. procedure TViolet.ShowHierarchy;
  250. begin
  251.   if FHierarchyMethod = hmDisk then
  252.     inherited ShowHierarchy
  253.   else
  254.     HierarchyDlg.Run(Self, clPurple);
  255. end;
  256.  
  257. end.
  258.