gradedit.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:12k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {     Delphi VCL Extensions (RX)                        }
  4. {                                                       }
  5. {     Copyright (c) 1998 Master-Bank                    }
  6. {     Copyright (c) 1998 Ritting Information Systems    }
  7. {                                                       }
  8. {*******************************************************}
  9. unit GradEdit;
  10. {$I RX.INC}
  11. interface
  12. uses
  13.   Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  14.   StdCtrls, Mask, ToolEdit, RxGrdCpt, RTLConsts, DesignIntf, DesignEditors, VCLEditors, RXCtrls, Placemnt;
  15. {$IFNDEF RX_D4}
  16. type
  17.   IDesigner = TDesigner;
  18. {$ENDIF}
  19. type
  20.   TGradCaptionsEditor = class(TForm)
  21.     ApplyButton: TButton;
  22.     CancelButton: TButton;
  23.     OkButton: TButton;
  24.     GroupBox2: TGroupBox;
  25.     Label1: TLabel;
  26.     Label3: TLabel;
  27.     CaptionText: TEdit;
  28.     CaptionInactiveColor: TComboBox;
  29.     GroupBox1: TGroupBox;
  30.     CaptionList: TTextListBox;
  31.     NewButton: TButton;
  32.     DeleteButton: TButton;
  33.     CaptionParentFont: TCheckBox;
  34.     CaptionGlueNext: TCheckBox;
  35.     CaptionVisible: TCheckBox;
  36.     Label2: TLabel;
  37.     CaptionFont: TComboEdit;
  38.     GradientCaption: TRxGradientCaption;
  39.     FontDialog: TFontDialog;
  40.     ColorDialog: TColorDialog;
  41.     FormStorage: TFormStorage;
  42.     procedure FormCreate(Sender: TObject);
  43.     procedure CaptionListClick(Sender: TObject);
  44.     procedure CaptionListDragDrop(Sender, Source: TObject; X, Y: Integer);
  45.     procedure CaptionListDragOver(Sender, Source: TObject; X, Y: Integer;
  46.       State: TDragState; var Accept: Boolean);
  47.     procedure NewButtonClick(Sender: TObject);
  48.     procedure DeleteButtonClick(Sender: TObject);
  49.     procedure OkButtonClick(Sender: TObject);
  50.     procedure ApplyButtonClick(Sender: TObject);
  51.     procedure CaptionInactiveColorDblClick(Sender: TObject);
  52.     procedure ControlExit(Sender: TObject);
  53.     procedure CaptionTextChange(Sender: TObject);
  54.     procedure CaptionFontButtonClick(Sender: TObject);
  55.     procedure CheckBoxClick(Sender: TObject);
  56.   private
  57.     { Private declarations }
  58.     FComponent: TRxGradientCaption;
  59.     FDesigner: IDesigner;
  60.     FUpdating: Boolean;
  61.     procedure AddColorItem(const ColorName: string);
  62.     procedure EnableControls(Enable: Boolean);
  63.     procedure UpdateCaptionList(Index: Integer);
  64.     procedure ReadControls;
  65.     procedure UpdateControls;
  66.     procedure ClearControls;
  67.     function GetActiveCaption: TRxCaption;
  68.     procedure ApplyChanges;
  69.   public
  70.     { Public declarations }
  71.     procedure SetGradientCaption(Component: TRxGradientCaption;
  72.       Designer: IDesigner);
  73.     property ActiveCaption: TRxCaption read GetActiveCaption;
  74.   end;
  75. { TGradientCaptionEditor }
  76.   TGradientCaptionEditor = class(TComponentEditor)
  77.     procedure Edit; override;
  78.     procedure ExecuteVerb(Index: Integer); override;
  79.     function GetVerb(Index: Integer): string; override;
  80.     function GetVerbCount: Integer; override;
  81.   end;
  82. {$IFNDEF RX_D3}
  83. { TGradientCaptionsProperty }
  84.   TGradientCaptionsProperty = class(TClassProperty)
  85.     function GetAttributes: TPropertyAttributes; override;
  86.     procedure Edit; override;
  87.   end;
  88.   
  89. {$ENDIF}
  90. function EditGradientCaption(Component: TRxGradientCaption;
  91.   Designer: IDesigner): Boolean;
  92. implementation
  93. uses VCLUtils, BoxProcs, RxConst, RxLConst;
  94. {$R *.DFM}
  95. function EditGradientCaption(Component: TRxGradientCaption; Designer: IDesigner): Boolean;
  96.   var gce : TGradCaptionsEditor;
  97. begin
  98.   gce := TGradCaptionsEditor.Create(Application);
  99.   try
  100.     gce.SetGradientCaption(Component, Designer);
  101.     Result := gce.ShowModal = mrOk;
  102.   finally
  103.     gce.Free;
  104.   end;
  105. end;
  106. { TGradientCaptionEditor }
  107. procedure TGradientCaptionEditor.Edit;
  108. begin
  109.   EditGradientCaption(TRxGradientCaption(Component), Designer);
  110. end;
  111. procedure TGradientCaptionEditor.ExecuteVerb(Index: Integer);
  112. begin
  113.   if Index = 0 then Edit;
  114. end;
  115. function TGradientCaptionEditor.GetVerb(Index: Integer): string;
  116. begin
  117.   if Index = 0 then Result := LoadStr(srCaptionDesigner)
  118.   else Result := '';
  119. end;
  120. function TGradientCaptionEditor.GetVerbCount: Integer;
  121. begin
  122.   Result := 1;
  123. end;
  124. {$IFNDEF RX_D3}
  125. { TGradientCaptionsProperty }
  126. function TGradientCaptionsProperty.GetAttributes: TPropertyAttributes;
  127. begin
  128.   Result := [paDialog, paReadOnly];
  129. end;
  130. procedure TGradientCaptionsProperty.Edit;
  131. begin
  132.   if EditGradientCaption(TRxGradientCaption(GetComponent(0)), Designer) then
  133.     Modified;
  134. end;
  135. {$ENDIF RX_D3}
  136. { TGradCaptionsEditor }
  137. procedure TGradCaptionsEditor.UpdateCaptionList(Index: Integer);
  138. var
  139.   I, Save: Integer;
  140. begin
  141.   if Index >= 0 then Save := Index
  142.   else Save := CaptionList.ItemIndex;
  143.   CaptionList.Items.BeginUpdate;
  144.   try
  145.     CaptionList.Items.Clear;
  146.     for I := 0 to GradientCaption.Captions.Count - 1 do
  147.       CaptionList.Items.Add(Format('%s[%d]', [LoadStr(srGradientCaptions), I]));
  148.     if Save < 0 then Save := 0;
  149.     if Save >= CaptionList.Items.Count then
  150.       Save := CaptionList.Items.Count - 1;
  151.   finally
  152.     CaptionList.Items.EndUpdate;
  153.     CaptionList.ItemIndex := Save;
  154.   end;
  155. end;
  156. function TGradCaptionsEditor.GetActiveCaption: TRxCaption;
  157. var
  158.   I: Integer;
  159. begin
  160.   Result := nil;
  161.   I := CaptionList.ItemIndex;
  162.   if (I >= 0) and (I < GradientCaption.Captions.Count) then
  163.     Result := GradientCaption.Captions[I];
  164. end;
  165. procedure TGradCaptionsEditor.SetGradientCaption(Component: TRxGradientCaption;
  166.   Designer: IDesigner);
  167. begin
  168.   FComponent := Component;
  169.   FDesigner := Designer;
  170.   if Component <> nil then begin
  171.     with GradientCaption do begin
  172.       Active := False;
  173.       Font := Component.Font;
  174.       DefaultFont := Component.DefaultFont;
  175.       FontInactiveColor := Component.FontInactiveColor;
  176.       GradientActive := Component.GradientActive;
  177.       GradientInactive := Component.GradientInactive;
  178.       StartColor := Component.StartColor;
  179.       HideDirection := Component.HideDirection;
  180.       GradientSteps := Component.GradientSteps;
  181.       Captions := Component.Captions;
  182.       if Component.Name <> '' then
  183.         FormCaption := Format('%s.%s', [Component.Name,
  184.           LoadStr(srGradientCaptions)])
  185.       else
  186.         FormCaption := Format('%s.%s', [Component.ClassName,
  187.           LoadStr(srGradientCaptions)]);
  188.       Active := True;
  189.     end;
  190.   end;
  191.   UpdateCaptionList(-1);
  192.   UpdateControls;
  193. end;
  194. procedure TGradCaptionsEditor.ApplyChanges;
  195. begin
  196.   ReadControls;
  197.   if Assigned(FComponent) then begin
  198.     FComponent.Captions := GradientCaption.Captions;
  199.     if Assigned(FDesigner) then FDesigner.Modified;
  200.   end;
  201. end;
  202. procedure TGradCaptionsEditor.AddColorItem(const ColorName: string);
  203. begin
  204.   CaptionInactiveColor.Items.Add(ColorName);
  205. end;
  206. procedure TGradCaptionsEditor.UpdateControls;
  207. begin
  208.   if ActiveCaption = nil then begin
  209.     ClearControls;
  210.     EnableControls(False);
  211.   end else
  212.   with ActiveCaption do begin
  213.     FUpdating := True;
  214.     try
  215.       FontDialog.Font := Font;
  216.       CaptionText.Text := Caption;
  217.       CaptionInactiveColor.ItemIndex := -1;
  218.       CaptionInactiveColor.Text := ColorToString(InactiveColor);
  219.       CaptionFont.Text := Font.Name;
  220.       CaptionParentFont.Checked := ParentFont;
  221.       CaptionGlueNext.Checked := GlueNext;
  222.       CaptionVisible.Checked := Visible;
  223.       EnableControls(True);
  224.     finally
  225.       FUpdating := False;
  226.     end;
  227.   end;
  228. end;
  229. procedure TGradCaptionsEditor.EnableControls(Enable: Boolean);
  230. begin
  231.   CaptionText.Enabled := Enable;
  232.   CaptionInactiveColor.Enabled := Enable;
  233.   CaptionFont.Enabled := Enable;
  234.   CaptionParentFont.Enabled := Enable;
  235.   CaptionGlueNext.Enabled := Enable;
  236.   CaptionVisible.Enabled := Enable;
  237.   DeleteButton.Enabled := Enable;
  238. end;
  239. procedure TGradCaptionsEditor.ClearControls;
  240. begin
  241.   FUpdating := True;
  242.   try
  243.     CaptionText.Text := '';
  244.     CaptionInactiveColor.ItemIndex := -1;
  245.     CaptionInactiveColor.Text := '';
  246.     CaptionFont.Text := '';
  247.     CaptionParentFont.Checked := False;
  248.     CaptionGlueNext.Checked := False;
  249.     CaptionVisible.Checked := False;
  250.   finally
  251.     FUpdating := False;  
  252.   end;
  253. end;
  254. procedure TGradCaptionsEditor.ReadControls;
  255. begin
  256.   if not FUpdating and (ActiveCaption <> nil) then begin
  257.     GradientCaption.Captions.BeginUpdate;
  258.     FUpdating := True;
  259.     try
  260.       with ActiveCaption do begin
  261.         Caption := CaptionText.Text;
  262.         InactiveColor := StringToColor(CaptionInactiveColor.Text);
  263.         ParentFont := CaptionParentFont.Checked;
  264.         GlueNext := CaptionGlueNext.Checked;
  265.         Visible := CaptionVisible.Checked;
  266.       end;
  267.     finally
  268.       GradientCaption.Captions.EndUpdate;
  269.       FUpdating := False;
  270.     end;
  271.   end;
  272. end;
  273. procedure TGradCaptionsEditor.FormCreate(Sender: TObject);
  274. begin
  275.   FormStorage.IniFileName := SDelphiKey;
  276.   CaptionInactiveColor.Items.BeginUpdate;
  277.   try
  278.     GetColorValues(AddColorItem);
  279.   finally
  280.     CaptionInactiveColor.Items.EndUpdate;
  281.   end;
  282. end;
  283. procedure TGradCaptionsEditor.CaptionListClick(Sender: TObject);
  284. begin
  285.   if not FUpdating then UpdateControls;
  286. end;
  287. procedure TGradCaptionsEditor.CaptionListDragDrop(Sender, Source: TObject; X,
  288.   Y: Integer);
  289. var
  290.   I: Integer;
  291. begin
  292.   I := CaptionList.ItemAtPos(Point(X, Y), True);
  293.   if (I >= 0) and (I < CaptionList.Items.Count) and
  294.     (I <> CaptionList.ItemIndex) then
  295.   begin
  296.     GradientCaption.MoveCaption(CaptionList.ItemIndex, I);
  297.     CaptionList.ItemIndex := I;
  298.     if not FUpdating then UpdateControls;
  299.   end;
  300. end;
  301. procedure TGradCaptionsEditor.CaptionListDragOver(Sender, Source: TObject; X,
  302.   Y: Integer; State: TDragState; var Accept: Boolean);
  303. begin
  304.   BoxDragOver(CaptionList, Source, X, Y, State, Accept, CaptionList.Sorted);
  305. end;
  306. procedure TGradCaptionsEditor.NewButtonClick(Sender: TObject);
  307. begin
  308.   if GradientCaption.Captions.Add <> nil then begin
  309.     UpdateCaptionList(GradientCaption.Captions.Count - 1);
  310.     UpdateControls;
  311.     if CaptionText.CanFocus then ActiveControl := CaptionText; 
  312.   end;
  313. end;
  314. procedure TGradCaptionsEditor.DeleteButtonClick(Sender: TObject);
  315. begin
  316.   if ActiveCaption <> nil then begin
  317.     ActiveCaption.Free;
  318.     UpdateCaptionList(-1);
  319.     UpdateControls;
  320.   end;
  321. end;
  322. procedure TGradCaptionsEditor.OkButtonClick(Sender: TObject);
  323. begin
  324.   ApplyChanges;
  325.   ModalResult := mrOk;
  326. end;
  327. procedure TGradCaptionsEditor.ApplyButtonClick(Sender: TObject);
  328. begin
  329.   ApplyChanges;
  330. end;
  331. procedure TGradCaptionsEditor.CaptionInactiveColorDblClick(
  332.   Sender: TObject);
  333. begin
  334.   with ColorDialog do begin
  335.     Color := StringToColor(CaptionInactiveColor.Text);
  336.     if Execute then begin
  337.       CaptionInactiveColor.Text := ColorToString(Color);
  338.       if not FUpdating and (ActiveCaption <> nil) then
  339.         ActiveCaption.InactiveColor := Color;
  340.     end;
  341.   end;
  342. end;
  343. procedure TGradCaptionsEditor.ControlExit(Sender: TObject);
  344. begin
  345.   if not FUpdating then ReadControls;
  346. end;
  347. procedure TGradCaptionsEditor.CaptionTextChange(Sender: TObject);
  348. begin
  349.   if not FUpdating and (ActiveCaption <> nil) then
  350.     ActiveCaption.Caption := CaptionText.Text;
  351. end;
  352. procedure TGradCaptionsEditor.CaptionFontButtonClick(Sender: TObject);
  353. begin
  354.   if ActiveCaption <> nil then begin
  355.     with FontDialog do begin
  356.       Font := ActiveCaption.Font;
  357.       Font.Color := ColorToRGB(ActiveCaption.Font.Color);
  358.       if Execute then begin
  359.         FUpdating := True;
  360.         try
  361.           CaptionFont.Text := Font.Name;
  362.           ActiveCaption.Font := Font;
  363.           CaptionParentFont.Checked := ActiveCaption.ParentFont;
  364.         finally
  365.           FUpdating := False;
  366.         end;
  367.       end;
  368.     end;
  369.   end
  370.   else Beep;
  371. end;
  372. procedure TGradCaptionsEditor.CheckBoxClick(Sender: TObject);
  373. begin
  374.   if not FUpdating then ReadControls;
  375. end;
  376. end.