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

📄 treeqr.pas

📁 第三方控件:PaintGrid.pas 网格型仪表控件源文件 Mymeter.pas 圆型仪表控件源文件 Project1是这两个控件的使用范例。 该
💻 PAS
字号:
{**********************************************}
{  TeeTree --> QuickReports                    }
{  Copyright (c) 1996-2002 by David Berneda    }
{  All Rights Reserved                         }
{**********************************************}
{$I TeeDefs.inc}
unit TreeQR;

interface

uses
  {$IFNDEF LINUX}
  Windows, Messages,
  {$ENDIF}
  SysUtils, Classes,
  {$IFDEF CLX}
  QGraphics, QControls, QForms, QDialogs, QStdCtrls, QMenus, QExtCtrls,
  {$ELSE}
  Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls,
  {$ENDIF}
  TeeProcs, TeeTree, QuickRpt, TeCanvas, TeeDBTre;

type
  TTeeQuickMethod=(qtmBitmap,qtmMetafile);

  TQuickReportTree=class(TCustomDBTree)
  public
    constructor Create(AOwner : TComponent); override;
    Function GetRectangle:TRect; override;
    procedure Invalidate; override;
    procedure Paint; override;
  published
    property AllowPanning;
    property AllowZoom;
    property AnimatedZoom;
    property AnimatedZoomSteps;
    property BackImage;
    property BackImageMode;
    property BufferedDisplay;
    property CrossBox;
    property Designing;
    property Gradient;
    property GridColor;
    property GridStep;
    property PrintProportional;
    property Selected;
    property SnapToGrid;
    property View3DOptions;
    property HorzScrollBar;
    property VertScrollBar;

    property OnAfterDraw;
    property OnBeforeDraw;
    property OnNewConnection;
    property OnNewShape;
    property OnSelectShape;
    property OnUnSelectShape;

    { TCustomDBTree }
    property CodeField;
    property DataSet;
    property Detail;
    property DetailFields;
    property MultiLineText;
    property ParentField;
    property TextFields;

    { TPanel properties }
    property Align;
    property BevelInner;
    property BevelOuter default bvNone;
    property BevelWidth;
    property BorderWidth;
    property BorderStyle default bsSingle;
    property Color default clWhite;
    property DragCursor;
    property DragMode;
    property Enabled;
    property ParentColor;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint default True;
    property TabOrder;
    property TabStop;
    property Visible;

    { TPanel events }
    property OnResize;
  end;

  TQRTree=class;

  TPrintQRTreeEvent = procedure( Sender: TQRTree;
	   			 Var PaperRect,TreeRect:TRect ) of object;

  TQRTree = class(TQRPrintable)
  private
    { Private declarations }
    FOnPrint        : TPrintQRTreeEvent;
    FTeePrintMethod : TTeeQuickMethod;

    Function GetTree:TQuickReportTree;
    Procedure SetPrintMethod(Value:TTeeQuickMethod);
  protected
    { Protected declarations }
    procedure ReadState(Reader: TReader); override;
  public
    { Public declarations }
    Constructor Create(AOwner : TComponent); override;
    procedure Print(OfsX, OfsY : integer); override;
    procedure Paint; override;
  published
    { Published declarations }
    property Tree : TQuickReportTree read GetTree;
    property TeePrintMethod:TTeeQuickMethod read FTeePrintMethod
                                            write SetPrintMethod default qtmMetafile;
    { Published QR events }
    property OnPrint:TPrintQRTreeEvent read FOnPrint write FOnPrint;
  end;

implementation

Uses {$IFNDEF D5}
     DsgnIntf,
     {$ENDIF}
     TeeConst;

Const TeeMsg_DefaultQRTree='QuickReportTree'; { <-- dont translate }

{ TQuickReportTree }
Constructor TQuickReportTree.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  Color:=clWhite;
  BevelOuter:=bvNone;
  BorderStyle:=bsNone;
  BufferedDisplay:=False;
  SetBounds(-1,-1,1,1);
  Hide;
end;

Function TQuickReportTree.GetRectangle:TRect;

  Function InternalGetRectangle(AControl:TControl; Const AZoom:Double):TRect;
  begin
    result:=TeeRect(0,0, Round(AControl.ClientWidth*AZoom),
                         Round(AControl.ClientHeight*AZoom) );
  end;

