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
Para comprender mejor como funciona
la selección de la bandeja, vamos a
desarrollar una pequeña aplicación.
Cargas Delphi, e inicias un nuevo proyecto.
Le llamaremos Eligebandejas

Nuetro proyecto tendrá por ahora una sola unidad.
El nombre se lo pones a tu gusto, que sea algo
original y nunca visto antes,
como por ejemplo Mainform.

Nuestra unidad tendrá aparte del form,
dos speedbuttons, una etiqueta y un
PrinterSetupDialog. El caption del
primer boton será 'Printer Setup'.
El caption de la etiqueta será 'Bin Code'
( que es lo que queremos conocer).
El otro boton, de momento lo dejamos inutil.

Al terminar el codigo debe quedar así:



Código Delphi [-] Código Delphi [-]
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;
{$R *.DFM}
// Esta función devuelve el codigo de bandeja
// seleccionado por el usuaro.
// Puede adaptarse facilmente para conocer
// otros miembros de DevMode 
/ como  collate, print quality etc
// Se usan variables globales para 
//poder recuperar otros parámetros
// Ver  'UserCollateCode' .
 
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);
        //aqui podemos capturar los mienbros de DevMode
        bin := DevMode^.DMDEFAULTSOURCE;
        UserCollateCode := DevMode^.dmCollate;
        GlobalUnlock (hDevMode);
  end;
  result := bin;
end;
 
{ En el evento on click del primer boton
lanzamos el dialogo del driver de laimpresora. En este
elegimos la bandeja que queramos. 
Al cerrar el dialogo, llamamos a la funcion GetNinSelection
que nos devolverá el numero de la bandeja. Tambien usando variables globales, podemos devolver otros miembros de DevMode. Lo importante, es que sabremos
los numeros de la bandeja de  nuestra impresora y los podremos usar posteriormente }
 
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
     setup1.Execute;
     UserBinCode := GetBinSelection;
     label1.Caption := 'Bin code : ' + inttostr( UserBinCode)+ ' Collate code ' + inttostr( UserCollateCode);
end;





Compila el proyecto y ejecutalo con tu impresora. Apunta lso codigos de cada bandeja.
Saludos
Responder Con Cita