From 32e02ae41e18302bd6b33dc7aceadbb2872604ee Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 3 Jul 2016 20:30:06 +0000 Subject: [PATCH] tvplanit: Fix white stripe appearing at the right of dayview print preview. Some refactoring and clean-up. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4905 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../tvplanit/examples/demo/demomain.lfm | 8 +-- components/tvplanit/source/vpbase.pas | 12 ---- components/tvplanit/source/vpbaseds.pas | 6 +- .../tvplanit/source/vpdayviewpainter.pas | 2 +- components/tvplanit/source/vpprtfmt.pas | 5 ++ components/tvplanit/source/vpprtprv.pas | 65 ++++++++++++------- components/tvplanit/source/vpprtprvdlg.pas | 4 ++ 7 files changed, 62 insertions(+), 40 deletions(-) diff --git a/components/tvplanit/examples/demo/demomain.lfm b/components/tvplanit/examples/demo/demomain.lfm index 67145af51..aaa675be1 100644 --- a/components/tvplanit/examples/demo/demomain.lfm +++ b/components/tvplanit/examples/demo/demomain.lfm @@ -1985,14 +1985,14 @@ object MainForm: TMainForm object VpPrintPreviewDialog1: TVpPrintPreviewDialog Version = 'v1.04' DataStore = VpBufDSDataStore1 - BottomMargin = 5 + BottomMargin = 0 ControlLink = VpControlLink1 EndDate = 42561.5151169907 - LeftMargin = 5 + LeftMargin = 0 MarginUnits = imPercent - RightMargin = 5 + RightMargin = 0 StartDate = 42554.5151169907 - TopMargin = 5 + TopMargin = 0 Options = [doSizeable] Placement.Position = mpCenter Placement.Top = 10 diff --git a/components/tvplanit/source/vpbase.pas b/components/tvplanit/source/vpbase.pas index 6b4c1253d..8320d96f3 100644 --- a/components/tvplanit/source/vpbase.pas +++ b/components/tvplanit/source/vpbase.pas @@ -231,18 +231,6 @@ type property Category7: TVpCategoryInfo index 7 read GetCategory write SetCat; property Category8: TVpCategoryInfo index 8 read GetCategory write SetCat; property Category9: TVpCategoryInfo index 9 read GetCategory write SetCat; - { - property Category0: TVpCategoryInfo read FCat0 write FCat0; - property Category1: TVpCategoryInfo read FCat1 write FCat1; - property Category2: TVpCategoryInfo read FCat2 write FCat2; - property Category3: TVpCategoryInfo read FCat3 write FCat3; - property Category4: TVpCategoryInfo read FCat4 write FCat4; - property Category5: TVpCategoryInfo read FCat5 write FCat5; - property Category6: TVpCategoryInfo read FCat6 write FCat6; - property Category7: TVpCategoryInfo read FCat7 write FCat7; - property Category8: TVpCategoryInfo read FCat8 write FCat8; - property Category9: TVpCategoryInfo read FCat9 write FCat9; - } end; { TVpFont } diff --git a/components/tvplanit/source/vpbaseds.pas b/components/tvplanit/source/vpbaseds.pas index 30a795ded..0aff12fe9 100644 --- a/components/tvplanit/source/vpbaseds.pas +++ b/components/tvplanit/source/vpbaseds.pas @@ -359,6 +359,7 @@ type FLocalizationFile : string; FDefaultCountry : string; FCityStateZipFormat: String; + FScreenOutput : Boolean; protected{private} DependentList: TList; procedure Attach (Sender : TComponent); @@ -370,7 +371,7 @@ type procedure SetLocalizationFile (const v : string); procedure SetPrinter (const v : TVpPrinter); public - constructor Create (AOwner : TComponent); override; + constructor Create (AOwner: TComponent); override; destructor Destroy; override; function GetDependentList : TList; procedure LoadLocalizationInfo (const FileName : string); @@ -379,6 +380,7 @@ type procedure TriggerOnPageEnd (Sender: TObject; PageNum: Integer; ADate: TDateTime; LastPage: Boolean); procedure TriggerOnPageStart (Sender: TObject; PageNum: Integer; ADate: TDateTime); property Localization : TVpLocalization read FLocalization write FLocalization; + property ScreenOutput: Boolean read FScreenOutput write FScreenOutput; published property CityStateZipFormat: String read FCityStateZipFormat write SetCityStateZipFormat; // Use symbols @CITY, @STATE, @ZIP to define the order of these strings @@ -1199,6 +1201,8 @@ var I: Integer; begin inherited; + FScreenOutput := true; + DependentList := TList.Create; { If the ControlLink is being dropped onto a form for the first time ... } diff --git a/components/tvplanit/source/vpdayviewpainter.pas b/components/tvplanit/source/vpdayviewpainter.pas index f378bbdf2..eee9e1088 100644 --- a/components/tvplanit/source/vpdayviewpainter.pas +++ b/components/tvplanit/source/vpdayviewpainter.pas @@ -1576,7 +1576,7 @@ begin } - if FDayView.VisibleLines < FDayView.LineCount then + if (FDayView.VisibleLines < FDayView.LineCount) and FDayView.ControlLink.ScreenOutput then ScrollbarOffset := 14 else ScrollbarOffset := 0; diff --git a/components/tvplanit/source/vpprtfmt.pas b/components/tvplanit/source/vpprtfmt.pas index 1e0b6d243..400c16c01 100644 --- a/components/tvplanit/source/vpprtfmt.pas +++ b/components/tvplanit/source/vpprtfmt.pas @@ -2427,6 +2427,11 @@ end; procedure TVpPrinter.SetUseFormComponents(const v: Boolean); begin if v <> FUseFormComponents then begin + {$IFDEF LCL} + if not v then + raise Exception.Create('UseFormComponents = false currently not supported by Lazarus.'); + // wp: This restriction can be dropped once CreateWorkControls does not crash any more. + {$ENDIF} FUseFormComponents := v; NotifyLinked; end; diff --git a/components/tvplanit/source/vpprtprv.pas b/components/tvplanit/source/vpprtprv.pas index e98834a33..3eb831483 100644 --- a/components/tvplanit/source/vpprtprv.pas +++ b/components/tvplanit/source/vpprtprv.pas @@ -857,6 +857,12 @@ var ScaleY := FPrinter.PageHeight / (ClientHeight - (Offset1 + Offset2)) else ScaleY := 1; + Result.TopLeft := Point(Offset1, Offset1); + if ScaleX > ScaleY then + Result.BottomRight := Point(ClientWidth - Offset2, round(FPrinter.PageHeight / ScaleX)) + else + Result.BottomRight := Point(Round(FPrinter.PageWidth / ScaleY), ClientHeight - Offset2); + { if ScaleX > ScaleY then Result := Rect( Offset1, @@ -871,6 +877,7 @@ var Round(FPrinter.PageWidth / ScaleY), ClientHeight - Offset2 ); + } end else Result := Rect(3, 3, ClientWidth, ClientHeight); end; @@ -880,6 +887,7 @@ var AspectRect: TRect; WorkHeight: Integer; WorkWidth: Integer; + srcRect, dstRect: TRect; begin if FControlLink.Printer.PrintFormats.Count <= 0 then Exit; @@ -890,32 +898,45 @@ var if FZoomFactor = zfFitToControl then begin AspectRect := GetAspectRectangle; - WorkBmp.Canvas.CopyRect( + srcRect := Rect(0, 0, RenderBmp.Width, RenderBmp.Height); + WorkBmp.Canvas.CopyRect(AspectRect, RenderBmp.Canvas, srcRect); + (* AspectRect, RenderBmp.Canvas, - Rect (0, 0, RenderBmp.Width, RenderBmp.Height) + Rect(0, 0, RenderBmp.Width, RenderBmp.Height) ); + *) RealWidth := AspectRect.Right - AspectRect.Left + 3; RealHeight := AspectRect.Bottom - AspectRect.Top + 3; - end else - begin - WorkWidth := Round(RenderBmp.Width * ZOOM_FACTOR_VALUES[FZoomFactor]); - WorkHeight := Round(RenderBmp.Height * ZOOM_FACTOR_VALUES[FZoomFactor]); - if WorkHeight > ClientHeight - 3 then WorkHeight := ClientHeight - 3; - if WorkWidth > ClientWidth - 3 then WorkWidth := ClientWidth - 3; - WorkBmp.Canvas.CopyRect( - Rect(3, 3, WorkWidth, WorkHeight), - RenderBmp.Canvas, - Rect( - Round(FScrollX / ZOOM_FACTOR_VALUES[FZoomFactor]), - Round(FScrollY / ZOOM_FACTOR_VALUES[FZoomFactor]), - Round((WorkWidth + FScrollX) / ZOOM_FACTOR_VALUES[FZoomFactor]), - Round((WorkHeight + FScrollY) / ZOOM_FACTOR_VALUES[FZoomFactor]) - ) - ); - RealWidth := round(RenderBmp.Width / ZOOM_FACTOR_VALUES[FZoomFactor]); - RealHeight := round(RenderBmp.Height / ZOOM_FACTOR_VALUES[FZoomFactor]); - end; + end else + begin + WorkWidth := Round(RenderBmp.Width * ZOOM_FACTOR_VALUES[FZoomFactor]); + WorkHeight := Round(RenderBmp.Height * ZOOM_FACTOR_VALUES[FZoomFactor]); + if WorkHeight > ClientHeight - 3 then + WorkHeight := ClientHeight - 3; + if WorkWidth > ClientWidth - 3 then + WorkWidth := ClientWidth - 3; + srcRect := Rect( + Round(FScrollX / ZOOM_FACTOR_VALUES[FZoomFactor]), + Round(FScrollY / ZOOM_FACTOR_VALUES[FZoomFactor]), + Round((WorkWidth + FScrollX) / ZOOM_FACTOR_VALUES[FZoomFactor]), + Round((WorkHeight + FScrollY) / ZOOM_FACTOR_VALUES[FZoomFactor]) + ); + dstRect := Rect(3, 3, WorkWidth, WorkHeight); + WorkBmp.Canvas.CopyRect(dstRect, RenderBmp.Canvas, srcRect); + (* + Rect(3, 3, WorkWidth, WorkHeight), + RenderBmp.Canvas, + Rect( + Round(FScrollX / ZOOM_FACTOR_VALUES[FZoomFactor]), + Round(FScrollY / ZOOM_FACTOR_VALUES[FZoomFactor]), + Round((WorkWidth + FScrollX) / ZOOM_FACTOR_VALUES[FZoomFactor]), + Round((WorkHeight + FScrollY) / ZOOM_FACTOR_VALUES[FZoomFactor]) + ) + );*) + RealWidth := round(RenderBmp.Width / ZOOM_FACTOR_VALUES[FZoomFactor]); + RealHeight := round(RenderBmp.Height / ZOOM_FACTOR_VALUES[FZoomFactor]); + end; (* case FZoomFactor of @@ -1044,7 +1065,7 @@ var procedure RenderImage; begin - Canvas.CopyRect (ClientRect, WorkBmp.Canvas, ClientRect); + Canvas.CopyRect(ClientRect, WorkBmp.Canvas, ClientRect); end; begin diff --git a/components/tvplanit/source/vpprtprvdlg.pas b/components/tvplanit/source/vpprtprvdlg.pas index a002211bb..0d080139f 100644 --- a/components/tvplanit/source/vpprtprvdlg.pas +++ b/components/tvplanit/source/vpprtprvdlg.pas @@ -222,10 +222,13 @@ end; function TVpPrintPreviewDialog.Execute: Boolean; var EditForm: TfrmPrintPreview; + scr: Boolean; begin Result := False; + scr := ControlLink.ScreenOutput; Application.CreateForm(TfrmPrintPreview, EditForm); try + ControlLink.ScreenOutput := false; DoFormPlacement(EditForm); EditForm.WindowState := WindowState; EditForm.VpPrintPreview1.ControlLink := ControlLink; @@ -250,6 +253,7 @@ begin end; end; finally + ControlLink.ScreenOutput := scr; EditForm.Release; end; end;