Componentes.Terceros.FastRe.../official/3.23/Source/frxReportTree.pas
2007-09-10 15:54:09 +00:00

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>