📄 jvqgridpreviewform.pas
字号:
{******************************************************************************}
{* WARNING: JEDI VCL To CLX Converter generated unit. *}
{* Manual modifications will be lost on next release. *}
{******************************************************************************}
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvGridPreview.PAS, released on 2002-06-15.
The Initial Developer of the Original Code is Jan Verhoeven [jan1 dott verhoeven att wxs dott nl]
Portions created by Jan Verhoeven are Copyright (C) 2002 Jan Verhoeven.
All Rights Reserved.
Contributor(s): Robert Love [rlove att slcdug dott org].
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
Known Issues:
-----------------------------------------------------------------------------}
// $Id: JvQGridPreviewForm.pas,v 1.13 2004/09/10 22:05:57 asnepvangers Exp $
unit JvQGridPreviewForm;
{$I jvcl.inc}
interface
uses
SysUtils, Classes,
QWindows, QMessages, QGraphics, QControls, QForms, QDialogs,
QExtCtrls, QGrids, QStdCtrls, QComCtrls, QButtons, QPrinters, QExtDlgs,
QComCtrlsEx,
JvQGridPrinter, JvQComponent;
type
TJvGridPreviewForm = class(TJvForm)
ScrollBox1: TScrollBox;
PreviewImage: TImage;
Panel1: TPanel;
Header: TEdit;
Headers: TListBox;
Margin: TUpDown;
ckborders: TCheckBox;
Margins: TListBox;
btnprint: TSpeedButton;
PreviewPage: TUpDown;
btnshow: TSpeedButton;
lblpages: TLabel;
cklive: TCheckBox;
btnsetup: TSpeedButton;
btnfull: TSpeedButton;
btnpic: TSpeedButton;
OpenPictureDialog1: TOpenPictureDialog;
PrinterSetupDialog1: TPrinterSetupDialog;
Edit1: TEdit;
Edit2: TEdit;
procedure btnshowClick(Sender: TObject);
procedure MarginsClick(Sender: TObject);
procedure btnprintClick(Sender: TObject);
procedure HeaderChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ckbordersClick(Sender: TObject);
procedure HeadersClick(Sender: TObject);
procedure ckliveClick(Sender: TObject);
procedure btnsetupClick(Sender: TObject);
procedure btnfullClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure PreviewImageClick(Sender: TObject);
procedure btnpicClick(Sender: TObject);
procedure MarginClick(Sender: TObject; Button: TUDBtnType);
procedure PreviewPageClick(Sender: TObject; Button: TUDBtnType);
private
FGridPrinter: TJvGridPrinter;
FPrintImage: TBitmap;
FGrid: TStringGrid;
FPageCount: Cardinal;
procedure SetGridPrinter(const Value: TJvGridPrinter);
procedure FullSize;
procedure Zoom(Factor: Extended);
procedure SetGrid(const Value: TStringGrid);
procedure UpdateRowHeights;
function PageCount: Integer;
procedure UpdatePreview(ACanvas: TCanvas);
public
procedure DrawToCanvas(ACanvas: TCanvas; Mode: TJvPrintMode;
FromRow, ToRow: Integer);
procedure Print;
published
property GridPrinter: TJvGridPrinter read FGridPrinter write SetGridPrinter;
property Grid: TStringGrid read FGrid write SetGrid;
end;
implementation
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
JvQPaintFX, JvQConsts, JvQResources;
{$R *.xfm}
var
RowHeights: array of Integer;
procedure TJvGridPreviewForm.SetGridPrinter(const Value: TJvGridPrinter);
begin
FGridPrinter := Value;
end;
procedure TJvGridPreviewForm.btnshowClick(Sender: TObject);
begin
if Assigned(FGridPrinter) then
begin
UpdatePreview(FPrintImage.Canvas);
PreviewImage.Picture.Bitmap.Assign(FPrintImage);
end;
end;
procedure TJvGridPreviewForm.MarginsClick(Sender: TObject);
begin
case Margins.ItemIndex of
-1:
Exit;
0:
Margin.Position := GridPrinter.PrintOptions.MarginTop;
1:
Margin.Position := GridPrinter.PrintOptions.PageTitleMargin;
2:
Margin.Position := GridPrinter.PrintOptions.MarginLeft;
3:
Margin.Position := GridPrinter.PrintOptions.MarginRight;
4:
Margin.Position := GridPrinter.PrintOptions.MarginBottom;
5:
Margin.Position := GridPrinter.PrintOptions.LeftPadding;
6:
Margin.Position := GridPrinter.PrintOptions.HeaderSize;
7:
Margin.Position := GridPrinter.PrintOptions.FooterSize;
else
Exit;
end;
if Margins.ItemIndex > 5 then
begin
Margin.Min := 6;
Margin.Max := 72;
end
else
begin
Margin.Min := 0;
Margin.Max := 400;
end;
end;
procedure TJvGridPreviewForm.btnprintClick(Sender: TObject);
begin
Print;
end;
procedure TJvGridPreviewForm.HeaderChange(Sender: TObject);
begin
case Headers.ItemIndex of
-1:
Exit;
0:
GridPrinter.PrintOptions.PageTitle := Header.Text;
1:
GridPrinter.PrintOptions.PageFooter := Header.Text;
2:
GridPrinter.PrintOptions.DateFormat := Header.Text;
3:
GridPrinter.PrintOptions.TimeFormat := Header.Text;
4:
GridPrinter.PrintOptions.Logo := Header.Text;
end;
if cklive.Checked then
btnshow.Click;
end;
procedure TJvGridPreviewForm.FormShow(Sender: TObject);
begin
UpdateRowHeights;
FPageCount := 0;
DrawToCanvas(FPrintImage.Canvas, pmPreview, 1, Grid.RowCount - 1);
PreviewImage.Picture.Bitmap.Assign(FPrintImage);
Header.Text := GridPrinter.PrintOptions.PageTitle;
Margin.Position := GridPrinter.PrintOptions.MarginTop;
Margins.ItemIndex := 0;
PreviewPage.Max := PageCount;
lblpages.Caption := Format(RsOfd, [PreviewPage.Max]);
GridPrinter.PrintOptions.PreviewPage := 1;
PreviewPage.Position := 1;
ckborders.Checked := (GridPrinter.PrintOptions.BorderStyle = bsSingle);
Header.Text := GridPrinter.PrintOptions.PageTitle;
Headers.ItemIndex := 0;
btnshow.Click;
end;
procedure TJvGridPreviewForm.ckbordersClick(Sender: TObject);
begin
if ckborders.Checked then
GridPrinter.PrintOptions.BorderStyle := bsSingle
else
GridPrinter.PrintOptions.BorderStyle := bsNone;
if cklive.Checked then
btnshow.Click;
end;
procedure TJvGridPreviewForm.HeadersClick(Sender: TObject);
begin
case Headers.ItemIndex of
0:
Header.Text := GridPrinter.PrintOptions.PageTitle;
1:
Header.Text := GridPrinter.PrintOptions.PageFooter;
2:
Header.Text := GridPrinter.PrintOptions.DateFormat;
3:
Header.Text := GridPrinter.PrintOptions.TimeFormat;
4:
Header.Text := GridPrinter.PrintOptions.Logo;
end;
end;
procedure TJvGridPreviewForm.ckliveClick(Sender: TObject);
begin
if cklive.Checked then
btnshow.Click;
end;
procedure TJvGridPreviewForm.btnsetupClick(Sender: TObject);
begin
if PrinterSetupDialog1.Execute then
begin
GridPrinter.PrintOptions.Orientation := Printer.Orientation;
if cklive.Checked then
btnshow.Click;
end;
end;
procedure TJvGridPreviewForm.FullSize;
var
Bmp: TBitmap;
W, H: Integer;
begin
W := FPrintImage.Width;
H := FPrintImage.Height;
Bmp := TBitmap.Create;
Bmp.Width := ScrollBox1.ClientWidth;
Bmp.Height := Round(H / W * Bmp.Width);
FPrintImage.PixelFormat := pf24bit;
Bmp.PixelFormat := pf24bit;
TJvPaintFX.SmoothResize(FPrintImage, Bmp);
PreviewImage.Picture.Bitmap.Assign(Bmp);
Bmp.Free;
end;
procedure TJvGridPreviewForm.btnfullClick(Sender: TObject);
begin
FullSize;
end;
procedure TJvGridPreviewForm.FormCreate(Sender: TObject);
begin
FPrintImage := TBitmap.Create;
end;
procedure TJvGridPreviewForm.FormDestroy(Sender: TObject);
begin
FPrintImage.Free;
end;
procedure TJvGridPreviewForm.PreviewImageClick(Sender: TObject);
var
W, W1: Integer;
begin
W1 := PreviewImage.Picture.Bitmap.Width;
W := FPrintImage.Width;
if Round(W * 0.8) < W1 then
PreviewImage.Picture.Bitmap.Assign(FPrintImage)
else
Zoom(W1 / W / 0.8);
end;
procedure TJvGridPreviewForm.Zoom(Factor: Extended);
var
Bmp: TBitmap;
W, H: Integer;
begin
W := FPrintImage.Width;
H := FPrintImage.Height;
Bmp := TBitmap.Create;
Bmp.Width := Round(Factor * W);
Bmp.Height := Round(H / W * Bmp.Width);
FPrintImage.PixelFormat := pf24bit;
Bmp.PixelFormat := pf24bit;
TJvPaintFX.SmoothResize(FPrintImage, Bmp);
PreviewImage.Picture.Bitmap.Assign(Bmp);
Bmp.Free;
end;
procedure TJvGridPreviewForm.btnpicClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
if Headers.ItemIndex = 4 then
begin
Header.Text := OpenPictureDialog1.FileName;
GridPrinter.PrintOptions.Logo := OpenPictureDialog1.FileName;
end;
end;
procedure TJvGridPreviewForm.DrawToCanvas(ACanvas: TCanvas; Mode: TJvPrintMode; FromRow, ToRow: Integer);
var
PageWidth, PageHeight, PageRow, PageCol, I, IRow, FromCol, ToCol, X, Y: Integer;
DoPaint, HasLogo: Boolean;
HHeader, HFooter: Integer;
LogoPic, LogoPics: TBitmap;
function ScaleX(I: Integer): Integer;
begin
if Mode = pmPreview then
Result := I
else
Result := Round(I * (GetDeviceCaps(Printer.Handle, LOGPIXELSX) / Screen.PixelsPerInch));
end;
function ScaleY(I: Integer): Integer;
begin
if Mode = pmPreview then
Result := I
else
Result := Round(I * (GetDeviceCaps(Printer.Handle, LOGPIXELSY) / Screen.PixelsPerInch));
end;
procedure DrawCells(IRow: Integer);
var
ICol, I: Integer;
R: TRect;
drs: string;
nr: Boolean;
v: Extended;
begin
//Alignment must be done another day
for ICol := FromCol to ToCol do
begin
//X Offset
X := ScaleX(GridPrinter.PrintOptions.MarginLeft);
for I := FromCol to ICol - 1 do
Inc(X, ScaleX(Grid.ColWidths[I] + 1));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -