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

📄 teepreviewpanel.pas

📁 Delphi TeeChartPro.6.01的源代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{*********************************************}
{   TeePreviewPanel Component                 }
{   TChartPageNavigator Components            }
{   Copyright (c) 1999-2003 by David Berneda  }
{*********************************************}
unit TeePreviewPanel;
{$I TeeDefs.inc}

interface

Uses {$IFNDEF LINUX}
     Windows,
     {$ENDIF}
     Classes,
     {$IFDEF CLX}
     QGraphics, QControls, QExtCtrls, QPrinters, QDialogs, QForms,
     {$ELSE}
     Printers, Graphics, Controls, ExtCtrls, Forms,
     {$ENDIF}
     {$IFDEF D6}
     Types,
     {$ENDIF}
     TeeProcs, TeCanvas;

type
  {$IFDEF CLX}
  TPrinterSetupDialog=class(TCustomDialog)
  protected
    function CreateForm: TDialogForm; override;
    function DoExecute:Boolean; override;
  end;

  TPrintDialog=class(TCustomDialog)
  public
    Copies,
    FromPage,
    MinPage,
    ToPage,
    MaxPage  : Integer;
  protected
    function CreateForm: TDialogForm; override;
    function DoExecute:Boolean; override;
  end;
  {$ENDIF}

  TTeePreviewPanelOrientation=(ppoDefault,ppoPortrait,ppoLandscape);

  TOnChangeMarginsEvent=Procedure( Sender:TObject; DisableProportional:Boolean;
                                   Const NewMargins:TRect) of object;

  TPreviewChartPen=class(TChartPen)
  published
    property Style default psDot;
    property SmallDots default True;
  end;

  TeePreviewZones=( teePrev_None,
                    teePrev_Left,
                    teePrev_Top,
                    teePrev_Right,
                    teePrev_Bottom,
                    teePrev_Image,
                    teePrev_LeftTop,
                    teePrev_RightTop,
                    teePrev_LeftBottom,
                    teePrev_RightBottom );

  TTeePanelsList=class(TList)
  private
    Function Get(Index:Integer):TCustomTeePanel;
    Procedure Put(Index:Integer; Value:TCustomTeePanel);
  public
    property Items[Index:Integer]:TCustomTeePanel read Get write Put; default;
  end;

  TTeePreviewPanel=class(TCustomTeePanelExtended)
  private
    FAllowResize     : Boolean;
    FAllowMove       : Boolean;
    FAsBitmap        : Boolean;
    FPanels          : TTeePanelsList;
    FDragImage       : Boolean;
    FMargins         : TPreviewChartPen;
    FOrientation     : TTeePreviewPanelOrientation;
    FOnChangeMargins : TOnChangeMarginsEvent;
    FPaperColor      : TColor;
    FPaperShadow     : TTeeShadow;
    FShowImage       : Boolean;
    FTitle           : String;

    { internal }
    IDragged         : TeePreviewZones;
    OldX             : Integer;
    OldY             : Integer;
    OldRect          : TRect;
    IOldShowImage    : Boolean;
    Procedure CheckPrinterOrientation;
    Function GetPanel:TCustomTeePanel;
    Function GetShadowColor:TColor;  // obsolete
    Function GetShadowSize:Integer;  // obsolete
    Procedure SendAsBitmap(APanel:TCustomTeePanel; ACanvas:TCanvas; Const R:TRect);
    Procedure SetAsBitmap(Value:Boolean);
    Procedure SetMargins(Value:TPreviewChartPen);
    Procedure SetOrientation(Value:TTeePreviewPanelOrientation);
    Procedure SetPanel(Value:TCustomTeePanel);
    Procedure SetPaperColor(Value:TColor);
    Procedure SetPaperShadow(Value:TTeeShadow);
    Procedure SetShadowColor(Value:TColor);  // obsolete
    Procedure SetShadowSize(Value:Integer);  // obsolete
    Procedure SetShowImage(Value:Boolean);
  protected
    Function CalcImagePrintMargins(APanel:TCustomTeePanel):TRect;
    Procedure DrawPaper;
    Procedure DrawPanelImage(APanel:TCustomTeePanel);
    Procedure DrawMargins(Const R:TRect);
    Procedure InternalDraw(Const UserRectangle:TRect); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure Notification( AComponent: TComponent;
                            Operation: TOperation); override;
    Function WhereIsCursor(x,y:Integer):TeePreviewZones;
  public
    ImageRect : TRect;
    PaperRect : TRect;
    Constructor Create(AOwner:TComponent); override;
    Destructor Destroy; override;
    Procedure Print;
    property Panels:TTeePanelsList read FPanels;

    // compatibility with v5 (obsolete)
    property ShadowColor:TColor read GetShadowColor write SetShadowColor;
    property ShadowSize:Integer read GetShadowSize write SetShadowSize;
  published
    property AllowResize:Boolean read FAllowResize write FAllowResize default True;
    property AllowMove:Boolean read FAllowMove write FAllowMove default True;
    property AsBitmap:Boolean read FAsBitmap write SetAsBitmap default False;
    property DragImage:Boolean read FDragImage write FDragImage default False;
    property Margins:TPreviewChartPen read FMargins write SetMargins;
    property Orientation:TTeePreviewPanelOrientation read FOrientation
                     write SetOrientation default ppoDefault;
    property Panel:TCustomTeePanel read GetPanel write SetPanel;
    property PaperColor:TColor read FPaperColor write SetPaperColor default clWhite;

    property PaperShadow:TTeeShadow read FPaperShadow write SetPaperShadow; // 6.0
    property Shadow; // 6.0

    property ShowImage:Boolean read FShowImage write SetShowImage default True;
    property Title:String read FTitle write FTitle;
    property OnChangeMargins:TOnChangeMarginsEvent read FOnChangeMargins
                                                   write FOnChangeMargins;

    { TeePanelExtended }
    property BackImage;
    property BackImageMode;
    property Border;
    property BorderRound;
    property Gradient;

    { TPanel properties }
    property Align;
    property BevelInner;
    property BevelOuter;
    property BevelWidth;
    property BorderWidth;
    property Color;
    property DragMode;
    {$IFNDEF CLX}
    property DragCursor;
    {$ENDIF}
    property Enabled;
    property ParentColor;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Visible;
    property Anchors;
    {$IFNDEF CLX}
    property AutoSize;
    {$ENDIF}
    property Constraints;
    {$IFNDEF CLX}
    property DragKind;
    property Locked;
    {$ENDIF}

    property OnAfterDraw;

    { TPanel events }
    property OnClick;
    {$IFNDEF CLX}
    {$IFDEF D5}
    property OnContextPopup;
    {$ENDIF}
    {$ENDIF}
    property OnDblClick;
    {$IFNDEF CLX}
    property OnDragDrop;
    property OnDragOver;
    property OnEndDrag;
    property OnStartDrag;
    {$ENDIF}
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnResize;
    property OnMouseWheel;
    property OnMouseWheelDown;
    property OnMouseWheelUp;
    {$IFNDEF CLX}
    property OnCanResize;
    {$ENDIF}
    property OnConstrainedResize;
    {$IFNDEF CLX}
    property OnDockDrop;
    property OnDockOver;
    property OnEndDock;
    property OnGetSiteInfo;
    property OnStartDock;
    property OnUnDock;
    {$ENDIF}
  end;

