PDA

Ver la Versión Completa : Impresion con PrintDialog


manolop
27-03-2007, 01:24:54
Hola, lo primero es decir que ya he estado mirando los foros y pese a que parece que lo hago bien, no puedo seleccionar correctamente la impresión. A continuación pongo el codigo que intento ejecutar:


defecto:=Printer.PrinterIndex;
if PrintDialog1.Execute then
begin
impr:= Printer.PrinterIndex;
SetDefaultPrinter1(impr);
sleep(500); //para dar tiempo al mensaje de actualizacion de la impresora
ShellExecute(Printer.Handle, 'print', PChar('ruta_del_archivo'), nil, nil, 0);
SetDefaultPrinter1(defecto);
end;


Donde la function SetDefaultPrinter1 es la siguiente:
procedure SetDefaultPrinter1(NewDefPrinter: integer);
var
Device : array[0..255] of char;
Driver : array[0..255] of char;
Port : array[0..255] of char;
hDeviceMode: THandle;
begin
// Cogemos la seleccionada en el combo
//default
// Obtener la impresora eleccionada
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
// Montamos la cadena necesaria...
StrCat( Device, ',');
StrCat( Device, Driver );
StrCat( Device, ',');
StrCat( Device, Port );
// Modifica WIN.INI o el registro segun sea W9x o WNT
WriteProfileString( 'windows', 'device', Device );
StrCopy( Device, 'windows' );
// Avisar de que hemos cambiado "algo"
SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE, 0, longint( @Device));

end;

Lo unico que quiero hacer es poder selecionar una impresora y mandar el archivo a imprimir.
Otra cosa que no he podido acabar de solucionar es enviar por fax un archivo pero creo que lo unico que voy a poder hacer es mandar a imprimir con este mismo código a la impresora Fax que trae windows XP. Asi que si alguien ha poddo enviar un fax le estaria eternamente agradecido. Muchas gracias por el tiempo y disculpad cualquier molestia ocasionada.

droguerman
27-03-2007, 05:56:48
hey pero en la función SetDefaultPrinter1 no usas el parámetro NewDefPrinter en ningún momento, porque no concatenas con Printer.Printers[Printer.PrinterIndex]

manolop
28-03-2007, 13:59:12
Si en efecto se me habia pasado eso pero ya lo he puesto bien con la linea
Printer.PrinterIndex := NewDefPrinter;

antes de:
Printer.GetPrinter

Pero sigue sin funcionar correctamente, no me selecciona la impresora.
Alguien tiene alguna idea, pq de verdad que necesito solucionar este tema. muchas gracias por todo

santiago14
10-09-2010, 15:00:27
hey pero en la función SetDefaultPrinter1 no usas el parámetro NewDefPrinter en ningún momento, porque no concatenas con Printer.Printers[Printer.PrinterIndex]


Printer.Printers[Printer.PrinterIndex]

Esto funcionó de maravillas, la verdad es que a veces uno no le encuentra la vuelta a la cosa y es tan sencillo...

Gracias.