RVPP.pas
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:7k
源码类别:

RichEdit

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {       RichView                                        }
  4. {       TRVPrintPreview: print preview for RichView     }
  5. {       (registered on "RichView" page of               }
  6. {       the Component Palette)                          }
  7. {                                                       }
  8. {       Copyright (c) Sergey Tkachenko                  }
  9. {       svt@trichview.com                               }
  10. {       http://www.trichview.com                        }
  11. {                                                       }
  12. {*******************************************************}
  13. unit RVPP;
  14. interface
  15. uses
  16.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  17.   RVScroll, PtblRV, Printers, CRVPP;
  18. {$I RV_Defs.inc}
  19. type
  20.   TRVPrintPreview = class(TCustomRVPrintPreview)
  21.   private
  22.     { Private declarations }
  23.     FRVPrint: TCustomRVPrint;
  24.     FStoredPageNo: Integer;
  25.     FStoredRect: TRect;
  26.     FStoredDocID: Integer;
  27.     FMetafile: TMetafile;
  28.     FCachePageImage: Boolean;
  29.     procedure SetRVPrint(const Value: TCustomRVPrint);
  30.   protected
  31.     { Protected declarations }
  32.     procedure Notification(AComponent: TComponent; Operation: TOperation);override;
  33.     function CanDrawContents: Boolean; override;
  34.     procedure DrawContents(Canvas:TCanvas; const R: TRect); override;
  35.     procedure DrawMargins(Canvas:TCanvas; const R: TRect; PageNo: Integer); override;
  36.     function GetPreview100PercentWidth: Integer; override;
  37.     function GetPreview100PercentHeight: Integer; override;
  38.     function GetPageCount: Integer; override;
  39.     procedure SetPageNo(const Value: Integer); override;
  40.     procedure Loaded; override;
  41.     procedure UpdateImage(PageNo: Integer; R: TRect);
  42.   public
  43.     { Public declarations }
  44.     constructor Create(AOwner: TComponent); override;
  45.     destructor Destroy; override;
  46.   published
  47.     { Published declarations }
  48.     property CachePageImage: Boolean read FCachePageImage write FCachePageImage default False;
  49.     property RVPrint: TCustomRVPrint read FRVPrint write SetRVPrint;
  50.     property ZoomInCursor;
  51.     property ZoomOutCursor;
  52.     property OnZoomChanged;
  53.     property MarginsPen;
  54.     property ClickMode;
  55.     property PageBorderColor;
  56.     property PageBorderWidth;
  57.     property ShadowColor;
  58.     property ShadowWidth;
  59.     property BackgroundMargin;
  60.     { Published standard properties }
  61.     property Align;
  62.     {$IFDEF RICHVIEWDEF4}
  63.     property Anchors;
  64.     property Constraints;
  65.     {$ENDIF}
  66.     property Ctl3D;
  67.     {$IFDEF RICHVIEWDEF4}
  68.     property DragKind;
  69.     {$ENDIF}
  70.     property DragMode;
  71.     property Enabled;
  72.     property HelpContext;
  73.     property ParentCtl3D;
  74.     property PopupMenu;
  75.     property ShowHint;
  76.     property TabOrder;
  77.     property TabStop default True;
  78.     property Visible;
  79.     { Published standard events }
  80.     property OnClick;
  81.     {$IFDEF RICHVIEWDEF5}
  82.     property OnContextPopup;
  83.     {$ENDIF}
  84.     property OnDragDrop;
  85.     property OnDragOver;
  86.     property OnEndDrag;
  87.     property OnEnter;
  88.     property OnExit;
  89.     property OnKeyDown;
  90.     property OnKeyPress;
  91.     property OnKeyUp;
  92.     {$IFDEF RICHVIEWDEF4}
  93.     property OnMouseWheel;
  94.     property OnMouseWheelDown;
  95.     property OnMouseWheelUp;
  96.     {$ENDIF}
  97.     property OnStartDrag;
  98.     { Published RichView properties }
  99.     property BorderStyle;
  100.     property HScrollVisible;    
  101.     {$IFDEF RVFLATSCROLLBARS}
  102.     property ScrollBarColor;
  103.     property ScrollBarStyle;
  104.     {$ENDIF}
  105.     property Tracking;
  106.     property UseXPThemes;
  107.     property VScrollVisible;
  108.     {$IFDEF RICHVIEWDEF4}
  109.     property WheelStep;
  110.     {$ENDIF}
  111.   end;
  112. implementation
  113. {========================== TRVPrintPreview ============================}
  114. constructor TRVPrintPreview.Create(AOwner: TComponent);
  115. begin
  116.   inherited;
  117.   FCachePageImage := False;
  118. end;
  119. {-----------------------------------------------------------------------}
  120. destructor TRVPrintPreview.Destroy;
  121. begin
  122.   FMetafile.Free;
  123.   inherited;
  124. end;
  125. {-----------------------------------------------------------------------}
  126. procedure TRVPrintPreview.Notification(AComponent: TComponent;
  127.   Operation: TOperation);
  128. begin
  129.   inherited Notification(AComponent, Operation);
  130.   if (Operation=opRemove) and (AComponent=RVPrint) then begin
  131.       FRVPrint := nil;
  132.   end;
  133. end;
  134. {-----------------------------------------------------------------------}
  135. procedure TRVPrintPreview.Loaded;
  136. begin
  137.   inherited Loaded;
  138.   UpdatePaletteInfo;
  139. end;
  140. {-----------------------------------------------------------------------}
  141. function TRVPrintPreview.CanDrawContents: Boolean;
  142. begin
  143.   Result := (RVPrint<>nil) and RVPrint.Ready and RVPrint.IsDestinationReady;
  144. end;
  145. {-----------------------------------------------------------------------}
  146. procedure TRVPrintPreview.DrawContents(Canvas:TCanvas; const R: TRect);
  147. begin
  148.   if CachePageImage then begin
  149.     UpdateImage(PageNo, R);
  150.     Canvas.Draw(R.Left,R.Top, FMetafile);
  151.     end
  152.   else
  153.     RVPrint.DrawPreview(PageNo, Canvas, R);
  154. end;
  155. {-----------------------------------------------------------------------}
  156. procedure TRVPrintPreview.DrawMargins(Canvas:TCanvas; const R: TRect; PageNo: Integer);
  157. begin
  158.   inherited DrawMargins(Canvas, R, PageNo);
  159.   RVPrint.DrawMarginsRect(Canvas, R, PageNo);
  160. end;
  161. {-----------------------------------------------------------------------}
  162. function TRVPrintPreview.GetPreview100PercentHeight: Integer;
  163. begin
  164.   Result := FRVPrint.Preview100PercentHeight;
  165. end;
  166. {-----------------------------------------------------------------------}
  167. function TRVPrintPreview.GetPreview100PercentWidth: Integer;
  168. begin
  169.   Result := FRVPrint.Preview100PercentWidth;
  170. end;
  171. {-----------------------------------------------------------------------}
  172. procedure TRVPrintPreview.SetRVPrint(const Value: TCustomRVPrint);
  173. begin
  174.   FRVPrint := Value;
  175.   if FRVPrint<>nil then
  176.     DoInPaletteMode := FRVPrint.rv.DoInPaletteMode;
  177.   UpdateView;
  178. end;
  179. {-----------------------------------------------------------------------}
  180. function TRVPrintPreview.GetPageCount: Integer;
  181. begin
  182.   Result := FRVPrint.PagesCount;
  183. end;
  184. {-----------------------------------------------------------------------}
  185. procedure TRVPrintPreview.SetPageNo(const Value: Integer);
  186. begin
  187.   if FRVPrint<>nil then
  188.     DoInPaletteMode := FRVPrint.rv.DoInPaletteMode;
  189.   inherited;
  190. end;
  191. {-----------------------------------------------------------------------}
  192. procedure TRVPrintPreview.UpdateImage(PageNo: Integer; R: TRect);
  193. var Canvas: TMetafileCanvas;
  194.     DocID: Integer;
  195. begin
  196.   if FRVPrint<>nil then
  197.     DocID := FRVPrint.FormattingID
  198.   else
  199.     DocID := -1;
  200.   OffsetRect(R, -R.Left, -R.Top);
  201.   if (FMetafile<>nil) and (PageNo=FStoredPageNo) and
  202.      (DocID=FStoredDocID) and (FStoredRect.Left=R.Left) and
  203.      (FStoredRect.Right=R.Right) and (FStoredRect.Top=R.Top) and
  204.      (FStoredRect.Bottom=R.Bottom) then
  205.     exit;
  206.   FMetafile.Free;
  207.   if FRVPrint=nil then begin
  208.     FMetafile := nil;
  209.     exit;
  210.   end;
  211.   FMetafile := TMetafile.Create;
  212.   FStoredPageNo := PageNo;
  213.   FStoredRect := R;
  214.   FStoredDocID := DocID;
  215.   FMetafile.Width := R.Right-R.Left;
  216.   FMetafile.Height := R.Bottom-R.Top;
  217.   Canvas := TMetafileCanvas.Create(FMetafile, 0);
  218.   RVPrint.DrawPreview(PageNo, Canvas, R);
  219.   Canvas.Free;
  220. end;
  221. end.