Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con Printer.PrinterIndex (https://www.clubdelphi.com/foros/showthread.php?t=92977)

newtron 07-04-2018 11:06:36

Problema con Printer.PrinterIndex
 
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 01:30:50

Hola newtron :)

La verdad es que no me he topado con WS 2016, pero prueba este ejemplo a ver si te funciona:
Código Delphi [-]
....
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 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 10: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


La franja horaria es GMT +2. Ahora son las 01:44:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi