bitte verzeiht mir den nachlässigen Stil und eventuelle Denkfehler, ist schon spät.
So funktioniert es auf meinem 18,4-Zoll-Bildschirm, den Wert musst du anpassen,
genauso ob Höhe oder Breite maßgebend sind bei anderer Ausrichtung von Dokument/Monitor etc.
Benutzt den Code von Nic oben (Danke!)
Code:
Procedure main()
Protected.i i,
iEvent,
iMaxPage
Protected AnzahlBildschirme=ExamineDesktops() ; JK Neu Anfang
Protected GroessterBildschirm=0
Protected k=1
Protected BildschirmHoehe=DesktopHeight(0)
While k<AnzahlBildschirme
If DesktopHeight(k)>BildschirmHoehe
GroessterBildschirm=k
EndIf
k+1
Wend
BildschirmHoehe=DesktopHeight(GroessterBildschirm)
Protected BildschirmBreite=DesktopWidth(GroessterBildschirm)
Protected Fenster=OpenWindow(#PB_Any, DesktopX(GroessterBildschirm), DesktopY(GroessterBildschirm),
BildschirmBreite, BildschirmHoehe, "VecVi",
#PB_Window_BorderLess) ; JK Neu Ende
Protected.d PPI = gimmePPI(BildschirmBreite, BildschirmHoehe, 18.4)
Protected pxW, pxH, pnW, pnH
pxW = Val(StringField(VecVi::#FORMAT_A4, 1, ",")) * PPI / 25.4
pxH = Val(StringField(VecVi::#FORMAT_A4, 2, ",")) * PPI / 25.4
Protected.d Ratio = pxW / pxH
Protected.d Zoom
pnH = BildschirmHoehe
pnW = pnH * Ratio
Zoom = pnW/pxW
ButtonGadget(1, 5, 5, 100, 25, "Drucken")
ButtonGadget(2, 110, 5, 50, 25, "<")
StringGadget(3, 165, 5, 100, 25, "", #PB_String_ReadOnly)
ButtonGadget(4, 270, 5, 50, 25, ">")
TextGadget(6, 350, 5, 30, 25, "Zoom:") ; JK Zoom wirkt sich auf die Größe des Ausdrucks aus.
ScrollBarGadget(5, 400, 5, 300, 20, 0, 200, 1)
SetGadgetState(5, Zoom * 100)
CanvasGadget(0, 0, 35, BildschirmBreite, BildschirmHoehe-50) ; JK Width, Height
createVecVi()
iMaxPage = VecVi::GetRealPageCount(*VecVi)
i = 1
SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
VecVi::SetOutputScale(*VecVi, Zoom, Zoom) ;JK Neu
VecVi::OutputCanvas(*VecVi, 0, i)
Repeat
iEvent = WaitWindowEvent()
Select iEvent
Case #PB_Event_Gadget
Select EventGadget()
Case 1
If Not PrintRequester()
Continue
EndIf
If StartPrinting("Test")
VecVi::OutputPrinter(*VecVi)
StopPrinting()
EndIf
Case 2
If i > 1
i - 1
SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
VecVi::OutputCanvas(*VecVi, 0, i)
EndIf
Case 4
If i < iMaxPage
i + 1
SetGadgetText(3, "Seite " + Str(i) + " von " + Str(iMaxPage))
VecVi::OutputCanvas(*VecVi, 0, i)
EndIf
Case 5
VecVi::SetOutputScale(*VecVi, GetGadgetState(5) / 100, GetGadgetState(5) / 100) ;JK Zoomfaktor
VecVi::OutputCanvas(*VecVi, 0, i)
EndSelect
EndSelect
Until iEvent = #PB_Event_CloseWindow
EndProcedure
main()
wenn du vor OutputPrinter() nochmal SetOutputScale(*VecVi, 1, 1) aufrufst, wird auch in Originalgröße
gedruckt.
Zum TOP2: dem Bild bei ImageCell() noch eigene Abmessungen mitgeben, sollte es erstmal beheben. Den
Rest muss ich mir erst in Ruhe anschauen.