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
|
|||
|
|||
encontraste respuesta ?
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
|
|||
|
|||
Nueva duda
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” |
|
|
|