git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.FastReport@9 475b051d-3a53-6940-addd-820bf0cfe0d7
186 lines
4.2 KiB
ObjectPascal
186 lines
4.2 KiB
ObjectPascal
|
|
{******************************************}
|
|
{ }
|
|
{ FastReport v3.0 }
|
|
{ Report Tree }
|
|
{ }
|
|
{ Copyright (c) 1998-2006 }
|
|
{ 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);
|
|
procedure TreeKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
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, frxDesgn;
|
|
|
|
type
|
|
THackControl = class(TWinControl);
|
|
|
|
|
|
{ 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;
|
|
Caption := frxGet(2200);
|
|
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;
|
|
|
|
procedure TfrxReportTreeForm.TreeKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
begin
|
|
if Key = vk_Delete then
|
|
begin
|
|
THackControl(TfrxDesignerForm(FDesigner).Workspace).KeyDown(Key, Shift);
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|
|
|
|
//<censored> |