home *** CD-ROM | disk | FTP | other *** search
/ PC Format Collection 48 / SENT14D.ISO / tech / delphi / disk15 / propedit.pak / ANGLEDIT.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-08-24  |  3.1 KB  |  132 lines

  1. unit Angledit;
  2.  
  3. interface
  4.  
  5. uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Pies,
  6.   Buttons, DsgnIntf, StdCtrls;
  7.  
  8. type
  9.   TAngleEditorDlg = class(TForm)
  10.     EAngleBar: TScrollBar;
  11.     EAngleLabel: TLabel;
  12.     OKButton: TBitBtn;
  13.     CancelButton: TBitBtn;
  14.     SAngleLabel: TLabel;
  15.     SAngleBar: TScrollBar;
  16.     procedure EAngleBarScroll(Sender: TObject; ScrollCode: TScrollCode;
  17.       var ScrollPos: Integer);
  18.     procedure SAngleBarScroll(Sender: TObject; ScrollCode: TScrollCode;
  19.       var ScrollPos: Integer);
  20.     procedure CancelClick(Sender: TObject);
  21.   private
  22.     FOrigStart, FOrigEnd: Integer;
  23.     FAngles: TAngles;
  24.     procedure SetStartAngle(Value: Integer);
  25.     procedure SetEndAngle(Value: Integer);
  26.     procedure SetAngles(Value: TAngles);
  27.   public
  28.     property EditorAngles: TAngles read FAngles write SetAngles;
  29.   end;
  30.  
  31.   TAnglesProperty = class(TClassProperty)
  32.   public
  33.     procedure Edit; override;
  34.     function GetAttributes: TPropertyAttributes; override;
  35.   end;
  36.  
  37.   { Component editor - brings up angle editor when double clicking on
  38.     Angles property }
  39.   TPieEditor = class(TDefaultEditor)
  40.   public
  41.     procedure EditProperty(PropertyEditor: TPropertyEditor;
  42.       var Continue, FreeEditor: Boolean); virtual;
  43.   end;
  44.  
  45. implementation
  46.  
  47. uses SysUtils;
  48.  
  49. {$R *.DFM}
  50.  
  51. { TAngleEditorDlg }
  52.  
  53. procedure TAngleEditorDlg.SAngleBarScroll(Sender: TObject;
  54.   ScrollCode: TScrollCode; var ScrollPos: Integer);
  55. begin
  56.   SetStartAngle(ScrollPos);
  57. end;
  58.  
  59. procedure TAngleEditorDlg.EAngleBarScroll(Sender: TObject;
  60.   ScrollCode: TScrollCode; var ScrollPos: Integer);
  61. begin
  62.   SetEndAngle(ScrollPos);
  63. end;
  64.  
  65. procedure TAngleEditorDlg.SetStartAngle(Value: Integer);
  66. begin
  67.   SAngleBar.Position := Value;
  68.   SAngleLabel.Caption := 'StartAngle = '+ IntToStr(Value);
  69.   FAngles.StartAngle := Value;
  70. end;
  71.  
  72. procedure TAngleEditorDlg.SetEndAngle(Value: Integer);
  73. begin
  74.   EAngleBar.Position := Value;
  75.   EAngleLabel.Caption := 'EndAngle = '+ IntToStr(Value);
  76.   FAngles.EndAngle := Value;
  77. end;
  78.  
  79. procedure TAngleEditorDlg.SetAngles(Value: TAngles);
  80. begin
  81.   FAngles := Value;
  82.   FOrigStart := Value.StartAngle;
  83.   FOrigEnd := Value.EndAngle;
  84.   SetStartAngle(Value.StartAngle);
  85.   SetEndAngle(Value.EndAngle);
  86. end;
  87.  
  88. procedure TAngleEditorDlg.CancelClick(Sender: TObject);
  89. begin
  90.   SetStartAngle(FOrigStart);
  91.   SetEndAngle(FOrigEnd);
  92. end;
  93.  
  94. { TAnglesProperty }
  95.  
  96. procedure TAnglesProperty.Edit;
  97. var
  98.   Angles: TAngles;
  99.   AngleEditor: TAngleEditorDlg;
  100. begin
  101.   Angles := TAngles(GetOrdValue);
  102.   AngleEditor := TAngleEditorDlg.Create(Application);
  103.   try
  104.     AngleEditor.EditorAngles := Angles;
  105.     AngleEditor.ShowModal;
  106.   finally
  107.     AngleEditor.Free;
  108.   end;
  109. end;
  110.  
  111. function TAnglesProperty.GetAttributes: TPropertyAttributes;
  112. begin
  113.   Result := [paDialog, paSubProperties];
  114. end;
  115.  
  116. {TPieEditor}
  117.  
  118. procedure TPieEditor.EditProperty(PropertyEditor: TPropertyEditor;
  119.   var Continue, FreeEditor: Boolean);
  120. var
  121.   PropName: string;
  122. begin
  123.   PropName := PropertyEditor.GetName;
  124.   if (CompareText(PropName, 'ANGLES') = 0) then
  125.   begin
  126.     PropertyEditor.Edit;
  127.     Continue := False;
  128.   end;
  129. end;
  130.  
  131. end.
  132.