teeedigrad.pas

来自「Delphi TeeChartPro.6.01的源代码」· PAS 代码 · 共 292 行

PAS
292
字号
{**********************************************}
{  TChartGradient Editor Dialog                }
{  Copyright (c) 1999-2003 by David Berneda    }
{**********************************************}
unit TeeEdiGrad;
{$I TeeDefs.inc}

interface

uses
  {$IFNDEF LINUX}
  Windows, Messages,
  {$ENDIF}
  SysUtils, Classes,
  {$IFDEF CLX}
  QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls, QComCtrls,
  {$ELSE}
  Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls,
  {$ENDIF}
  TeeProcs, TeePenDlg, TeCanvas;

type
  TTeeGradientEditor = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Label4: TLabel;
    SBBalance: TScrollBar;
    LabelBalance: TLabel;
    GroupBox2: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    LRadialX: TLabel;
    LRadialY: TLabel;
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    BSwap: TButton;
    BStart: TButtonColor;
    BEnd: TButtonColor;
    BMid: TButtonColor;
    CBMid: TCheckBox;
    Panel1: TPanel;
    BOk: TButton;
    BCancel: TButton;
    Panel2: TPanel;
    CBVisible: TCheckBox;
    Label1: TLabel;
    CBDirection: TComboFlat;
    procedure CBVisibleClick(Sender: TObject);
    procedure CBDirectionChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BCancelClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BSwapClick(Sender: TObject);
    procedure CBMidClick(Sender: TObject);
    procedure BMidClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure SBBalanceChange(Sender: TObject);
    procedure BStartClick(Sender: TObject);
    procedure BEndClick(Sender: TObject);
  private
    { Private declarations }
    Backup : TCustomTeeGradient;
    IModified  : Boolean;
    IOnlyStart : Boolean;
    SettingProps : Boolean;
    procedure CheckDirection;
    procedure CheckVisible;
  public
    { Public declarations }
    TheGradient : TCustomTeeGradient;
    Constructor CreateCustom(AOwner:TComponent; AGradient:TCustomTeeGradient);
    Procedure RefreshGradient(AGradient:TCustomTeeGradient);
  end;

Function EditTeeGradient(AOwner:TComponent; AGradient:TCustomTeeGradient):Boolean; overload;
Function EditTeeGradient(AOwner:TComponent; AGradient:TCustomTeeGradient;
                         OnlyStart:Boolean; HideVisible:Boolean=False):Boolean; overload;

implementation

{$IFNDEF CLX}
{$R *.DFM}
{$ELSE}
{$R *.xfm}
{$ENDIF}

uses TeeConst;

Function EditTeeGradient( AOwner:TComponent;
                          AGradient:TCustomTeeGradient):Boolean;
begin
  result:=EditTeeGradient(AOwner,AGradient,False,False);
end;

Function EditTeeGradient( AOwner:TComponent;
                          AGradient:TCustomTeeGradient;
                          OnlyStart:Boolean;
                          HideVisible:Boolean=False):Boolean;
begin
  With TeeCreateForm(TTeeGradientEditor,AOwner) as TTeeGradientEditor do
  try
    Tag:=Integer(AGradient);
    IOnlyStart:=OnlyStart;

    if IOnlyStart then
    begin
      BEnd.Visible:=False;
      BSwap.Visible:=False;
    end;

    CBVisible.Visible:=not HideVisible;
    result:=ShowModal=mrOk;
  finally
    Free;
  end;
end;

Constructor TTeeGradientEditor.CreateCustom(AOwner:TComponent; AGradient:TCustomTeeGradient);
Begin
  inherited Create(AOwner);
  TheGradient:=AGradient;
  Tag:=Integer(TheGradient);
  Panel1.Visible:=False;
  BOk.Visible:=False;
  BCancel.Visible:=False;
  Height:=Height-BOk.Height;
end;

procedure TTeeGradientEditor.CheckVisible;
Begin
  EnableControls(IOnlyStart or TheGradient.Visible,
                 [CBDirection,BStart,CBMid,BMid,BEnd,BSwap]);
end;

procedure TTeeGradientEditor.CheckDirection;
var tmp : Boolean;
begin
  With TheGradient do
  begin
    tmp:=(Direction=gdFromCenter) or
         (Direction=gdRadial) or
         (Direction=gdFromTopLeft) or
         (Direction=gdFromBottomLeft);
    EnableControls(IOnlyStart or Visible and (not tmp),[CBMid,BMid]);
    EnableControls(Direction=gdRadial,[Label2,Label3,TrackBar1,TrackBar2]);
  end;
end;

procedure TTeeGradientEditor.CBVisibleClick(Sender: TObject);
begin
  IModified:=True;
  TheGradient.Visible:=CBVisible.Checked;
  CheckVisible;
end;

procedure TTeeGradientEditor.CBDirectionChange(Sender: TObject);
begin
  IModified:=True;
  TheGradient.Direction:=TGradientDirection(CBDirection.ItemIndex);
  CheckDirection;
end;

Procedure TTeeGradientEditor.RefreshGradient(AGradient:TCustomTeeGradient);
begin
  SettingProps:=True;
  Tag:=Integer(AGradient);
  TheGradient:=AGradient;
  if Assigned(TheGradient) then
  begin
    Backup.Free;
    Backup:=TChartGradient.Create(nil);
    Backup.Assign(TheGradient);

    With TheGradient do
    begin
      SBBalance.Position:=Balance;
      CBVisible.Checked:=Visible;
      CBDirection.ItemIndex:=Ord(Direction);
      CBMid.Checked:=MidColor=clNone;
      TrackBar1.Position:=RadialX;
      LRadialX.Caption:=IntToStr(RadialX);
      TrackBar2.Position:=RadialY;
      LRadialY.Caption:=IntToStr(RadialY);
    end;

    BStart.LinkProperty(TheGradient,'StartColor');
    BMid.LinkProperty(TheGradient,'MidColor');
    BEnd.LinkProperty(TheGradient,'EndColor');
    CheckVisible;
    CheckDirection;
  end;

  SettingProps:=False;
end;

procedure TTeeGradientEditor.FormShow(Sender: TObject);
begin
  RefreshGradient(TChartGradient(Tag));
  IModified:=False;
  TeeTranslateControl(Self);
end;

procedure TTeeGradientEditor.BCancelClick(Sender: TObject);
begin
  if IModified then
  begin
    TheGradient.Assign(Backup);
    TheGradient.Changed(Self);
  end;
end;

procedure TTeeGradientEditor.FormDestroy(Sender: TObject);
begin
  Backup.Free;
end;

procedure TTeeGradientEditor.BSwapClick(Sender: TObject);
var tmp : TColor;
begin
  IModified:=True;
  With TheGradient do
  begin
    tmp:=StartColor;
    StartColor:=EndColor;
    EndColor:=tmp;
  end;
  BStart.Repaint;
  BEnd.Repaint;
end;

procedure TTeeGradientEditor.CBMidClick(Sender: TObject);
begin
  if not SettingProps then
  begin
    IModified:=True;
    if CBMid.Checked then TheGradient.MidColor:=clNone
                     else TheGradient.UseMiddleColor;
    BMid.Repaint;
  end;
end;

procedure TTeeGradientEditor.BMidClick(Sender: TObject);
begin
  IModified:=True;
  CBMid.Checked:=TheGradient.MidColor=clNone;
end;

procedure TTeeGradientEditor.FormCreate(Sender: TObject);
begin
  Align:=alClient;
  BorderStyle:=TeeBorderStyle;
end;

procedure TTeeGradientEditor.TrackBar1Change(Sender: TObject);
begin
  IModified:=True;
  TheGradient.RadialX:=TrackBar1.Position;
  LRadialX.Caption:=IntToStr(TheGradient.RadialX);
end;

procedure TTeeGradientEditor.TrackBar2Change(Sender: TObject);
begin
  IModified:=True;
  TheGradient.RadialY:=TrackBar2.Position;
  LRadialY.Caption:=IntToStr(TheGradient.RadialY);
end;

procedure TTeeGradientEditor.SBBalanceChange(Sender: TObject);
begin
  if not SettingProps then
  begin
    IModified:=True;
    TheGradient.Balance:=SBBalance.Position;
  end;
  LabelBalance.Caption:=FormatFloat(TeeMsg_DefPercentFormat,TheGradient.Balance);
end;

procedure TTeeGradientEditor.BStartClick(Sender: TObject);
begin
  IModified:=True;
end;

procedure TTeeGradientEditor.BEndClick(Sender: TObject);
begin
  IModified:=True;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?