| Mal wieder eine meisterhafte APIrei von Andreas Miethe.
Druckerränder - Blattgröße - DPI: KompilierenMarkierenSeparierenDef @AGetDeviceCaps(2) ! GDI32,GetDeviceCaps
Def @ACreateDC(4) ! GDI32,CreateDCA
Def @DeleteDC(1) ! GDI32,DeleteDC
Declare PDC&,APX!,APY!,PB!,PH!,POX!,POY!,DPIX!,DPIY!,PBMM!,PHMM!,RMM!
Declare PMAX!,PMAY!
Declare drv#,name#,port#
Declare device$,driv$,port$
Declare POR!,PUR!
Declare PLR!,PRR!
Proc GetPrinterDC
Printer-DC ermitteln
DIM drv#,200
DIM name#,200
DIM port#,200
LET device$=@readini$(win.ini,windows,device)
LET device$=@substr$(@readini$(win.ini,windows,device),1,,)
LET driv$= @ADD$(@substr$(@readini$(win.ini,devices,device$),1,,),.drv)
LET port$=@substr$(@readini$(win.ini,devices,device$),2,,)
String name#,0=device$
String drv#,0=driv$
String port#,0=port$
Let PDC&=@ACreateDC(drv#,name#,0,0)
dispose drv#
dispose name#
dispose port#
EndProc
Proc Werte_Ermitteln
Werte ermitteln
Let APX!=@AGetDeviceCaps(PDC&,8)Ausgabebreite in Pixel
Let APY!=@AGetDeviceCaps(PDC&,10)AusgabeHoehe in Pixel
Let PB!=@AGetDeviceCaps(PDC&,110)Physikalische Breite
Let PH!=@AGetDeviceCaps(PDC&,111)Physikalische Hoehe
Let POX!=@AGetDeviceCaps(PDC&,112)Offset X
Let POY!=@AGetDeviceCaps(PDC&,113)Offset Y
Let DPIX!=@AGetDeviceCaps(PDC&,88)DPI X
Let DPIY!=@AGetDeviceCaps(PDC&,90)DPI Y
Let PBMM!=@AGetDeviceCaps(PDC&,4)Ausgabebreite in mm
Let PHMM!=@AGetDeviceCaps(PDC&,6)Ausgabehoehe in mm
EndProc
Proc Ausgabe
Werte ausgeben
UseFont Arial,18,0,1,0,0
Drawtext 10,0,add$(Standard-Drucker : ,Device$)
UseFont Courier New,15,0,0,0,0
if @equ(@AGetDeviceCaps(PDC&,2),2) then
Drawtext 10,20,Rasterdrucker
endif
Decimals 0
Drawtext 10,60,Add$(Ausgabebreite in Pixel : ,str$(APX!))
Drawtext 340,60,Add$(Ausgabehöhe in Pixel : ,str$(APY!))
Drawtext 10,80,Add$(Physikalische Breite in Pixel : ,str$(PB!))
Drawtext 340,80,Add$(Physikalische Höhe in Pixel : ,str$(PH!))
Drawtext 10,100,Add$(Physikalische Offset X : ,str$(POX!))
Drawtext 340,100,Add$(Physikalische Offset Y : ,str$(POY!))
Drawtext 10,120,Add$(Aufloesung Breite (DPI) : ,str$(DPIX!))
Drawtext 340,120,Add$(Aufloesung Höhe (DPI) : ,str$(DPIY!))
Drawtext 10,140,Add$(Ausgabebreite in mm : ,str$(PBMM!))
Drawtext 340,140,Add$(Ausgabebreite in mm : ,str$(PHMM!))
UseFont Arial,18,0,1,0,1
DrawText 10,180,Aus diesen ermittelten Werten lassen sich die Druckränder
DrawText 10,200,für den Standard-Drucker errechnen
UseFont Courier New,15,0,0,0,0
DrawText 10,240,ADD$(Linker Rand in Pixel : ,STR$(POX!))
DrawText 340,240,ADD$(Rechter Rand in Pixel : ,STR$(SUB(SUB(PB!,APX!),POX!)))
DrawText 10,260,ADD$(Oberer Rand in Pixel : ,STR$(POY!))
DrawText 340,260,ADD$(Unterer Rand in Pixel : ,STR$(SUB(SUB(PH!,APY!),POY!)))
Decimals 1
Let PLR!=ROUND(MUL(DIV(PBMM!,APX!),POX!),1)
Let PRR!=ROUND(MUL(DIV(PBMM!,APX!),SUB(SUB(PB!,APX!),POX!)),1)
Let POR!=ROUND(MUL(DIV(PHMM!,APY!),POY!),1)
Let PUR!=ROUND(MUL(DIV(PHMM!,APY!),SUB(SUB(PH!,APY!),POY!)),1)
DrawText 10,280,ADD$(Linker Rand in mm : ,STR$(PLR!))
DrawText 340,280,ADD$(Rechter Rand in mm : ,STR$(PRR!))
DrawText 10,300,ADD$(Oberer Rand in mm : ,STR$(POR!))
DrawText 340,300,ADD$(Unterer Rand in mm : ,STR$(PUR!))
Decimals 0
DrawText 10,340,ADD$(Blattgrösse X in mm : ,STR$(ADD(ADD(PBMM!,PLR!),PRR!)))
DrawText 340,340,ADD$(Blattgrösse Y in mm : ,STR$(ADD(ADD(PHMM!,POR!),PUR!)))
Textcolor rgb(255,0,0),rgb(192,192,192)
UseFont Courier New,16,0,1,0,0
If GT(APX!,APY!)
Drawtext 10,40,Querformat
else
Drawtext 10,40,Hochformat
endif
Textcolor rgb(255,255,0),rgb(192,192,192)
UseFont Arial,14,0,1,0,0
Drawtext 10,360,BEACHTE : Die errechneten Werte hängen von der Auflösung und der Papiersorte bzw. Papiergrösse ab,
Drawtext 10,380,die in der Druckereinstellung vorgenommen wurde !
EndProc
SetTruecolor 1
cls rgb(192,192,192)
Textcolor rgb(0,0,0),rgb(192,192,192)
UseFont Arial,18,0,1,0,1
UseCursor 2
Drawtext 10,410,Ermittle Werte für den Standard-Drucker
GetPrinterDC
Werte_ermitteln
Rectangle 0,8-630,356
Ausgabe
UseFont Arial,18,0,1,0,1
Textcolor rgb(255,0,0),rgb(192,192,192)
Drawtext 10,410,Werte für den Standard-Drucker ermittelt
UseCursor 0
waitinput
@DeleteDC(PDC&)Printer-DC freigeben
end
Salve, iF |
|