Añadamos una segunda unidad, que será un report para ver como funciona la elección de bandeja. Este report será lanzado por el segundo botón de la unidad principal. Así pues, lo primero es escribir algo en el caption del segundo boton: Pondremos 'Print' y el eventon on click se encargará de lanzar el report. En resumen, la unidad principal quedá así:
Código Delphi
[-]
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls;
type
TForm1 = class(TForm)
SpeedButton1: TSpeedButton;
Setup1: TPrinterSetupDialog;
Label1: TLabel;
SpeedButton2: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
UserBinCode : integer;
UserCollateCode : integer;
implementation
uses printers, miReport;
{$R *.DFM}
function GetBinSelection: integer;
var
hDevMode: THandle;
Device,Driver,Port: array [0..1024] of Char;
bin: integer;
DevMode : PDevMode;
begin
Printer.GetPrinter (Device,Driver,Port,hDevMode);
bin := -1;
if hDevMode <> 0 then
begin
DevMode := GlobalLock (hDevMode);
bin := DevMode^.DMDEFAULTSOURCE;
UserCollateCode := DevMode^.dmCollate;
GlobalUnlock (hDevMode);
end;
result := bin;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
setup1.Execute;
UserBinCode := GetBinSelection;
label1.Caption := 'Bin code : ' + inttostr( UserBinCode)+ ' Collate code ' + inttostr( UserCollateCode);
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
report1.quickrep1.print;
end;
La segunda unidad tendrá un quickreport. La propiedad bands de este será todas false menos HasDetail y HasPage Header
En la banda de cabecera pondremos un TQRLabel y en el caption algo descriptivo como: 'Prueba de selección de bandeja'
En la banda de detalles colocamos otro TQRLabel para que veamos como queda el report
El codigo quedará así
Código Delphi
[-]unit MiReport;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, QRCtrls, ExtCtrls;
type
Treport1 = class(TForm)
QuickRep1: TQuickRep;
PageHeaderBand1: TQRBand;
DetailBand1: TQRBand;
QRLabel1: TQRLabel;
QRLabel2: TQRLabel;
procedure QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
procedure QuickRep1ApplyPrinterSettings(Sender: TObject;
var Cancel: Boolean; DevMode: Pointer);
private
public
end;
var
report1: Treport1;
lineno : integer;
implementation
uses MainForm;
{$R *.DFM}
procedure Treport1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
begin
inc(lineno);
MoreData := lineno < 30;
end;
procedure Treport1.QuickRep1ApplyPrinterSettings(Sender: TObject;
var Cancel: Boolean; DevMode: Pointer);
begin
PDevMode(DevMode).dmDefaultSource := UserBinCode;
PDevMode(DevMode).dmCollate := UserCollateCode;
end;
end.
En fin, espero haber respondido a lo que planteabas.
Saludos