![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
|
Primeramente, mi problema es que quiero cambiar el tamaño del papel de la impresora.
Hace tiempo que plantee este problema en otro hilo, 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 Pascal 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” |
|
#2
|
|||
|
|||
|
No tengo ni idea porque falla, pero a ver si los moderadores pueden echarle un vistazo, ya que es un tema interesante debido a que a mi me pasa con lo mismo ya que mi impresora laser no me permite definir un tamaño personalizado por estar mas abajo del minimo. Saludos y Animo.
|
|
#3
|
|||
|
|||
|
Units
Las units que se están usando son:
Windows, Printers, sysutils, WinSpool
__________________
“Daría todo lo que sé por la mitad de lo que ignoro” |
|
#4
|
|||
|
|||
|
Prueba este codigo y dime que tal, me lo paso un amigo lo que pasa es que no tengo tinta en mi impresora para probarlo.
var pcrDevice : array[0..255] of char; pcrDriver : array[0..255] of char; pcrPort : array[0..255] of char; lDMode : THandle; varPDMode : PDEVMODE; begin Printer.PrinterIndex := Printer.PrinterIndex; Printer.GetPrinter(pcrDevice, pcrDriver, pcrPort, lDMode); if (lDMode <> 0) then begin varPDMode := GlobalLock(lDMode); if (varPDMode <> nil) then begin varPDMode^.dmFields := (varPDMode^.dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH); varPDMode^.dmPaperSize := DMPAPER_USER; varPDMode^.dmPaperWidth := 100; varPDMode^.dmPaperLength := 100; varPDMode^.dmFields := (varPDMode^.dmFields or DMBIN_MANUAL); varPDMode^.dmDefaultSource := DMBIN_MANUAL; GlobalUnlock(lDMode); end; end; end; Última edición por serhasae fecha: 29-09-2005 a las 00:57:47. |
|
#5
|
|||
|
|||
|
Estoy haciendo una clase de impresion atraves del canvas,
y no encuentro cual es la forma de cambiar el "ppp" "puntos por pulgada" e visto que una impresora puede tener 600 o 300 por ejem. hp6620, permite seleccionar este dato "calidad de impresión" ... si se selecciona modo normal desde las propiedades imprime en 600, y si se selecciona "calidad borrador" imprimi en 300, pero como hacer esto mismo por codigo... He estado mirando PDEVMODE y no he encontrado cual de todos es... Alguna Idea? Gracias. _Willa |
![]() |
|
|
|