home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / PIEREG.PAS < prev    next >
Pascal/Delphi Source File  |  1996-05-08  |  4KB  |  158 lines

  1. unit PieReg;
  2.  
  3. interface
  4.  
  5. uses Windows, Classes, Graphics, Forms, Controls, Pies, Buttons, DsgnIntf,
  6.   DsgnWnds, StdCtrls, ComCtrls;
  7.  
  8. type
  9.   TAngleEditorDlg = class(TForm)
  10.     EAngleLabel: TLabel;
  11.     OKButton: TButton;
  12.     CancelButton: TButton;
  13.     SAngleLabel: TLabel;
  14.     STrackBar: TTrackBar;
  15.     ETrackBar: TTrackBar;
  16.     procedure CancelClick(Sender: TObject);
  17.     procedure STrackBarChange(Sender: TObject);
  18.     procedure ETrackBarChange(Sender: TObject);
  19.   private
  20.     FOrigStart, FOrigEnd: Integer;
  21.     FAngles: TAngles;
  22.     procedure SetStartAngle(Value: Integer);
  23.     procedure SetEndAngle(Value: Integer);
  24.     procedure SetAngles(Value: TAngles);
  25.   public
  26.     property EditorAngles: TAngles read FAngles write SetAngles;
  27.   end;
  28.  
  29.   TAnglesProperty = class(TClassProperty)
  30.   public
  31.     procedure Edit; override;
  32.     function GetAttributes: TPropertyAttributes; override;
  33.   end;
  34.  
  35.   { Component editor - brings up angle editor when double clicking on
  36.     Angles property }
  37.   TPieEditor = class(TDefaultEditor)
  38.   protected
  39.     procedure EditProperty(PropertyEditor: TPropertyEditor;
  40.       var Continue, FreeEditor: Boolean); override;
  41.   public
  42.     procedure ExecuteVerb(Index: Integer); override;
  43.     function GetVerb(Index: Integer): string; override;
  44.     function GetVerbCount: Integer; override;
  45.   end;
  46.  
  47. procedure Register;
  48.  
  49. implementation
  50.  
  51. uses SysUtils;
  52.  
  53. {$R *.DFM}
  54.  
  55. { TAngleEditorDlg }
  56.  
  57. procedure TAngleEditorDlg.STrackBarChange(Sender: TObject);
  58. begin
  59.   SetStartAngle(STrackBar.Position);
  60. end;
  61.  
  62. procedure TAngleEditorDlg.ETrackBarChange(Sender: TObject);
  63. begin
  64.   SetEndAngle(ETrackBar.Position);
  65. end;
  66.  
  67. procedure TAngleEditorDlg.SetStartAngle(Value: Integer);
  68. begin
  69.   STrackBar.Position := Value;
  70.   SAngleLabel.Caption := 'StartAngle = '+ IntToStr(Value);
  71.   FAngles.StartAngle := Value;
  72. end;
  73.  
  74. procedure TAngleEditorDlg.SetEndAngle(Value: Integer);
  75. begin
  76.   ETrackBar.Position := Value;
  77.   EAngleLabel.Caption := 'EndAngle = '+ IntToStr(Value);
  78.   FAngles.EndAngle := Value;
  79. end;
  80.  
  81. procedure TAngleEditorDlg.SetAngles(Value: TAngles);
  82. begin
  83.   FAngles := Value;
  84.   FOrigStart := Value.StartAngle;
  85.   FOrigEnd := Value.EndAngle;
  86.   SetStartAngle(Value.StartAngle);
  87.   SetEndAngle(Value.EndAngle);
  88. end;
  89.  
  90. procedure TAngleEditorDlg.CancelClick(Sender: TObject);
  91. begin
  92.   SetStartAngle(FOrigStart);
  93.   SetEndAngle(FOrigEnd);
  94. end;
  95.  
  96. { TAnglesProperty }
  97.  
  98. procedure TAnglesProperty.Edit;
  99. var
  100.   Angles: TAngles;
  101.   AngleEditor: TAngleEditorDlg;
  102. begin
  103.   Angles := TAngles(GetOrdValue);
  104.   AngleEditor := TAngleEditorDlg.Create(Application);
  105.   try
  106.     AngleEditor.EditorAngles := Angles;
  107.     AngleEditor.ShowModal;
  108.   finally
  109.     AngleEditor.Free;
  110.   end;
  111. end;
  112.  
  113. function TAnglesProperty.GetAttributes: TPropertyAttributes;
  114. begin
  115.   Result := [paDialog, paSubProperties];
  116. end;
  117.  
  118. {TPieEditor}
  119.  
  120. procedure TPieEditor.EditProperty(PropertyEditor: TPropertyEditor;
  121.   var Continue, FreeEditor: Boolean);
  122. var
  123.   PropName: string;
  124. begin
  125.   PropName := PropertyEditor.GetName;
  126.   if (CompareText(PropName, 'ANGLES') = 0) then
  127.   begin
  128.     PropertyEditor.Edit;
  129.     Continue := False;
  130.   end;
  131. end;
  132.  
  133. function TPieEditor.GetVerbCount: Integer;
  134. begin
  135.   Result := 1;
  136. end;
  137.  
  138. function TPieEditor.GetVerb(Index: Integer): string;
  139. begin
  140.   if Index = 0 then
  141.     Result := 'Edit Angles'
  142.   else Result := '';
  143. end;
  144.  
  145. procedure TPieEditor.ExecuteVerb(Index: Integer);
  146. begin
  147.   if Index = 0 then Edit;
  148. end;
  149.  
  150. procedure Register;
  151. begin
  152.   RegisterComponents('Samples',[TPie]);
  153.   RegisterComponentEditor(TPie, TPieEditor);
  154.   RegisterPropertyEditor(TypeInfo(TAngles), nil, '', TAnglesProperty);
  155. end;
  156.  
  157. end.
  158.