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

📄 treeed.pas

📁 第三方控件:PaintGrid.pas 网格型仪表控件源文件 Mymeter.pas 圆型仪表控件源文件 Project1是这两个控件的使用范例。 该
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  private
    { Private declarations }
    FHide      : TTreeEditWindows;
    FMaximized : Boolean;
    FPersist   : Boolean;
    FPosition  : TPosition;
    FTitle     : String;
    FOnClose   : TNotifyEvent;
  protected
    { Protected declarations }
  public
    { Public declarations }
    Constructor Create(AOwner:TComponent); override;

    Procedure Execute; virtual;
  published
    { Published declarations }
    property Hide:TTreeEditWindows read FHide write FHide default [teEditors];
    property Maximized:Boolean read FMaximized write FMaximized default False;
    property PersistOptions:Boolean read FPersist write FPersist default False;
    property Position:TPosition read FPosition write FPosition default poDefault;
    property Title:String read FTitle write FTitle;    
    { events }
    property OnClose: TNotifyEvent read FOnClose write FOnClose;
  end;

  TTreeEditorPanel=class(TCustomPanelTreeLink)
  private
    FEditor : TTreeEditor;
    FHide   : TTreeEditWindows;
    Procedure CreateEditor;
    function GetEditor: TTreeEditor;
    Procedure SetHide(Value:TTreeEditWindows);
  protected
    Procedure Loaded; override;
    procedure SetTree(const Value: TCustomTree); override;
  public
    Constructor Create(AOwner:TComponent); override;
    Destructor Destroy; override;

    Procedure PreviewMode;
    property Editor:TTreeEditor read GetEditor;
  published
    property Align;
    property Anchors;
    property BevelInner;
    property BevelOuter;
    property BevelWidth;
    property BorderStyle;
    property BorderWidth;
    property Color;
    property Enabled;
    property TabOrder;
    property TabStop;
    property HideWindows:TTreeEditWindows read FHide write SetHide default [teEditors];
    property Tree;
  end;

{ Shows the Tree EDITOR dialog }
Procedure EditTree(AOwner:TComponent; ATree:TCustomTree);

{ Shows the Tree EDITOR dialog without about box}
Procedure EditTreeNoAbout(AOwner:TComponent; ATree:TCustomTree);

{ Shows the Tree EDITOR dialog and calls AEvent }
Procedure EditTreeEvent(AOwner:TComponent; ATree:TCustomTree;
                        AEvent:TTreeNotifyEvent);

{ Shows the Tree EXPORT dialog }
Procedure ShowTreeExport(AOwner:TComponent; ATree:TCustomTree);

{ Shows the Tree PRINT PREVIEW dialog }
procedure TreePreview(AOwner:TComponent; Tree:TCustomTree; PrintPanel:Boolean=False);

Procedure LoadTreeChildsFromFile( ANode:TTreeNodeShape; Const AName:String);

{ Shows the About-Box dialog... }
Procedure TeeShowTreeAbout(const BuildNumber:String);

{ internal }
Procedure TreeLogoSetPicture(APicture:TPicture);

{ for help support in editor }
Function GetTeeTreeHelpFile:String;
Function GetTeeTreeUserHelpFile:String;

Procedure CreateColorBitmap(Item: TMenuItem; AColor:TColor);

implementation

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

Uses TreeConst, TeePrevi, TreeExport, TeeExport,
     TeeBrushDlg, TeeConst, TeeEdiGrad,
     TreeShEd, TreeCoEd, TreeTeEd, TypInfo,
     {$IFNDEF CLX}
     Registry, Printers,
     {$ELSE}
     QPrinters,
     {$ENDIF}
     {$IFDEF CLR}
     Variants,
     Types,
     {$ENDIF}
     TeeTranslate,
     TeeAbout;

{$IFDEF CLR}
{$R 'treelogo.bmp'}
{$ELSE}
{$R TreeLogo.res}
{$ENDIF}

const TeeTreeRecentKey=TeeTreeKey+'\RecentFiles';

      stPanelName=0;
      stPanelText=1;
      stPanelCoords=2;
      stPanelPage=3;
      stPanelModified=4;
      stPanelCaps=5;
      stPanelNum=6;
      stPanelScr=7;


// Returns Help File path from Windows Registry.
Function GetRegistryHelpPath(Const HelpFile:String):String;
Const WindowsHelp='SOFTWARE\Microsoft\Windows\Help';
begin
  result:='';
  {$IFNDEF CLX}
  With TRegistry.Create do
  try
    RootKey:=HKEY_LOCAL_MACHINE;
    if {$IFDEF D4}OpenKeyReadOnly{$ELSE}OpenKey{$ENDIF}(WindowsHelp{$IFNDEF D4},False{$ENDIF}) then
       result:=ReadString(HelpFile)+'\'+HelpFile;
  finally
    Free;
  end;
  {$ENDIF}
