309 lines
8.0 KiB
ObjectPascal
309 lines
8.0 KiB
ObjectPascal
|
|
unit uEditorPreview;
|
||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses
|
||
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||
|
|
Dialogs, uEditorBase, ImgList, PngImageList, StdActns, ActnList, TBX,
|
||
|
|
TB2Item, TB2Dock, TB2Toolbar, JvExControls, JvComponent, JvNavigationPane,
|
||
|
|
TB2ExtItems, TBXExtItems, uViewPreview, frxClass, ComCtrls, frxPreview,
|
||
|
|
JvFormAutoSize, JvAppStorage, JvAppRegistryStorage, JvFormPlacement,
|
||
|
|
pngimage, frxExportImage, frxExportPDF, frxDCtrl, frxDMPExport,
|
||
|
|
frxGradient, frxChBox, frxCross, frxRich, frxChart, frxOLE, frxBarcode,
|
||
|
|
ExtCtrls, dxLayoutLookAndFeels, JvComponentBase;
|
||
|
|
|
||
|
|
type
|
||
|
|
IEditorPreview = interface(IEditorBase)
|
||
|
|
['{7E79BEFC-C817-43D9-A60F-9573D1777068}']
|
||
|
|
function GetReport: TfrxReport;
|
||
|
|
property Report: TfrxReport read GetReport;
|
||
|
|
procedure LoadFromStream(AStream : TStream);
|
||
|
|
function ExportToFile : String;
|
||
|
|
end;
|
||
|
|
|
||
|
|
TfEditorPreview = class(TfEditorBase, IEditorPreview)
|
||
|
|
TBXToolbar1: TTBXToolbar;
|
||
|
|
TBXItem7: TTBXItem;
|
||
|
|
TBXItem33: TTBXItem;
|
||
|
|
TBXItem34: TTBXItem;
|
||
|
|
TBXItem39: TTBXItem;
|
||
|
|
TBXSeparatorItem14: TTBXSeparatorItem;
|
||
|
|
TBXSeparatorItem15: TTBXSeparatorItem;
|
||
|
|
TBXSeparatorItem16: TTBXSeparatorItem;
|
||
|
|
cbZoom: TTBXComboBoxItem;
|
||
|
|
PreviewActionList: TActionList;
|
||
|
|
PreviewSmallImageList: TPngImageList;
|
||
|
|
PreviewLargeImageList: TPngImageList;
|
||
|
|
actPrimeraPagina: TAction;
|
||
|
|
actUltimaPagina: TAction;
|
||
|
|
actPaginaAnterior: TAction;
|
||
|
|
actPaginaSiguiente: TAction;
|
||
|
|
TBXItem35: TTBXItem;
|
||
|
|
TBXItem36: TTBXItem;
|
||
|
|
actZoomIn: TAction;
|
||
|
|
actZoomOut: TAction;
|
||
|
|
actTodaPagina: TAction;
|
||
|
|
actAnchoPagina: TAction;
|
||
|
|
TBXSeparatorItem17: TTBXSeparatorItem;
|
||
|
|
TBXItem37: TTBXItem;
|
||
|
|
TBXItem40: TTBXItem;
|
||
|
|
TBXItem41: TTBXItem;
|
||
|
|
TBXItem42: TTBXItem;
|
||
|
|
frxReport1: TfrxReport;
|
||
|
|
actToolHand: TAction;
|
||
|
|
actToolZoom: TAction;
|
||
|
|
tbxZoom: TTBXItem;
|
||
|
|
tbxMano: TTBXItem;
|
||
|
|
TBXSeparatorItem18: TTBXSeparatorItem;
|
||
|
|
frxBarCodeObject1: TfrxBarCodeObject;
|
||
|
|
frxOLEObject1: TfrxOLEObject;
|
||
|
|
frxChartObject1: TfrxChartObject;
|
||
|
|
frxRichObject1: TfrxRichObject;
|
||
|
|
frxCrossObject1: TfrxCrossObject;
|
||
|
|
frxCheckBoxObject1: TfrxCheckBoxObject;
|
||
|
|
frxGradientObject1: TfrxGradientObject;
|
||
|
|
frxDotMatrixExport1: TfrxDotMatrixExport;
|
||
|
|
frxDialogControls1: TfrxDialogControls;
|
||
|
|
frxTIFFExport1: TfrxTIFFExport;
|
||
|
|
frxPDFExport1: TfrxPDFExport;
|
||
|
|
frxBMPExport1: TfrxBMPExport;
|
||
|
|
procedure FormShow(Sender: TObject);
|
||
|
|
procedure actPrimeraPaginaExecute(Sender: TObject);
|
||
|
|
procedure actUltimaPaginaExecute(Sender: TObject);
|
||
|
|
procedure actPaginaAnteriorExecute(Sender: TObject);
|
||
|
|
procedure actPaginaSiguienteExecute(Sender: TObject);
|
||
|
|
procedure actZoomInExecute(Sender: TObject);
|
||
|
|
procedure actTodaPaginaExecute(Sender: TObject);
|
||
|
|
procedure FormDestroy(Sender: TObject);
|
||
|
|
procedure FormResize(Sender: TObject);
|
||
|
|
procedure actImprimirExecute(Sender: TObject);
|
||
|
|
procedure actAnchoPaginaExecute(Sender: TObject);
|
||
|
|
procedure actZoomOutExecute(Sender: TObject);
|
||
|
|
procedure cbZoomItemClick(Sender: TObject);
|
||
|
|
procedure actToolHandExecute(Sender: TObject);
|
||
|
|
procedure actToolZoomExecute(Sender: TObject);
|
||
|
|
private
|
||
|
|
FPreview : TfrViewPreview;
|
||
|
|
function GetReport: TfrxReport;
|
||
|
|
procedure OnPageChanged(Sender: TfrxPreview; PageNo: Integer);
|
||
|
|
procedure UpdateZoom;
|
||
|
|
public
|
||
|
|
constructor Create(AOwner: TComponent); override;
|
||
|
|
property Report: TfrxReport read GetReport;
|
||
|
|
procedure Print;
|
||
|
|
procedure LoadFromStream(AStream : TStream);
|
||
|
|
function ExportToFile : String;
|
||
|
|
end;
|
||
|
|
|
||
|
|
var
|
||
|
|
fEditorPreview: TfEditorPreview;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
uses
|
||
|
|
frxRes, frxUtils, frxPrinter, uCustomEditor, uSysFunc,
|
||
|
|
frxFormUtils;
|
||
|
|
|
||
|
|
{$R *.dfm}
|
||
|
|
|
||
|
|
{ TfEditorBase1 }
|
||
|
|
|
||
|
|
function TfEditorPreview.GetReport: TfrxReport;
|
||
|
|
begin
|
||
|
|
Result := frxReport1;
|
||
|
|
end;
|
||
|
|
|
||
|
|
|
||
|
|
procedure TfEditorPreview.FormShow(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
UpdateZoom;
|
||
|
|
actPrimeraPagina.Execute;
|
||
|
|
FPreview.ShowEmbedded(Self);
|
||
|
|
Report.ShowPreparedReport;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actPrimeraPaginaExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.First;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actUltimaPaginaExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.Last;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actPaginaAnteriorExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.Prior;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actPaginaSiguienteExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.Next;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actZoomInExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.Zoom := FPreview.Preview.Zoom + 0.25;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.UpdateZoom;
|
||
|
|
begin
|
||
|
|
cbZoom.Text := IntToStr(Round(FPreview.Preview.Zoom * 100)) + '%';
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actTodaPaginaExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.ZoomMode := zmWholePage;
|
||
|
|
UpdateZoom;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.FormDestroy(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Free;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.FormResize(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
UpdateZoom;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actImprimirExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
if not frxPrinters.HasPhysicalPrinters then
|
||
|
|
frxErrorMsg(frxResources.Get('clNoPrinters'))
|
||
|
|
else
|
||
|
|
FPreview.Preview.Print;
|
||
|
|
Enabled := True;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actAnchoPaginaExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.ZoomMode := zmPageWidth;
|
||
|
|
UpdateZoom;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actZoomOutExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
FPreview.Preview.Zoom := FPreview.Preview.Zoom - 0.25;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.cbZoomItemClick(Sender: TObject);
|
||
|
|
var
|
||
|
|
s: String;
|
||
|
|
begin
|
||
|
|
FPreview.Preview.SetFocus;
|
||
|
|
|
||
|
|
if cbZoom.ItemIndex = 6 then
|
||
|
|
actAnchoPagina.Execute
|
||
|
|
else if cbZoom.ItemIndex = 7 then
|
||
|
|
actTodaPagina.Execute
|
||
|
|
else
|
||
|
|
begin
|
||
|
|
s := cbZoom.Text;
|
||
|
|
|
||
|
|
if Pos('%', s) <> 0 then
|
||
|
|
s[Pos('%', s)] := ' ';
|
||
|
|
while Pos(' ', s) <> 0 do
|
||
|
|
Delete(s, Pos(' ', s), 1);
|
||
|
|
|
||
|
|
if s <> '' then
|
||
|
|
FPreview.Preview.Zoom := frxStrToFloat(s) / 100;
|
||
|
|
end;
|
||
|
|
|
||
|
|
UpdateZoom;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actToolHandExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
if tbxMano.Checked then
|
||
|
|
FPreview.Preview.Tool := ptHand
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.actToolZoomExecute(Sender: TObject);
|
||
|
|
begin
|
||
|
|
if tbxZoom.Checked then
|
||
|
|
FPreview.Preview.Tool := ptZoom;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.OnPageChanged(Sender: TfrxPreview;
|
||
|
|
PageNo: Integer);
|
||
|
|
var
|
||
|
|
FirstPass: Boolean;
|
||
|
|
begin
|
||
|
|
FirstPass := False;
|
||
|
|
if Sender.PreviewPages <> nil then
|
||
|
|
FirstPass := not Sender.PreviewPages.Engine.FinalPass;
|
||
|
|
|
||
|
|
if FirstPass then
|
||
|
|
StatusBar.Panels[0].Text := frxResources.Get('clFirstPass') +
|
||
|
|
IntToStr(Sender.PageCount)
|
||
|
|
else
|
||
|
|
StatusBar.Panels[0].Text := Format(frxResources.Get('clPageOf'),
|
||
|
|
[PageNo, Sender.PageCount]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
constructor TfEditorPreview.Create(AOwner: TComponent);
|
||
|
|
begin
|
||
|
|
inherited;
|
||
|
|
|
||
|
|
with cbZoom.Strings do
|
||
|
|
begin
|
||
|
|
Clear;
|
||
|
|
Add('25%');
|
||
|
|
Add('50%');
|
||
|
|
Add('75%');
|
||
|
|
Add('100%');
|
||
|
|
Add('150%');
|
||
|
|
Add('200%');
|
||
|
|
Add(frxResources.Get('zmPageWidth'));
|
||
|
|
Add(frxResources.Get('zmWholePage'));
|
||
|
|
end;
|
||
|
|
|
||
|
|
FPreview := TfrViewPreview.Create(Self);
|
||
|
|
Report.Preview := FPreview.Preview;
|
||
|
|
FPreview.Preview.OnPageChanged := OnPageChanged;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.Print;
|
||
|
|
begin
|
||
|
|
actImprimir.Execute;
|
||
|
|
end;
|
||
|
|
|
||
|
|
function TfEditorPreview.ExportToFile: String;
|
||
|
|
var
|
||
|
|
AFile : String;
|
||
|
|
begin
|
||
|
|
Result := '';
|
||
|
|
AFile := DarFicheroTIFFTemporal;
|
||
|
|
frxTIFFExport1.SeparateFiles := False;
|
||
|
|
frxTIFFExport1.DefaultPath := ExtractFilePath(AFile);
|
||
|
|
frxTIFFExport1.FileName := ExtractFileName(AFile);
|
||
|
|
try
|
||
|
|
if Report.Export(frxTIFFExport1) then
|
||
|
|
Result := AFile;
|
||
|
|
finally
|
||
|
|
frxTIFFExport1.DefaultPath := '';
|
||
|
|
frxTIFFExport1.FileName := '';
|
||
|
|
end;
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TfEditorPreview.LoadFromStream(AStream: TStream);
|
||
|
|
begin
|
||
|
|
Report.PreviewPages.LoadFromStream(AStream);
|
||
|
|
end;
|
||
|
|
|
||
|
|
end.
|