⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeshed.pas

📁 第三方控件:PaintGrid.pas 网格型仪表控件源文件 Mymeter.pas 圆型仪表控件源文件 Project1是这两个控件的使用范例。 该
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{**********************************************}
{   TTree Component                            }
{   Copyright (c) 1998-2002 by David Berneda   }
{**********************************************}
{$I TeeDefs.inc}
unit TreeShEd;

interface

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

type
  TNodeTreeEditor = class(TForm)
    Button3: TButton;
    PageControl1: TPageControl;
    TabText: TTabSheet;
    TabImage: TTabSheet;
    Label6: TLabel;
    ComboBox4: TComboFlat;
    Image1: TImage;
    Button5: TButton;
    TabFormat: TTabSheet;
    Label2: TLabel;
    CheckBox3: TCheckBox;
    Label1: TLabel;
    CBStyle: TComboFlat;
    Button1: TButton;
    TabGradient: TTabSheet;
    CheckBox2: TCheckBox;
    ComboBox2: TComboFlat;
    Label4: TLabel;
    TabShadow: TTabSheet;
    Label5: TLabel;
    Label7: TLabel;
    Shape1: TShape;
    TabPosition: TTabSheet;
    Label8: TLabel;
    Label9: TLabel;
    CheckBox1: TCheckBox;
    Label10: TLabel;
    Label11: TLabel;
    UpDown1: TUpDown;
    UpDown2: TUpDown;
    UpDown3: TUpDown;
    UpDown4: TUpDown;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label12: TLabel;
    ScrollBar2: TScrollBar;
    Label13: TLabel;
    ScrollBar3: TScrollBar;
    Label14: TLabel;
    ScrollBar4: TScrollBar;
    Label15: TLabel;
    ScrollBar5: TScrollBar;
    Bevel1: TBevel;
    Label16: TLabel;
    CBCursor: TComboFlat;
    CheckBox4: TCheckBox;
    Shape4: TShape;
    Label18: TLabel;
    ComboBox3: TComboFlat;
    CheckBox5: TCheckBox;
    Edit7: TEdit;
    UpDown7: TUpDown;
    Label17: TLabel;
    Edit8: TEdit;
    UpDown8: TUpDown;
    CheckBox6: TCheckBox;
    Edit5: TEdit;
    UpDown5: TUpDown;
    Label3: TLabel;
    Label19: TLabel;
    Edit6: TEdit;
    UpDown6: TUpDown;
    Label20: TLabel;
    ComboBox5: TComboFlat;
    GroupBox1: TGroupBox;
    Shape2: TShape;
    Shape3: TShape;
    Button4: TButton;
    Shape5: TShape;
    Button2: TButton;
    Shape6: TShape;
    BBackColor: TButtonColor;
    CheckBox7: TCheckBox;
    Label21: TLabel;
    ETransp: TEdit;
    UDTransp: TUpDown;
    CheckBox8: TCheckBox;
    CBConnStyle: TComboFlat;
    Label22: TLabel;
    CBImgTransp: TCheckBox;
    CBSmooth: TCheckBox;
    Label23: TLabel;
    Edit9: TEdit;
    UpDown9: TUpDown;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure CBStyleChange(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox4Change(Sender: TObject);
    procedure Shape2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
    procedure Shape3MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
    procedure Button3Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure CheckBox1Click(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Edit4Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ScrollBar2Change(Sender: TObject);
    procedure ScrollBar4Change(Sender: TObject);
    procedure ScrollBar5Change(Sender: TObject);
    procedure ScrollBar3Change(Sender: TObject);
    procedure CBCursorChange(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
    procedure Shape4MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ComboBox3Change(Sender: TObject);
    procedure CheckBox5Click(Sender: TObject);
    procedure Edit7Change(Sender: TObject);
    procedure Edit8Change(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure CheckBox6Click(Sender: TObject);
    procedure Edit5Change(Sender: TObject);
    procedure ComboBox5Change(Sender: TObject);
    procedure Shape5MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Shape6MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BBackColorClick(Sender: TObject);
    procedure CheckBox7Click(Sender: TObject);
    procedure ETranspChange(Sender: TObject);
    procedure CBConnStyleChange(Sender: TObject);
    procedure CheckBox8Click(Sender: TObject);
    procedure CBImgTranspClick(Sender: TObject);
    procedure CBSmoothClick(Sender: TObject);
    procedure Edit9Change(Sender: TObject);
  private
    { Private declarations }
    Changing  : Boolean;
    OldX      : Integer;
    OldY      : Integer;
    procedure CheckImgTransp;
    procedure Image1Assign(Value:TPicture);
    procedure ProcGetCursors(const S: string);
    Procedure SetUpDowns;
  public
    { Public declarations }
    Tree1     : TCustomTree;
  end;

type TTreeShapeTabs=(stFormat,stText,stImage,stGradient,stShadow,stPosition);

Procedure EditTreeShape(AOwner:TComponent; AShape:TTreeNodeShape);
Procedure EditTreeShapePage( AOwner:TComponent; AShape:TTreeNodeShape;
                             ATab:TTreeShapeTabs; ShowPosition:Boolean);

Procedure InternalEditTreeShapePage( AOwner:TComponent; AShape:TTreeNodeShape;
                             ATab:TTreeShapeTabs; ShowPosition:Boolean;
                             CallOnShow:TNotifyEvent);

Function PictureDialog:TOpenDialog;

implementation

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

Uses TeeBrushDlg, TeeProcs, TreeTeEd, TeeTranslate, TreeConst;

Procedure EditTreeShape(AOwner:TComponent; AShape:TTreeNodeShape);
begin
  EditTreeShapePage(AOwner,AShape,stFormat,True);
end;

Procedure EditTreeShapePage( AOwner:TComponent; AShape:TTreeNodeShape;
                             ATab:TTreeShapeTabs; ShowPosition:Boolean);
begin
  InternalEditTreeShapePage(AOwner,AShape,ATab,ShowPosition,nil);
end;

type TSelectedAccess=class(TSelectedShapeList);

Procedure InternalEditTreeShapePage( AOwner:TComponent; AShape:TTreeNodeShape;
                             ATab:TTreeShapeTabs; ShowPosition:Boolean;
                             CallOnShow:TNotifyEvent);
var OldSelected : Boolean;
    tmpEditor   : TNodeTreeEditor;
begin
  tmpEditor:=TNodeTreeEditor.Create(AOwner);
  with tmpEditor do
  try
    TabPosition.TabVisible:=ShowPosition;
    OldSelected:=AShape.Selected;
    Tree1:=TTree(AShape.Tree);
    if not Assigned(Tree1) then
    begin
      Tree1:=TCustomTree.Create(nil);
      TSelectedAccess(Tree1.Selected).InternalAdd(AShape);
    end
    else
    begin
      //Tree1.Selected.Clear;  //tom 25/08/2002: change all selected objects
      AShape.Selected:=True;
    end;

    Case ATab of
      stFormat    : PageControl1.ActivePage:=TabFormat;
      stText      : PageControl1.ActivePage:=TabText;
      stImage     : PageControl1.ActivePage:=TabImage;
      stGradient  : PageControl1.ActivePage:=TabGradient;
      stShadow    : PageControl1.ActivePage:=TabShadow;
      stPosition  : PageControl1.ActivePage:=TabPosition;
    end;

    if Assigned(CallOnShow) then CallOnShow(tmpEditor);

    PageControl1Change(PageControl1);

    ShowModal;
    AShape.Selected:=OldSelected;

    if not Assigned(AShape.Tree) then Tree1.Free;
  finally
    Free;
  end;
end;

procedure TNodeTreeEditor.Button1Click(Sender: TObject);
var t : Integer;
begin
  With Tree1 do
  if Selected.Count>0 then
    if EditChartPen(Self,Selected[0].Border) then
       for t:=1 to Selected.Count-1 do
           Selected[t].Border.Assign(Selected[0].Border);
end;

procedure TNodeTreeEditor.Button2Click(Sender: TObject);
var t : Integer;
begin
  With Tree1 do
  if Selected.Count>0 then
    if EditChartBrush(Self,Selected[0].Brush) then
       for t:=1 to Selected.Count-1 do
           Selected[t].Brush.Assign(Selected[0].Brush);
end;

Function PictureDialog:TOpenDialog;
begin
  {$IFDEF D4}
  {$IFDEF CLX}
  result:=TOpenDialog.Create(nil);
  {$ELSE}
  result:=TOpenPictureDialog.Create(nil);
  {$ENDIF}
  {$ELSE}
  result:=TOpenDialog.Create(nil);
  {$ENDIF}
  result.Filter:=GraphicFilter(TGraphic);
end;

procedure TNodeTreeEditor.CheckImgTransp;
begin
  CBImgTransp.Enabled:=Assigned(Image1.Picture.Graphic);
  CBImgTransp.Checked:=CBImgTransp.Enabled and Image1.Picture.Graphic.Transparent;
end;

procedure TNodeTreeEditor.Image1Assign(Value:TPicture);
begin
  Image1.Picture.Assign(Value);
  Image1.Transparent:=Assigned(Value) and Assigned(Value.Graphic)
                                      and Value.Graphic.Transparent;
  CheckImgTransp;
end;

procedure TNodeTreeEditor.Button5Click(Sender: TObject);
var t : Integer;
begin
  With Tree1 do
  if Selected.Count>0 then
  if Button5.Caption=TreeMsg_Browse then
  begin
    with PictureDialog do
    try
      if Execute then
      begin
        Selected[0].ImageIndex:=tiNone;
        Selected[0].Image.LoadFromFile(FileName);
        for t:=1 to Selected.Count-1 do
        begin
          Selected[t].ImageIndex:=tiNone;
          Selected[t].Image.Assign(Selected[0].Image);
        end;

        Image1Assign(Selected[0].Image);

        ComboBox3.ItemIndex:=0;
        Button5.Caption:=TreeMsg_Clear;
      end;
    finally
      Free;
    end;
  end
  else
  begin
    for t:=0 to Selected.Count-1 do
    begin
      Selected[t].ImageIndex:=tiNone;
      Selected[t].Image.Assign(nil);
    end;
    Tree1.Repaint;
    Image1Assign(nil);
    ComboBox3.ItemIndex:=0;
    Button5.Caption:=TreeMsg_Browse;
  end;
end;

procedure TNodeTreeEditor.CheckBox2Click(Sender: TObject);
var t : Integer;
begin
  if not Changing then
  With Tree1 do
  for t:=0 to Selected.Count-1 do
      Selected[t].Gradient.Visible:=CheckBox2.Checked;
end;

procedure TNodeTreeEditor.CheckBox3Click(Sender: TObject);
var t : Integer;
begin
  With Tree1 do
  for t:=0 to Selected.Count-1 do
      Selected[t].Transparent:=CheckBox3.Checked;
end;

procedure TNodeTreeEditor.CBStyleChange(Sender: TObject);
var t : Integer;
begin
  With Tree1 do
  for t:=0 to Selected.Count-1 do
  With Selected[t] do
  begin
    Style:=TTreeShapeStyle(CBStyle.ItemIndex);
    Border.Visible:=True;
  end;
end;

procedure TNodeTreeEditor.ComboBox2Change(Sender: TObject);
var t : Integer;
begin
  if not Changing then
  With Tree1 do
  for t:=0 to Selected.Count-1 do
      Selected[t].Gradient.Direction:=TGradientDirection(ComboBox2.ItemIndex);
end;

procedure TNodeTreeEditor.ComboBox4Change(Sender: TObject);
var t : Integer;
begin
  With Tree1.Selected do
  for t:=0 to Count-1 do
  with Items[t] do
  begin
    ImageAlignment:=TTreeImageAlignment(ComboBox4.ItemIndex);
    if ImageAlignment=iaCenter then Transparent:=True;
  end;
end;

procedure TNodeTreeEditor.Shape2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var t        : Integer;
    tmpColor : TColor;
    OldColor : TColor;
begin
  With Tree1 do
  if Selected.Count>0 then
  begin
    OldColor:=Selected[0].Gradient.StartColor;
    tmpColor:=EditColor(Self,OldColor);
    if tmpColor<>OldColor then
    begin
      for t:=0 to Selected.Count-1 do
          Selected[t].Gradient.StartColor:=tmpColor;
      Shape2.Brush.Color:=tmpColor;
    end;
  end;
end;

procedure TNodeTreeEditor.Shape3MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var t        : Integer;
    tmpColor : TColor;
    OldColor : TColor;
begin
  With Tree1 do
  if Selected.Count>0 then
  begin
    OldColor:=Selected[0].Gradient.EndColor;
    tmpColor:=EditColor(Self,OldColor);
    if tmpColor<>OldColor then
    begin
      for t:=0 to Selected.Count-1 do
          Selected[t].Gradient.EndColor:=tmpColor;
      Shape3.Brush.Color:=tmpColor;
    end;
  end;
end;

procedure TNodeTreeEditor.Button3Click(Sender: TObject);
begin
  Close;
end;

Const TeeCursorPrefix='cr';

Function DeleteCursorPrefix(Const S:String):String;
begin
  result:=S;
  if Copy(result,1,2)=TeeCursorPrefix then Delete(result,1,2);
end;

procedure TNodeTreeEditor.FormShow(Sender: TObject);
var tmpSt : String;
begin
  if Ord(High(TGradientDirection))>6 then
     ComboBox2.Items.Add('Radial');


  if Assigned(Tree1) then
  if Tree1.Selected.Count>0 then
  with Tree1.Selected[0] do
  begin
    Shape4.Brush.Color:=Brush.Color;
    Shape5.Brush.Color:=Border.Color;
    if ImageIndex=tiNone then
    begin
      if Assigned(Image) and Assigned(Image.Graphic) then
      begin
        Image1Assign(Image);
        Button5.Caption:=TreeMsg_Clear;
      end
      else
        Button5.Caption:=TreeMsg_Browse;
    end
    else
    begin
      Button5.Caption:=TreeMsg_Clear;
      Image1Assign(GetPicture);
    end;
    BBackColor.LinkProperty(Tree1.Selected[0],'BackColor');
    CheckBox2.Checked:=Gradient.Visible;

    CBStyle.ItemIndex:=Ord(Style);
    CBStyle.Visible:=Style<>tssCustom;
    Label1.Visible:=CBStyle.Visible;

    CheckBox3.Checked:=Transparent;

    Case ShowCross of
      scAuto: ComboBox5.ItemIndex:=0;
      scAlways: ComboBox5.ItemIndex:=1;

⌨️ 快捷键说明

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