end;

// Sets TeeTree logo image in APicture parameter.
Procedure TreeLogoSetPicture(APicture:TPicture);
begin
  {$IFDEF CLR}
  TeeLoadBitmap(APicture.Bitmap,'TreeLogo','');
  {$ELSE}
  APicture.Bitmap.LoadFromResourceName(HInstance,'TREELOGOBMP');
  {$ENDIF}
end;

// Show TeeTree About... box dialog.
Procedure TeeShowTreeAbout(const BuildNumber:String);
var tmp : TTeeAboutForm;
begin
  tmp:=TTeeAboutForm.Create(nil);
  with tmp do
  try
    LabelVersion.Caption:=TreeMsg_TeeTree+' '+BuildNumber;
    Caption:=Format(TreeMsg_About,[TreeMsg_TeeTree]);
    Image1.Picture:=nil;
    Image2.Transparent:=False;
    Image2.AutoSize:=False;
    Image2.Center:=True;
    TreeLogoSetPicture(Image2.Picture);
    TeeTranslateControl(tmp);
    ShowModal;
  finally
    Free;
  end;
end;

// Show TeeTree Print Preview dialog.
procedure TreePreview(AOwner:TComponent; Tree:TCustomTree; PrintPanel:Boolean=False);
var OldPrintTeePanel : Boolean;
    OldChange        : Boolean;
    OldPage          : Integer; //tom:24/09/2002

begin
  OldPrintTeePanel:=PrintTeePanel;
  PrintTeePanel:=PrintPanel;
  OldChange:=TeeChangePaperOrientation;
  OldPage := Tree.Page.Page;

  TeeChangePaperOrientation:=False;
  try
    with TChartPreview.Create(AOwner) do
    try
      PageNavigatorClass:=TTreePageNavigator;

      TeePreviewPanel1.Panel:=Tree;

      Tree.Page.Refresh; //tom:24/09/2002; Sync PageNavigator with active page

      ShowModal;
    finally
      Free;
      Tree.Page.Page := OldPage; //tom:24/09/2002
      Tree.Invalidate;
    end;
  finally
    TeeChangePaperOrientation:=OldChange;
    PrintTeePanel:=OldPrintTeePanel;
  end;
end;

// Show the TeeTree Export dialog.
Procedure ShowTreeExport(AOwner:TComponent; ATree:TCustomTree);
begin
  With TTreeExportForm.Create(AOwner) do
  try
    NativeFilter:=TeeMsg_TreeFiles;
    NativeExtension:=TreeMsg_TeeExtension;
    ExportPanel:=ATree;
    Caption:=TreeMsg_ExportTree;
    ShowModal;
  finally
    Free;
  end;
end;

// Opens "Aname.ttr" file and loads all nodes into a temporary Tree.
// Then adds all childs to "ANode" and frees the temp Tree.
Procedure LoadTreeChildsFromFile( ANode:TTreeNodeShape; Const AName:String);
var t       : Integer;
    tmpTree : TCustomTree;
begin
  tmpTree:=TTree.Create(nil);
  try
    tmpTree.Parent:=ANode.Tree;
    LoadTreeFromFile(tmpTree,AName);
    if tmpTree.Shapes.Count>0 then
         for t:=0 to tmpTree.Shapes.Count-1 do
             ANode.AddChild(tmpTree.Shapes[t].SimpleText);
  finally
    tmpTree.Free;
  end;
end;

// Internal. Show the Tree editor dialog.
Procedure InternalEditTree(AOwner:TComponent; ATree:TCustomTree; AShowAbout:Boolean;
                           AEvent:TTreeNotifyEvent);
var tmp      : TTreeEditor;
    {$IFDEF CLX}
    tmpAction: TCloseAction;
    {$ENDIF}
begin
  tmp:=TTreeEditor.Create(AOwner);
  try
    tmp.TheTree:=ATree;
    if not AShowAbout then tmp.N3.Free;
    if Assigned(AEvent) then AEvent(tmp);

    TeeTranslateControl(tmp);

    tmp.ShowModal;
    {$IFDEF CLX}
    tmp.FormClose(tmp,tmpAction);  { K bug ? }
    {$ENDIF}
  finally
    tmp.Free;
  end;
end;

// Show the TeeTree editor dialog to edit ATree parameter.
Procedure EditTree(AOwner:TComponent; ATree:TCustomTree);
begin
  InternalEditTree(AOwner,ATree,True,nil);
end;

