Componentes.Terceros.DevExp.../internal/x.36/1/ExpressDBTree Suite/Demos/Delphi/DBTrPrn/dbtreeqr.pas
2008-09-04 11:31:51 +00:00

144 lines
3.5 KiB
ObjectPascal

unit dbtreeqr;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Quickrpt, StdCtrls, ExtCtrls, DB, Qrctrls;
type
TQRListForm = class(TForm)
QuickReport: TQuickRep;
Title: TQRBand;
PageHeader: TQRBand;
PageNumber: TQRSysData;
Detail: TQRBand;
Image2: TImage;
QRLabel1: TQRLabel;
QText: TQRDBText;
Image: TQRImage;
ImageRect: TQRImage;
procedure QuickReportAfterPrint(Sender: TObject);
procedure QuickReportBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
procedure TitleAfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
procedure TitleBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
private
ShapeCount : Integer;
ShapeList : TList;
ImageLeft, QTextLeft, ImageRectLeft : Integer;
public
{ Public declarations }
end;
var
QRListForm: TQRListForm;
implementation
uses main;
const
PixelPerLevel = 50;
{$R *.DFM}
procedure HideQRShape(qs : TQRShape);
begin
with qs do begin
Visible := False;
Left := -100;
Width := 0;
Height := 0;
end;
end;
procedure TQRListForm.QuickReportAfterPrint(Sender: TObject);
Var
i : Integer;
begin
for i := 0 to ShapeCount do
TQRShape(ShapeList[i]).Free;
ShapeList.Free;
end;
procedure TQRListForm.QuickReportBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
Var
i : Integer;
begin
ShapeCount := FMain.DBTreePrintDataSet.MaxLevelCount;
ShapeList := TList.Create;
ImageLeft := Image.Left;
QTextLeft := QText.Left;
ImageRectLeft := ImageRect.Left;
for i := 0 to ShapeCount do begin
ShapeList.Add(TQRShape.Create(self));
with TQRShape(ShapeList[i]) do begin
Parent := Detail;
ParentReport := QuickReport;
if (i = 0) then
Shape := qrsHorLine
else Shape := qrsVertLine;
Pen.Style := psDot;
HideQRShape(TQRShape(ShapeList[i]));
end;
end;
end;
procedure TQRListForm.TitleAfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
Var
i : Integer;
begin
if (Sender <> Detail) then exit;
Image.Left := ImageLeft;
QText.Left := QTextLeft;
ImageRect.Left := ImageRectLeft;
if Not ImageRect.Visible then begin
ImageRect.Height := 9;
end;
ImageRect.Visible := True;
for i := 0 to ShapeCount do
HideQRShape(TQRShape(ShapeList[i]));
end;
procedure TQRListForm.TitleBeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
Var
i, Level, inten : Integer;
qs : TQRShape;
begin
if (Sender <> Detail) then exit;
Level := FMain.DBTreePrintDataSet.FindField('dx$level').AsInteger;
ImageRect.Visible := FMain.DBTreePrintDataSet.FindField('dx$haschildren').AsBoolean;
inten := Level * PixelPerLevel;
Image.Left := Image.Left + inten;
QText.Left := QText.Left + inten;
ImageRect.Left := ImageRect.Left + inten;
qs := TQRShape(ShapeList[0]);
qs.Visible := True;
if ImageRect.Visible then
qs.Left := ImageRect.Left + 1 + ImageRect.Width
else begin
qs.Left := ImageRect.Left + ImageRect.Width div 2 - PixelPerLevel;
ImageRect.Height := 1;
end;
qs.Width := Image.Left - qs.Left - 1;
qs.Top := ImageRect.Top + ImageRect.Height div 2;
for i := 0 to level - 1 do begin
qs := TQRShape(ShapeList[i + 1]);
qs.Visible := True;
qs.Left := ImageRectLeft + ImageRect.Width div 2 + i * PixelPerLevel;
qs.Height := Detail.Height;
end;
FMain.ImageList1.GetBitmap(0, Image.Picture.Bitmap);
end;
end.