implementation

Uses Math, SysUtils;

Const TeePreviewCursors:Array[0..9] of TCursor=
           ( crDefault, { none }
             crHSplit,
             crVSplit,
             crHSplit,
             crVSplit,
             crTeeHand,
             crSizeNWSE,
             crSizeNESW,
             crSizeNESW,
             crSizeNWSE );

type TShadowAccess=class(TTeeShadow);

{ TeePreviewPanel }
Constructor TTeePreviewPanel.Create(AOwner:TComponent);
Begin
  inherited;
  FPanels:=TTeePanelsList.Create;
  FDragImage:=False;
  FOrientation:=ppoDefault;
  FMargins:=TPreviewChartPen.Create(CanvasChanged);
  FMargins.SmallDots:=True;
  FMargins.Style:=psDot;

  FShowImage:=True;
  IOldShowImage:=True;
  IDragged:=teePrev_None;
  FAsBitmap:=False;
  FPaperColor:=clWhite;
  FAllowResize:=True;
  FAllowMove:=True;
  FTitle:='';

  FPaperShadow:=TTeeShadow.Create(CanvasChanged);
  with TShadowAccess(FPaperShadow) do
  begin
    Color:=clDkGray;
    Size:=4;
    DefaultColor:=Color;
    DefaultSize:=4;
  end;

  Width :=432;
  Height:=312;