Var tmpZoomFactor : Double;
begin
  if Assigned(Parent) then
  begin
    if Parent is TQRTree then
    With TQRTree(Parent) do
    begin
      if Assigned(ParentReport) then tmpZoomFactor:=100.0/ParentReport.Zoom
                                else tmpZoomFactor:=1;
      result:=InternalGetRectangle(Self.Parent,tmpZoomFactor);
    end
    else result:=InternalGetRectangle(Parent,1);
  end
  else result:=InternalGetRectangle(Self,1);
end;

procedure TQuickReportTree.Paint;
var Meta   : TMetaFile;
    Bitmap : TBitmap;
begin
  if Assigned(Parent) and (Parent is TQRTree) then
  With TQRTree(Parent) do
  Case FTeePrintMethod of
  qtmMetafile: begin
                 Meta:=TeeCreateMetafile(True,GetRectangle);
                 try
                   Canvas.StretchDraw(GetClientRect,Meta);
                 finally
                   Meta.Free;
                 end;
               end;
  qtmBitmap:   begin
                 Bitmap:=TeeCreateBitmap(clWhite,GetRectangle);
                 try
                   Canvas.StretchDraw(GetClientRect,Bitmap);
                 finally
                   Bitmap.Free;
                 end;
               end;
  end
  else inherited Paint;
end;

procedure TQuickReportTree.Invalidate;
begin
  if Assigned(Parent) then
     if Parent is TQRTree then Parent.Invalidate
                          else inherited Invalidate;
end;

{ TQRTree }
Constructor TQRTree.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FTeePrintMethod:=qtmMetafile;
  Width :=350;
  Height:=200;
  if (csDesigning in ComponentState) and
     (not (csLoading in Owner.ComponentState)) then
  With TQuickReportTree.Create(AOwner) do
  begin
    Parent:=TWinControl(Self);
    Name:=TeeGetUniqueName(AOwner,TeeMsg_DefaultQRTree);
  end;
end;

procedure TQRTree.ReadState(Reader: TReader);
Var tmpTree:TQuickReportTree;
begin
  tmpTree:=Tree;
  if Assigned(tmpTree) and
     (not (csLoading in tmpTree.ComponentState))
     and (not (csAncestor in tmpTree.ComponentState))
        then
          tmpTree.Free;
  inherited ReadState(Reader);
end;

Procedure TQRTree.SetPrintMethod(Value:TTeeQuickMethod);
begin
  if Value<>FTeePrintMethod then
  begin
    FTeePrintMethod:=Value;
    Repaint;
  end;
end;

procedure TQRTree.Print(OfsX, OfsY : Integer);
Var tmpMeta   : TMetafile;
    QuickRect : TRect;
    tmpRect   : TRect;
    tmpTree   : TQuickReportTree;
    tmpBitmap : TBitmap;
begin
  tmpTree:=Tree;
  if Assigned(tmpTree) then
  begin
    With ParentReport.QRPrinter do
    begin
      QuickRect:=TeeRect( Xpos(OfsX+Size.Left),
                          Ypos(OfsY+Size.Top),
                          Xpos(OfsX+Size.Left+Size.Width),
                          Ypos(OfsY+Size.Top+Size.Height));

      tmpRect:=tmpTree.GetRectangle;

      if Assigned( FOnPrint ) then FOnPrint( Self, QuickRect, tmpRect );

      Case FTeePrintMethod of
      qtmMetafile: begin
                     tmpMeta:=tmpTree.TeeCreateMetafile(True, tmpRect);
                     try
                       Canvas.StretchDraw(QuickRect,tmpMeta);
                     finally
                       tmpMeta.Free;
                     end;
                   end;
        qtmBitmap: begin
                     tmpBitmap:=tmpTree.TeeCreateBitmap(clWhite, tmpRect);
                     try
                       Canvas.StretchDraw(QuickRect,tmpBitmap);
                     finally
                       tmpBitmap.Free;
                     end;
                   end;
      end;
    end;
  end;
  inherited Print(OfsX,OfsY);
end;

procedure TQRTree.Paint;
begin
  if Assigned(Tree) then Tree.Paint;
  inherited Paint;
end;

Function TQRTree.GetTree:TQuickReportTree;
begin
  if ControlCount>0 then result:=TQuickReportTree(Controls[0])
                    else result:=nil;
end;

initialization
  RegisterClass( TQuickReportTree );
end.

⌨️ 快捷键说明

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