📄 teepreviewpanel.pas
字号:
{*********************************************}
{ 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 + -