end;

Destructor TTeePreviewPanel.Destroy;
begin
  Margins.Free;
  FPaperShadow.Free;
  FPanels.Free;
  inherited;
end;

Procedure TTeePreviewPanel.SendAsBitmap(APanel:TCustomTeePanel; ACanvas:TCanvas; Const R:TRect);

  Function GetPrintingBitmap(APanel:TCustomTeePanel):TBitmap;
  var tmpR      : TRect;
      WinWidth  : Integer;
      WinHeight : Integer;
      tmpW      : Integer;
      tmpH      : Integer;
      tmpWidth  : Integer;
      tmpHeight : Integer;
  begin
    APanel.Printing:=True;
    With APanel.GetRectangle do
    begin
      tmpWidth:=Right-Left;
      tmpHeight:=Bottom-Top;
    end;
    tmpR:=CalcImagePrintMargins(APanel);
    APanel.CalcMetaBounds(tmpR,TeeRect(0,0,tmpWidth,tmpHeight),WinWidth,WinHeight,tmpW,tmpH);
    result:=APanel.TeeCreateBitmap(FPaperColor,TeeRect(0,0,WinWidth,WinHeight));
    APanel.Printing:=False;
  end;

var tmpBitmap : TBitmap;
begin
  tmpBitmap:=GetPrintingBitmap(APanel);
  try
    ACanvas.StretchDraw(R,tmpBitmap);
  finally
    tmpBitmap.Free;
  end;
end;

Procedure TTeePreviewPanel.Print;
var t : Integer;
Begin
  if FPanels.Count>0 then
  Begin
    Screen.Cursor:=crHourGlass;
    try
      CheckPrinterOrientation;

      if FTitle='' then
      begin
        if Panel.Name<>'' then
           Printer.Title:=Panel.Name;
      end
      else Printer.Title:=FTitle;

      Printer.BeginDoc;
      try
        for t:=0 to Panels.Count-1 do
            if FAsBitmap then SendAsBitmap(Panels[t],Printer.Canvas,Panels[t].ChartPrintRect)
                         else Panels[t].PrintPartial(Panels[t].ChartPrintRect);

        if Assigned(FOnAfterDraw) then FOnAfterDraw(Self);
        Printer.EndDoc;
      except
        on Exception do
        begin
          Printer.Abort;
          if Printer.Printing then Printer.EndDoc;
          Raise;
        end;
      end;
    finally
      Screen.Cursor:=crDefault;
    end;
  end;
end;

Procedure TTeePreviewPanel.DrawPaper;
Begin
  With Canvas do
  Begin
    Pen.Style:=psSolid;
    Pen.Color:=clBlack;
    Pen.Width:=1;
    Brush.Color:=FPaperColor;
    Rectangle(PaperRect);
  end;
  PaperShadow.Draw(Canvas,PaperRect);
end;

Procedure TTeePreviewPanel.SetAsBitmap(Value:Boolean);
begin
  SetBooleanProperty(FAsBitmap,Value);
end;

Procedure TTeePreviewPanel.SetPaperColor(Value:TColor);
begin
  SetColorProperty(FPaperColor,Value);
end;

Procedure TTeePreviewPanel.SetShadowSize(Value:Integer);
begin
  PaperShadow.Size:=Value;
end;

Procedure TTeePreviewPanel.SetShowImage(Value:Boolean);
begin
  SetBooleanProperty(FShowImage,Value);
end;

Procedure TTeePreviewPanel.SetMargins(Value:TPreviewChartPen);
Begin
  FMargins.Assign(Value);
End;

Procedure TTeePreviewPanel.SetPanel(Value:TCustomTeePanel);
Begin

⌨️ 快捷键说明

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