summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraeme Geldenhuys <graeme@mastermaths.co.za>2012-08-28 13:41:04 +0100
committerGraeme Geldenhuys <graeme@mastermaths.co.za>2012-08-28 13:41:04 +0100
commit9925f47e49acf933feb01b90701176a6c0570b9e (patch)
treeb45d19eb34c15bed7986bf187328e73bae7e2d27
parent2f7889ee38dd7213fb6adbac3c07d2adc0ef8cd3 (diff)
downloadfpGUI-9925f47e49acf933feb01b90701176a6c0570b9e.tar.xz
pdf: This implements the actual scrolling of the preview window.
-rw-r--r--src/reportengine/u_report.pas1
-rw-r--r--src/reportengine/u_visu.pas56
2 files changed, 57 insertions, 0 deletions
diff --git a/src/reportengine/u_report.pas b/src/reportengine/u_report.pas
index 48de55b9..9768d2fa 100644
--- a/src/reportengine/u_report.pas
+++ b/src/reportengine/u_report.pas
@@ -749,6 +749,7 @@ begin
Bv_Visu.SetPosition((F_Visu.Width - FPaper.W - F_Visu.PreviewMargin) div 2,
((F_Visu.Height + 50 + F_Visu.PreviewMargin - FPaper.H) div 2), FPaper.W, FPaper.H);
Bv_Visu.OnPaint := @Bv_VisuPaint;
+ RecalcScrollbars;
end;
end;
diff --git a/src/reportengine/u_visu.pas b/src/reportengine/u_visu.pas
index 3256f31b..57f1ee74 100644
--- a/src/reportengine/u_visu.pas
+++ b/src/reportengine/u_visu.pas
@@ -40,6 +40,7 @@ uses
fpg_edit,
fpg_dialogs,
fpg_utils,
+ fpg_scrollbar,
U_Report;
type
@@ -73,8 +74,11 @@ type
L_FromPageSect: TfpgLabel;
L_NbrPageSect: TfpgLabel;
Bv_PreviewPage: TfpgBevel;
+ VScrollBar: TfpgScrollbar;
FPreviewMargin: integer;
procedure FormShow(Sender: TObject);
+ procedure FormResize(Sender: TObject);
+ procedure VScrollBarScrolled(Sender: TObject; position: integer);
procedure Bt_CloseClick(Sender: TObject);
procedure Bt_PrintClick(Sender: TObject);
procedure Bt_PrinterClick(Sender: TObject);
@@ -93,6 +97,7 @@ type
public
constructor Create(AOwner: TComponent; AImprime: T_Report); reintroduce;
destructor Destroy; override;
+ procedure RecalcScrollbars;
property PreviewMargin: integer read FPreviewMargin write SetPreviewMargin;
end;
@@ -129,6 +134,31 @@ begin
end;
end;
+procedure TF_Visu.FormResize(Sender: TObject);
+begin
+ if Assigned(Bv_Visu) then
+ begin
+ Bv_Visu.Left := (Width - Bv_Visu.Width - VScrollBar.Width) div 2;
+ if Bv_Visu.Left < 0 then
+ Bv_Visu.Left := 0;
+ Bv_Visu.Top := (Height - Bv_Visu.Height - PreviewMargin) div 2;
+ if Bv_Visu.Top < Bv_Command.Height then
+ Bv_Visu.Top := Bv_Command.Height+PreviewMargin;
+ Bv_Visu.UpdateWindowPosition;
+
+ RecalcScrollbars;
+ end;
+end;
+
+procedure TF_Visu.VScrollBarScrolled(Sender: TObject; position: integer);
+begin
+ if Assigned(Bv_Visu) then
+ begin
+ Bv_Visu.Top := Bv_Command.Height + PreviewMargin - position;
+ Bv_Visu.UpdateWindowPosition;
+ end;
+end;
+
procedure TF_Visu.Bt_CloseClick(Sender: TObject);
begin
Close;
@@ -482,7 +512,10 @@ begin
WindowPosition := wpUser;
SetPosition(0, 0, fpgApplication.ScreenWidth - 2, fpgApplication.ScreenHeight - 66);
BackgroundColor := fpgColor(51,51,51); // black/brown or should be use clShadow2 for theming abilities??
+ MinHeight := 350;
+ MinWidth := 640;
OnShow := @FormShow;
+ OnResize := @FormResize;
FPreviewMargin := 10;
@@ -492,6 +525,7 @@ begin
Bv_PreviewPage.BackgroundColor := clWhite;
Bv_Command := CreateBevel(Self, 0, 0, Width, 50, bsBox, bsRaised);
+ Bv_Command.Align := alTop;
Bt_Close := CreateButton(Bv_Command, 10, 10, 26, '', @Bt_CloseClick, 'stdimg.exit');
Bt_Print := CreateButton(Bv_Command, 50, 10, 26, '', @Bt_PrintClick, 'stdimg.print');
Bt_Print.Enabled := False;
@@ -526,6 +560,18 @@ begin
L_NbrPageSect := CreateLabel(Bv_Sections, 440, E_NumSect.Top, '-', 30, E_NumSect.Height, taLeftJustify, tlcenter);
Bv_Visu := Bv_PreviewPage; // assign to global reference variable
+
+ VScrollBar := TfpgScrollbar.Create(self);
+ with VScrollBar do
+ begin
+ Name := 'VScrollBar';
+ SetPosition(self.Width-24, 51, 16, self.Height - (Bv_Command.Height));
+ Orientation := orVertical;
+ Align := alRight;
+ ScrollStep := 50;
+ PageSize := 200;
+ OnScroll := @VScrollBarScrolled;
+ end;
end;
destructor TF_Visu.Destroy;
@@ -534,5 +580,15 @@ begin
inherited Destroy;
end;
+procedure TF_Visu.RecalcScrollbars;
+var
+ h: integer;
+begin
+ h := Bv_Visu.Height + (PreviewMargin*2);
+ VScrollBar.Max := Abs(h - VScrollBar.Height);
+ VScrollBar.SliderSize := VScrollBar.Height / h;
+ VScrollBar.Position := 0;
+end;
+
end.