PDA

Ver la Versión Completa : Problema con Printer.PrinterIndex


newtron
07-04-2018, 10:06:36
Hola a tod@s.

Para las instalaciones con terminales remotos suelo usar "ThinStuff" que, para quien no lo conozca, es algo similar a "Terminal Services" de Microsoft pero bastante más económico.

El tema es que nunca he tenido ningún problema pero en una reciente instalación con Windows Server 2016 (la primera con esta versión) mi programa (hecho con Delphi 2007) no me "sube" la impresora por defecto, que en este caso sería la local de la máquina cliente.

Después de dar mil vueltas pensando que sería algo de configuración de Windows o de ThinStuff me da por probar a compilar un pequeño programa con Delphi Berlin que me muestre la impresora por defecto y resulta que funciona correctamente, con lo cual deduzco que es algún tipo de problema con Delphi 2007.

Ahora mismo me resultaría bastante engorroso y apresurado migrar mi aplicación de Delphi 2007 a Delphi Berlin y mi pregunta es si hay alguna manera de "sustituir" la función Printer.PrinterIndex de Delphi 2007 y usar la de Delphi Berlín a ver si me puedo apañar hasta que pueda migrar la aplicación entera a la nueva versión de Delphi.

Gracias y un saludo

ecfisa
08-04-2018, 00:30:50
Hola newtron :)

La verdad es que no me he topado con WS 2016, pero prueba este ejemplo a ver si te funciona:

....
implementation

uses Printers;

function GetDefaultPrinter(prnName : PAnsiChar; var bufSize : DWORD ) : BOOL;
stdcall; external 'winspool.drv' name 'GetDefaultPrinterA';

function GetDefaultPrinterName(): string;
var
lpName: PChar;
szBuff: DWORD;
begin
GetDefaultPrinter(nil, szBuff);
GetMem(lpName, szBuff);
try
GetDefaultPrinter(lpName, szBuff);
Result := lpName;
finally
FreeMem(lpName);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items := Printer.Printers; // (*)
ComboBox1.ItemIndex := -1;
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(GetDefaultPrinterName());
end;

(*) Para obtener la lista de impresoras se podría usar la función EnumPrinters (https://msdn.microsoft.com/en-us/library/windows/desktop/dd162692(v=vs.85).aspx) pero si no recuerdo mal, es la que usa la propiedad Printers así que no creo que se gane mucho...

Saludos :)

newtron
09-04-2018, 09:23:02
Hola ecfisa, me alegra saber de ti. :)

Efectivamente este código parece que funciona, gracias. Es una cosa muy extraña que solamente me ha pasado con la combinación WS 2016+Thingstuff+Delphi 2007.

Gracias de nuevo y un saludo