Componentes.Terceros.DevExp.../official/x.48/ExpressPrinting System 4/Sources/dxPSExtDlgs.pas
2010-01-18 18:33:24 +00:00

350 lines
11 KiB
ObjectPascal

{*******************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressPrinting System COMPONENT SUITE }
{ }
{ Copyright (C) 1998-2009 Developer Express Inc. }
{ ALL RIGHTS RESERVED }
{ }
{ The entire contents of this file is protected by U.S. and }
{ International Copyright Laws. Unauthorized reproduction, }
{ reverse-engineering, and distribution of all or any portion of }
{ the code contained in this file is strictly prohibited and may }
{ result in severe civil and criminal penalties and will be }
{ prosecuted to the maximum extent possible under the law. }
{ }
{ RESTRICTIONS }
{ }
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
{ LICENSED TO DISTRIBUTE THE EXPRESSPRINTINGSYSTEM AND }
{ ALL ACCOMPANYING VCL CONTROLS AS PART OF AN }
{ EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{*******************************************************************}
unit dxPSExtDlgs;
interface
{$I cxVer.inc}
uses
Messages, Windows, SysUtils, Classes, Controls, Forms, StdCtrls, Graphics,
ExtCtrls, Buttons, Dialogs, cxClasses, dxPSCore, dxExtCtrls, cxButtons;
type
TdxPSOpenReportDialog = class(TOpenDialog)
private
btnPreview: TcxButton;
FPrevFileName: string;
FPreviewRect: TRect;
FReportDocument: TdxPSReportDocument;
lblPreview: TLabel;
pnlPicture: TPanel;
pnlToolBar: TPanel;
sbxPreview: TdxPSImageScrollBox;
function GetGraphic: TGraphic;
function GetHasDocument: Boolean;
function GetIsDocumentValid: Boolean;
procedure PreviewClick(Sender: TObject);
protected
function IsSelectedFileValid: Boolean; virtual;
function TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool; override;
procedure CreateControls; virtual;
procedure DoClose; override;
procedure DoSelectionChange; override;
procedure DoShow; override;
procedure Initialize; virtual;
procedure LoadReportDocument;
procedure LoadStrings; virtual;
procedure PlacePreviewPanelInitial;
procedure PrepareToExecute;
procedure UpdateControls; virtual;
property Graphic: TGraphic read GetGraphic;
property HasDocument: Boolean read GetHasDocument;
property IsDocumentValid: Boolean read GetIsDocumentValid;
property PreviewRect: TRect read FPreviewRect;
property ReportDocument: TdxPSReportDocument read FReportDocument;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute: Boolean; override;
end;
TdxPSSaveReportDialog = class(TdxPSOpenReportDialog)
public
constructor Create(AOwner: TComponent); override;
function Execute: Boolean; override;
end;
const
sdxPicturePanel = 'pnlPicture'; // Don't localize
sdxPreviewButton = 'btnPreview'; // Don't localize
sdxPreviewLabel = 'lblPreview'; // Don't localize
sdxPreviewScrollBox = 'sbxPreview'; // Don't localize
sdxPreviewToolBar = 'pnlToolBar'; // Don't localize
implementation
uses
CommDlg, dxPSRes, dxPSImgs, dxPSUtl, dxPCPrVw;
{$R dxPSExtDlgs.res}
{ TdxPSOpenReportDialog }
constructor TdxPSOpenReportDialog.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
CreateControls;
DefaultExt := dxPSCore.dxPSReportFileShortExtension;
Filter := Format('%s (*.%1:s)|*.%1:s', [cxGetResourceString(@sdxPSReportFiles), dxPSCore.dxPSReportFileShortExtension]);
Options := Options + [ofPathMustExist, ofFileMustExist];
Title := cxGetResourceString(@sdxLoadReportDataToFileTitle);
end;
destructor TdxPSOpenReportDialog.Destroy;
begin
FreeAndNil(FReportDocument);
inherited Destroy;
end;
function TdxPSOpenReportDialog.Execute: Boolean;
begin
PrepareToExecute;
Result := inherited Execute;
end;
procedure TdxPSOpenReportDialog.DoClose;
begin
inherited DoClose;
Application.HideHint;
end;
procedure TdxPSOpenReportDialog.DoSelectionChange;
begin
if FileName <> FPrevFileName then
begin
FPrevFileName := FileName;
if IsSelectedFileValid then
LoadReportDocument;
UpdateControls;
end;
inherited DoSelectionChange;
end;
procedure TdxPSOpenReportDialog.DoShow;
begin
Initialize;
inherited DoShow;
end;
function TdxPSOpenReportDialog.TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool;
var
Wnd: HWND;
begin
Wnd := SetParent(Handle, GetForegroundWindow);
TOpenFileName(DialogData).hInstance := hInstance;
Result := inherited TaskModalDialog(DialogFunc, DialogData);
SetParent(Handle, Wnd);
end;
procedure TdxPSOpenReportDialog.CreateControls;
function CreatePanel(const AName: TComponentName): TPanel;
begin
Result := TPanel.Create(Self);
Result.BevelInner := bvNone;
Result.BevelOuter := bvNone;
Result.BorderStyle := bsNone;
Result.Name := AName;
Result.Caption := '';
end;
procedure CreatePicturePanel;
begin
pnlPicture := CreatePanel(sdxPicturePanel);
pnlPicture.TabOrder := 1;
pnlPicture.SetBounds(204, 5, 169, 200);
end;
procedure CreatePreviewToolBar;
begin
pnlToolBar := CreatePanel(sdxPreviewToolBar);
pnlToolBar.Parent := pnlPicture;
pnlToolBar.Align := alTop;
pnlToolBar.Height := 31; //29
pnlToolBar.TabOrder := 0;
end;
procedure CreatePreviewLabel;
begin
lblPreview := TLabel.Create(Self);
lblPreview.Parent := pnlToolBar;
lblPreview.AutoSize := False;
lblPreview.Name := sdxPreviewLabel;
lblPreview.Transparent := True;
lblPreview.SetBounds(2, 6, 157, 23);
end;
procedure CreatePreviewButton;
begin
btnPreview := TcxButton.Create(Self);
btnPreview.Parent := pnlToolBar;
btnPreview.Enabled := False;
btnPreview.Name := sdxPreviewButton;
btnPreview.ParentShowHint := False;
btnPreview.ShowHint := True;
btnPreview.SetBounds(77, 1, 23, 22);
btnPreview.OnClick := PreviewClick;
Bitmap_LoadFromResourceName(btnPreview.Glyph, IDB_DXPSPREVIEW);
btnPreview.Caption := '';
end;
procedure CreatePreviewScrollBox;
begin
sbxPreview := TdxPSImageScrollBox.Create(Self);
sbxPreview.Parent := pnlPicture;
sbxPreview.Align := alClient;
sbxPreview.Name := sdxPreviewScrollBox;
sbxPreview.TabOrder := 1;
sbxPreview.OnDblClick := PreviewClick;
end;
begin
CreatePicturePanel;
CreatePreviewToolBar;
CreatePreviewLabel;
CreatePreviewButton;
CreatePreviewScrollBox;
end;
function TdxPSOpenReportDialog.IsSelectedFileValid: Boolean;
begin
Result := FileExists(FileName) and (GetFileAttributes(PChar(FileName)) <> $FFFFFFFF);
end;
procedure TdxPSOpenReportDialog.LoadReportDocument;
var
Stream: TFileStream;
begin
FreeAndNil(FReportDocument);
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
try
FReportDocument := TBasedxReportLink.ExtractReportDocument(Stream, True);
except
FReportDocument := nil;
end;
finally
Stream.Free;
end;
end;
procedure TdxPSOpenReportDialog.Initialize;
begin
LoadStrings;
PlacePreviewPanelInitial;
UpdateControls;
end;
procedure TdxPSOpenReportDialog.LoadStrings;
begin
lblPreview.Caption := DropAmpersand(cxGetResourceString(@sdxPreview)) + ':';
btnPreview.Hint := DropAmpersand(cxGetResourceString(@sdxPreview));
end;
procedure TdxPSOpenReportDialog.PlacePreviewPanelInitial;
var
R: TRect;
begin
R := GetStaticRect;
Windows.GetClientRect(Handle, FPreviewRect);
FPreviewRect.Left := R.Left + (R.Right - R.Left);
Inc(FPreviewRect.Top, 4);
pnlPicture.ParentWindow := Handle;
pnlPicture.Realign;
pnlPicture.BoundsRect := PreviewRect;
btnPreview.Left := pnlToolBar.BoundsRect.Right - btnPreview.Width - 2;
end;
procedure TdxPSOpenReportDialog.PrepareToExecute;
begin
Options := Options - [ofEnableSizing];
if NewStyleControls and not (ofOldStyleDialog in Options) then
Template := 'DXPSDLGTEMPLATE'
else
Template := nil;
end;
procedure TdxPSOpenReportDialog.UpdateControls;
begin
btnPreview.Enabled := IsDocumentValid;
sbxPreview.Enabled := IsDocumentValid;
sbxPreview.Picture.Assign(Graphic);
if IsDocumentValid then
sbxPreview.HintText := ''
else
if FileExists(FileName) then
sbxPreview.HintText := cxGetResourceString(@sdxReportDocumentIsCorrupted)
else
sbxPreview.HintText := cxGetResourceString(@sdxNone);
end;
function TdxPSOpenReportDialog.GetGraphic: TGraphic;
begin
if ReportDocument <> nil then
Result := ReportDocument.Preview
else
Result := nil;
end;
function TdxPSOpenReportDialog.GetHasDocument: Boolean;
begin
Result := ReportDocument <> nil;
end;
function TdxPSOpenReportDialog.GetIsDocumentValid: Boolean;
begin
Result := Graphic <> nil;
end;
procedure TdxPSOpenReportDialog.PreviewClick(Sender: TObject);
begin
dxPCPrVw.dxShowPicturePreview(Graphic);
end;
{ TdxPSSaveReportDialog }
constructor TdxPSSaveReportDialog.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Options := Options + [ofOverwritePrompt];
Title := cxGetResourceString(@sdxSaveReportDataToFileTitle);
end;
function TdxPSSaveReportDialog.Execute: Boolean;
begin
PrepareToExecute;
Result := DoExecute(@GetSaveFileName);
end;
end.