home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue32 / multiple / MultForm.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-11-24  |  4.8 KB  |  220 lines

  1. unit MultForm;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, MultAnim;
  8.  
  9. type
  10.   TFormAnimMi = class(TForm)
  11.     BtnKind: TButton;
  12.     BtnFly: TButton;
  13.     Memo1: TMemo;
  14.     BtnSwim: TButton;
  15.     BtnWalk: TButton;
  16.     BtnDuck: TButton;
  17.     BtnKindI: TButton;
  18.     BtnFlyI: TButton;
  19.     BtnSwimI: TButton;
  20.     BtnWalkI: TButton;
  21.     Label1: TLabel;
  22.     Label2: TLabel;
  23.     BtnMammalsI: TButton;
  24.     procedure BtnKindClick(Sender: TObject);
  25.     procedure FormCreate(Sender: TObject);
  26.     procedure BtnFlyClick(Sender: TObject);
  27.     procedure BtnSwimClick(Sender: TObject);
  28.     procedure BtnWalkClick(Sender: TObject);
  29.     procedure BtnDuckClick(Sender: TObject);
  30.     procedure BtnKindIClick(Sender: TObject);
  31.     procedure BtnFlyIClick(Sender: TObject);
  32.     procedure BtnSwimIClick(Sender: TObject);
  33.     procedure BtnWalkIClick(Sender: TObject);
  34.     procedure FormDestroy(Sender: TObject);
  35.     procedure BtnMammalsIClick(Sender: TObject);
  36.   private
  37.     Animals: array [1..5] of TAnimal;
  38.     AnimIntf: array [1..5] of IAnimal;
  39.   end;
  40.  
  41. var
  42.   FormAnimMi: TFormAnimMi;
  43.  
  44. implementation
  45.  
  46. {$R *.DFM}
  47.  
  48. procedure TFormAnimMi.FormCreate(Sender: TObject);
  49. var
  50.   I: Integer;
  51. begin
  52.   Animals[1] := TEagle.Create;
  53.   Animals[2] := TPenguin.Create;
  54.   Animals[3] := TDuck.Create;
  55.   Animals[4] := TBat.Create;
  56.   Animals[5] := TMonkey.Create;
  57.  
  58.   for I := 1 to 5 do
  59.     (Animals[I] as IAnimal)._AddRef;
  60.  
  61.   AnimIntf[1] := TEagle.Create;
  62.   AnimIntf[2] := TPenguin.Create;
  63.   AnimIntf[3] := TDuck.Create;
  64.   AnimIntf[4] := TBat.Create;
  65.   AnimIntf[5] := TMonkey.Create;
  66. end;
  67.  
  68. procedure TFormAnimMi.BtnKindClick(Sender: TObject);
  69. var
  70.   I: Integer;
  71. begin
  72.   Memo1.Lines.Add ('Kinds:');
  73.   for I := 1 to 5 do
  74.     // standard polymorphic method call
  75.     Memo1.Lines.Add (Animals[I].Kind);
  76.   Memo1.Lines.Add ('');
  77. end;
  78.  
  79. procedure TFormAnimMi.BtnFlyClick(Sender: TObject);
  80. var
  81.   I: Integer;
  82.   Fly1: ICanFly;
  83. begin
  84.   Fly1 := nil;
  85.   Memo1.Lines.Add ('Fly:');
  86.   for I := 1 to 5 do
  87.   begin
  88.     Animals[i].GetInterface (ICanFly, Fly1);
  89.     if Assigned (Fly1) then
  90.       Memo1.Lines.Add (Fly1.Fly);
  91.   end;
  92.   Memo1.Lines.Add ('');
  93. end;
  94.  
  95. procedure TFormAnimMi.BtnSwimClick(Sender: TObject);
  96. var
  97.   I: Integer;
  98.   Swim1: ICanSwim;
  99. begin
  100.   Memo1.Lines.Add ('Swim:');
  101.   for I := 1 to 5 do
  102.     if Animals[i].GetInterface (ICanSwim, Swim1) then
  103.       Memo1.Lines.Add (Swim1.Swim);
  104.   Memo1.Lines.Add ('');
  105. end;
  106.  
  107. procedure TFormAnimMi.BtnWalkClick(Sender: TObject);
  108. var
  109.   I: Integer;
  110.   Walker1: ICanWalk;
  111. begin
  112.   Memo1.Lines.Add ('Walk:');
  113.   for I := 1 to 5 do
  114.   try
  115.     Walker1 := Animals[i] as ICanWalk;
  116.     Memo1.Lines.Add (Walker1.Walk);
  117.   except;
  118.   end;
  119.   Memo1.Lines.Add ('');
  120. end;
  121.  
  122. procedure TFormAnimMi.BtnDuckClick(Sender: TObject);
  123. var
  124.   I: Integer;
  125.   Duck1: TDuck;
  126. begin
  127.   Memo1.Lines.Add ('Duck:');
  128.   for I := 1 to 5 do
  129.     if Animals[I] is TDuck then
  130.     begin
  131.       Duck1 := TDuck (Animals[I]);
  132.       Memo1.Lines.Add (Duck1.Kind);
  133.       Memo1.Lines.Add (Duck1.Walk);
  134.       Memo1.Lines.Add (Duck1.Fly);
  135.       Memo1.Lines.Add (Duck1.Swim);
  136.       Memo1.Lines.Add (Duck1.LayEggs);
  137.       Memo1.Lines.Add (IntToStr(Duck1.RefCount));
  138.     end;
  139. end;
  140.  
  141. procedure TFormAnimMi.BtnKindIClick(Sender: TObject);
  142. var
  143.   I: Integer;
  144. begin
  145.   Memo1.Lines.Add ('Kinds:');
  146.   for I := 1 to 5 do
  147.     // standard polymorphic method call
  148.     Memo1.Lines.Add (AnimIntf[I].Kind);
  149.   Memo1.Lines.Add ('');
  150. end;
  151.  
  152. procedure TFormAnimMi.BtnFlyIClick(Sender: TObject);
  153. var
  154.   I: Integer;
  155.   Fly1: ICanFly;
  156. begin
  157.   Memo1.Lines.Add ('Fly:');
  158.   for I := 1 to 5 do
  159.   begin
  160.     AnimIntf[i].QueryInterface (ICanFly, Fly1);
  161.     if Assigned (Fly1) then
  162.       Memo1.Lines.Add (Fly1.Fly);
  163.   end;
  164.   Memo1.Lines.Add ('');
  165. end;
  166.  
  167. procedure TFormAnimMi.BtnSwimIClick(Sender: TObject);
  168. var
  169.   I: Integer;
  170.   Swim1: ICanSwim;
  171. begin
  172.   Memo1.Lines.Add ('Swim:');
  173.   for I := 1 to 5 do
  174.     if AnimIntf[i].QueryInterface (
  175.         ICanSwim, Swim1) <> E_NoInterface then
  176.       Memo1.Lines.Add (Swim1.Swim);
  177.   Memo1.Lines.Add ('');
  178.  
  179. end;
  180.  
  181. procedure TFormAnimMi.BtnWalkIClick(Sender: TObject);
  182. var
  183.   I: Integer;
  184.   Walker1: ICanWalk;
  185. begin
  186.   Memo1.Lines.Add ('Walk:');
  187.   for I := 1 to 5 do
  188.   try
  189.     Walker1 := AnimIntf[i] as ICanWalk;
  190.     Memo1.Lines.Add (Walker1.Walk);
  191.   except
  192.   end;
  193.   Memo1.Lines.Add ('');
  194. end;
  195.  
  196. procedure TFormAnimMi.FormDestroy(Sender: TObject);
  197. var
  198.   I: Integer;
  199. begin
  200.   for I := 1 to 5 do
  201.     Animals[I].Free;
  202. end;
  203.  
  204. procedure TFormAnimMi.BtnMammalsIClick(Sender: TObject);
  205. var
  206.   I: Integer;
  207.   Mam1: IMammal;
  208. begin
  209.   Memo1.Lines.Add ('Mammals:');
  210.   for I := 1 to 5 do
  211.   begin
  212.     AnimIntf[i].QueryInterface (IMammal, Mam1);
  213.     if Assigned (Mam1) then
  214.       Memo1.Lines.Add (Mam1.Kind);
  215.   end;
  216.   Memo1.Lines.Add ('');
  217. end;
  218.  
  219. end.
  220.