![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
Problema con API
Yo estuve usando el siguiente código que encontré en este foro para inicializar Printer:
Código:
procedure SetPaperSize (intAlto,intAncho : Integer);
{aqui se define el tamaño del papel}
var
ADevice, ADriver, APort : array [0..255] of Char;
ADeviceMode : THandle;
DevMode : PDevMode;
begin
with Printer do
begin
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
SetPrinter (ADevice, ADriver, APort, 0);
GetPrinter (ADevice, ADriver, APort, ADeviceMode);
DevMode := GlobalLock(ADeviceMode);
if not Assigned(DevMode) then
ShowMessage('Ha entrado en -> if not Assigned(DevMode) ...')
else
begin
with DevMode^ do
begin
dmPaperSize:= DMPAPER_User;
dmPaperLength := intAlto;
dmPaperWidth:= intAncho;
dmFields := dmFields or DM_PAPERSIZE or DM_PAPERLength or DM_PAPERWidth;
end;
GlobalUnLock(ADeviceMode);
SetPrinter(ADevice, ADriver, APort, ADeviceMode);
end;
end;
end;
Así que quisiera saber si alguien ya tuvo este problema y cómo lo resolvió. O si alguien sabe cómo resolverlo. El problema específicamente es hacer que el tamaño definido en dmPaperLength y dmPaperWidth sea usado por Printer para obtener ciertos valores como la mitad del ancho de página, etc... que son usados por Printer.Canvas. De antemano, Gracias.
__________________
“Daría todo lo que sé por la mitad de lo que ignoro” |
|
#2
|
|||
|
|||
|
me gustaría saber si encontraste respuesta a este problema porque a mi me pasa lo mismo.
Te agradecería que lo publicaras ![]() Marco. |
|
#3
|
|||
|
|||
|
Bueno, hace tiempo que plantee este problema, y ahora después de seguir investigando encontré este link, directo del soporte técnico de Microsoft http://support.microsoft.com/default...0285#appliesto
Aqui explican cómo usando la API es posible cambiar las propiedades de la impresión, pero... lo estuve trasladando a Delphi y tengo un problema: Código:
var
hPrinter: THandle;
dwNeeded: Dword;
pi2: ^PRINTER_INFO_2;
pDevMode: ^DevMode;
pd: PRINTER_DEFAULTS;
begin
hprinter := 0;
dwNeeded := 0;
pdevmode := nil;
ZeroMemory( @pd, Sizeof(pd) );
pd.DesiredAccess := PRINTER_ACCESS_ADMINISTER;
if OpenPrinter(PAnsiChar(Printer.Printers[Printer.PrinterIndex]), hPrinter, @pd ) then
begin
SetLastError(0);
GetPrinter(hPrinter, 2, nil, 0, @dwNeeded );
pi2 := Pointer( GlobalAlloc( GPTR, dwNeeded ) );
if not( GetPrinter(hPrinter, 2, pi2, dwNeeded, @dwNeeded) ) then
begin
ShowMessage( IntToStr(GetLastError) );
Exit;
end;
if pi2.pDevMode <> nil then
begin
pi2.pSecurityDescriptor := nil;
pi2.pDevMode.dmFields := DM_PAPERLENGTH and DM_PAPERWIDTH and DM_PAPERSIZE;
pi2.pDevMode.dmPaperLength := 1000;
pi2.pDevMode.dmPaperWidth := 2160;
pi2.pDevMode.dmPaperSize := DMPAPER_User;
end;
end;
end;
PD: Nótese que según el soporte técnico de Microsoft, este código sirve para XP y NT, yo estoy usando XP Professional
__________________
“Daría todo lo que sé por la mitad de lo que ignoro” |
![]() |
|
|
|