FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
Impresora
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
|
|||
|
|||
Cambiar el ppp de una Impresora!!
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 |
|
|
|