Ver Mensaje Individual
  #5  
Antiguo 03-09-2006
jlmelida jlmelida is offline
Miembro
 
Registrado: ene 2005
Ubicación: Alicante, España
Posts: 42
Reputación: 0
jlmelida Va por buen camino
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
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  UserBinCode : integer;
  UserCollateCode : integer;
implementation
uses printers, miReport; { MiReport es el originalisimo nombre de la segunda unidad}
{$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
    { Private declarations }
  public
    { Public declarations }
  end;
var
  report1: Treport1;
  lineno : integer;
implementation
uses MainForm;
{$R *.DFM}
procedure Treport1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean);
begin
   // Escribimos el interesantismo report        qrlabel1.caption := 'Linea ' + inttostr( Lineno);
      inc(lineno);
      MoreData := lineno < 30;
end;

procedure Treport1.QuickRep1ApplyPrinterSettings(Sender: TObject;
  var Cancel: Boolean; DevMode: Pointer);
begin
    // Sobreescribimos la función con nuestros parametros
    // Podemos alterar muchas cosas:
    //   DevMode^.dmPrintQuality := PrintQuality;
   // DevMode^.dmCollate := Collate;
   // DevMode^.dmColor := ColorOption;
   // Por supuesto la orientación, tamaño, etc.
  
       PDevMode(DevMode).dmDefaultSource := UserBinCode;
       PDevMode(DevMode).dmCollate := UserCollateCode;
end;
end.

En fin, espero haber respondido a lo que planteabas.
Saludos
Responder Con Cita