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

📄 frxreporttree.pas

📁 报表源码 FastReport 3 is new generation of the report generators components. It consists of report engin
💻 PAS
字号:
{******************************************}
{ }
{ FastReport v3.0 }
{ Report Tree }
{ }
{ Copyright (c) 1998-2005 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}

unit frxReportTree;

interface

{$I frx.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, frxClass
{$IFDEF Delphi6}
, Variants
{$ENDIF};

type
  TfrxReportTreeForm = class(TForm)
    Tree:TTreeView;
    procedure FormShow(Sender:TObject);
    procedure TreeChange(Sender:TObject; Node:TTreeNode);
    procedure FormCreate(Sender:TObject);
  private
    FComponents:TList;
    FDesigner:TfrxCustomDesigner;
    FNodes:TList;
    FReport:TfrxReport;
    FUpdating:Boolean;
    FOnSelectionChanged:TNotifyEvent;
  public
    constructor Create(AOwner:TComponent); override;
    destructor Destroy; override;
    procedure SetColor(Value:TColor);
    procedure UpdateItems;
    procedure UpdateSelection;
    property OnSelectionChanged:TNotifyEvent read FOnSelectionChanged
      write FOnSelectionChanged;
  end;

implementation

{$R *.DFM}

uses frxRes;

{ TfrxReportTreeForm }

constructor TfrxReportTreeForm.Create(AOwner:TComponent);
begin
  inherited;
  FComponents:= TList.Create;
  FNodes:= TList.Create;
end;

destructor TfrxReportTreeForm.Destroy;
begin
  FComponents.Free;
  FNodes.Free;
  inherited;
end;

procedure TfrxReportTreeForm.FormShow(Sender:TObject);
begin
  UpdateItems;
end;

procedure TfrxReportTreeForm.UpdateItems;

  procedure SetImageIndex(Node:TTreeNode; Index:Integer);
  begin
    Node.ImageIndex:= Index;
    Node.StateIndex:= Index;
    Node.SelectedIndex:= Index;
  end;

  procedure EnumItems(c:TfrxComponent; RootNode:TTreeNode);
  var
    i:Integer;
    Node:TTreeNode;
  begin
    Node:= Tree.Items.AddChild(RootNode, c.Name);
    FComponents.Add(c);
    FNodes.Add(Node);
    Node.Data:= c;
    if c is TfrxReport then
    begin
      Node.Text:= 'Report';
      SetImageIndex(Node, 76);
    end
    else if c is TfrxReportPage then
      SetImageIndex(Node, 77)
    else if c is TfrxDialogPage then
      SetImageIndex(Node, 78)
    else if c is TfrxBand then
      SetImageIndex(Node, 79)
    else
      SetImageIndex(Node, 75);

    for i:= 0 to c.Objects.Count-1 do
      EnumItems(c.Objects[i], Node);
  end;

begin
  Tree.Items.BeginUpdate;
  Tree.Items.Clear;
  FComponents.Clear;
  FNodes.Clear;
  EnumItems(FReport, nil);

  Tree.FullExpand;
  UpdateSelection;
  Tree.Items.EndUpdate;
end;

procedure TfrxReportTreeForm.TreeChange(Sender:TObject; Node:TTreeNode);
begin
  if FUpdating then Exit;
  FDesigner.SelectedObjects.Clear;
  FDesigner.SelectedObjects.Add(Tree.Selected.Data);
  if Assigned(FOnSelectionChanged) then
    FOnSelectionChanged(Self);
end;

procedure TfrxReportTreeForm.SetColor(Value:TColor);
begin
  Tree.Color:= Value;
  UpdateItems;
end;

procedure TfrxReportTreeForm.FormCreate(Sender:TObject);
begin
  FDesigner:= TfrxCustomDesigner(Owner);
  FReport:= FDesigner.Report;
  Tree.Images:= frxResources.MainButtonImages;
  frxResources.LocalizeForm(Self);
end;

procedure TfrxReportTreeForm.UpdateSelection;
var
  c:TComponent;
  i:Integer;
begin
  if FDesigner.SelectedObjects.Count = 0 then Exit;
  c:= FDesigner.SelectedObjects[0];
  FUpdating:= True;

  i:= FComponents.IndexOf(c);
  if i<>-1 then
  begin
    TTreeNode(FNodes[i]).Selected:= True;
    Tree.TopItem:= TTreeNode(FNodes[i]);
  end;

  FUpdating:= False;
end;

end.

⌨️ 快捷键说明

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