// Shows the Tree EDITOR dialog without About boxes
Procedure EditTreeNoAbout(AOwner:TComponent; ATree:TCustomTree);
begin
  InternalEditTree(AOwner,ATree,False,nil);
end;

// Shows the Tree EDITOR dialog and calls AEvent
Procedure EditTreeEvent(AOwner:TComponent; ATree:TCustomTree;
                        AEvent:TTreeNotifyEvent);
begin
  InternalEditTree(AOwner,ATree,True,AEvent);
end;

// Shows an Open Picture file dialog and then loads it into
// the Tree "BackImage" to fill then Tree background.
Procedure TTreeEditor.DoLoadTreeImage;
begin
  with PictureDialog do
  try
    if Execute then
    begin
      TheTree.BackImage.LoadFromFile(FileName);
      BBackImage.Caption:=TreeMsg_Clear;
      TeeModified;
    end;
  finally
    Free;
  end;
end;

procedure TTreeEditor.BBackImageClick(Sender: TObject);
begin
  if BBackImage.Caption=TreeMsg_Browse then
  begin
    DoLoadTreeImage;
  end
  else
  with TheTree do
  begin
    if HasBackImage then
    begin
      BackImage:=nil;
      Invalidate;
      TeeModified;
    end;
    BBackImage.Caption:=TreeMsg_Browse;
  end;
  CBImageStyle.Enabled:=TheTree.HasBackImage;
end;

type
  TTreeSpeedButton=class(TSpeedButton)
  protected
    procedure Paint; override;
  end;

  TMyCustomTreeShape=class(TTreeNodeShape);

procedure TTreeSpeedButton.Paint;
var tmpC : TTeeCanvas3D;
    tmp  : TTreeNodeShape;
    tmpR : TRect;
    tmpP : PTreeTagShape;
begin
  inherited Paint;

  tmpP:=PTreeTagShape(Tag);

  with tmpP{$IFNDEF CLR}^{$ENDIF} do
  begin
    if AInstance=nil then
    begin
      AInstance:=AClass.Create(nil);

      with AInstance.Shadow do
      begin
        HorizSize:=2;
        VertSize:=2;
        Color:=clDkGray;
      end;

      { special trick for TPolygonShape }
      if AInstance is TPolygonShape then
         TPolygonShape(AInstance).FillSample;

      { set shape style }
      if UseStyle then
         AInstance.Style:=Style;
    end;

    tmp:=AInstance;
  end;

  tmpC:=TTeeCanvas3D.Create;
  try
    tmpC.UseBuffer:=False;
    tmpC.InitWindow(Canvas,nil,Color,False,TeeRect(0,0,Width,Height));

    tmpR:=TeeRect(4,4,Self.Width-5,Self.Height-5);
    if tmp is TTextShape then
    begin
      tmpC.Font.Style:=[fsBold];
      tmpC.Font.Size:=16;
      tmpC.TextOut(5,1,'A');
    end
    else
       TMyCustomTreeShape(tmp).DrawShapeCanvas(tmpC,tmpR);
  finally
    tmpC.Free;
  end;
end;

Procedure TTreeEditor.InternalAddCustomShape( Const AGroup:String;
                                              Const AName:String;
                                              AClass:TTreeNodeShapeClass);
var tmp  : Integer;
    t    : Integer;
    tmpP : TTabSheet;
begin
  tmp:=-1;
  with PageShapes do
  for t:=0 to PageCount-1 do
    if Uppercase(Pages[t].Caption)=Uppercase(AGroup) then
    begin
      tmp:=t;
      break;
    end;

  if tmp=-1 then
  begin
    tmpP:=TTabSheet.Create(Self);
    tmpP.Caption:=AGroup;
    tmpP.PageControl:=PageShapes;
    tmp:=PageShapes.PageCount-1;
  end;
  InternalAddShape(tmp,AName,AClass,False,tssRectangle);
end;

Procedure TTreeEditor.RegisterTreeShape(AGroup:Integer;
                                        Const AName:String;
                                        AStyle:TTreeShapeStyle);
begin
  InternalAddShape(AGroup,AName,nil,True,AStyle);
end;

Procedure TTreeEditor.InternalAddShape( AGroup:Integer;
                                        Const AName:String;
                                        AClass:TTreeNodeShapeClass;
                                        UseStyle:Boolean;
                                        AStyle:TTreeShapeStyle);
var ATab          : TTabSheet;
    tmp           : TSpeedButton;
    Num           : Integer;
    TagShapeStyle : PTreeTagShape;
begin
  ATab:=PageShapes.Pages[AGroup];
  Num:=ATab.ControlCount;
  if ATab=PageShapes.ActivePage then Dec(Num,2);

  tmp:=TTreeSpeedButton.Create(Self);
  with tmp do

⌨️ 快捷键说明

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