ListIcon ausdrucken

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
HeX0R
Beiträge: 2960
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: ListIcon ausdrucken

Beitrag von HeX0R »

doctorized hat geschrieben:Querformat Papierausrichtung?
Das stellst Du doch im PrintRequester ein?
Oder verstehe ich Dich jetzt falsch?
doctorized
Beiträge: 4
Registriert: 04.08.2019 20:09

Re: ListIcon ausdrucken

Beitrag von doctorized »

Ich habe es nirgendwo hingelegt. Ich möchte es nur in den Code einfügen.
Benutzeravatar
HeX0R
Beiträge: 2960
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: ListIcon ausdrucken

Beitrag von HeX0R »

Das ist nicht nötig, wenn du im PrintRequester auf landscape stellst, wird der Code das automatisch anpassen.
Er nutzt die Größe, die der Requester zurückgibt und nutzt den ganzen Platz.
doctorized
Beiträge: 4
Registriert: 04.08.2019 20:09

Re: ListIcon ausdrucken

Beitrag von doctorized »

In meinem fall wird der benutzer niemals hochformatdruck benötigen, da die anzahl der spalten 31-34 beträgt. Wenn der benutzer das einstellen vergisst, ist das drucken nutzlos. Deshalb muss ich es irgendwie selbst einstellen.
Benutzeravatar
HeX0R
Beiträge: 2960
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: ListIcon ausdrucken

Beitrag von HeX0R »

o.k., das geht aber nicht mehr mit den PB eigenen Befehlen, da brauchst du API, um dem Windows PrintRequester die Ausrichtung vorzugeben, oder vermutlich eher den Windows eigenen Print Requester nutzen.

Hier habe ich was gefunden:
https://www.purebasic.fr/english/viewto ... 13&t=30951

Aber ich werde das nicht einbauen, der ganze Code kommt ohne API bisher aus (daher auch für alle OS nutzbar).
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: ListIcon ausdrucken

Beitrag von Sirius-2337 »

Statt im PrintRequester die Ausrichtung zu setzten könnte man doch auch die Ausgabe drehen.
Dank der VectorDrawing-Lib ist das ja recht einfach:

Code: Alles auswählen

;==>https://www.purebasic.fr/german/viewtopic.php?p=347448#p347448

Enumeration
  #PrintListIcon_Orientation_Auto
  #PrintListIcon_Orientation_Portrait
  #PrintListIcon_Orientation_LandScape
EndEnumeration

Procedure PrintListIcon(ListIcon, PageName.s = "Page {NUM}", LineThickness = 2, Orientation = #PrintListIcon_Orientation_Auto)
   Protected i, j, k, Count, Columns, NewLine, CurrentPage, LastLineReached
   Protected OutputHeight.d, OutputWidth.d, SizeFactor.d, PixPos.d
   Protected XSpaceBetweenTextAndTable.d, YSpaceBetweenTextAndTable.d, XSpaceBetweenEdgeAndTable.d, YSpaceBetweenEdgeAndTable.d
   Protected H.d, size.d, OverallSize.d
   Static DefaultFontID.i, BoldFontID.i
   
   If Not DefaultFontID
      DefaultFontID = FontID(LoadFont(#PB_Any, "Arial", 16))
      BoldFontID = FontID(LoadFont(#PB_Any, "Arial", 16, #PB_Font_Bold))
   EndIf
   
   If IsGadget(ListIcon) = 0 Or GadgetType(ListIcon) <> #PB_GadgetType_ListIcon
      ProcedureReturn
   EndIf
   Columns = GetGadgetAttribute(ListIcon, #PB_ListIcon_ColumnCount)
   
   Dim Widths.d(Columns)
   
   If PrintRequester() And StartPrinting("ParameterList")
      
      If Orientation = #PrintListIcon_Orientation_Auto Or
      (Orientation = #PrintListIcon_Orientation_LandScape And PrinterPageWidth() > PrinterPageHeight()) Or
      (Orientation = #PrintListIcon_Orientation_Portrait  And PrinterPageWidth() < PrinterPageHeight())
         OutputHeight = PrinterPageHeight()
         OutputWidth  = PrinterPageWidth()
         Orientation  = #PrintListIcon_Orientation_Auto
      Else
         OutputWidth  = PrinterPageHeight()
         OutputHeight = PrinterPageWidth()
      EndIf
      
      Count = CountGadgetItems(ListIcon) - 1
      
      If StartVectorDrawing(PrinterVectorOutput(#PB_Unit_Pixel))
         
         If Orientation <> #PrintListIcon_Orientation_Auto
           RotateCoordinates(0, 0, 270)
           TranslateCoordinates(-PrinterPageHeight(), 0)
         EndIf
         
         VectorFont(DefaultFontID)
         H                         = VectorTextHeight("P°²gT_")
         YSpaceBetweenTextAndTable = H / 4                ;<-- spacing between table line and text on top and bottom, 25% of max text height
         XSpaceBetweenTextAndTable = VectorTextWidth(" ") ;<-- spacing between table line and text left and right, one space here, add more if needed
         YSpaceBetweenEdgeAndTable = OutputHeight / 20       ;<-- spacing of 1/20 of complete width will be used left and right of the table
         XSpaceBetweenEdgeAndTable = OutputWidth / 20       ;<-- spacing of 1/20 of complete height will be used on top and bottom of the table
                                                                                  ;find max column widths
         For j = 0 To Columns - 1
            Widths(j) = VectorTextWidth(GetGadgetItemText(ListIcon, -1, j))
         Next j
         For i = 0 To Count
            For j = 0 To Columns - 1
               size = VectorTextWidth(GetGadgetItemText(ListIcon, i, j))
               If size > Widths(j)
                  Widths(j) = size
               EndIf
            Next j
         Next i
         ;Add some more space for each column, in front and behind the text
         size        = 0
         For j = 0 To Columns - 1
            Widths(j) + 2 * XSpaceBetweenTextAndTable
            size + Widths(j)
         Next j
         OverallSize               = size
         size + (Columns - 1) * XSpaceBetweenTextAndTable + XSpaceBetweenEdgeAndTable * 2
         SizeFactor                = OutputWidth / size
         OutputWidth               = OutputWidth / SizeFactor
         OutputHeight              = OutputHeight / SizeFactor
         NewLine                   = #True
         ScaleCoordinates(SizeFactor, SizeFactor)
         
         H + YSpaceBetweenTextAndTable * 2
         For i = 0 To Count
            If NewLine
               ;print Header
               PixPos = YSpaceBetweenEdgeAndTable
               VectorFont(BoldFontID)
               For j = 0 To Columns - 1
                  size = 0
                  For k = 0 To j - 1
                     size + Widths(k)
                  Next k
                  AddPathBox(XSpaceBetweenEdgeAndTable + size, PixPos, Widths(j), H)
                  MovePathCursor(XSpaceBetweenEdgeAndTable + XSpaceBetweenTextAndTable + size, PixPos + YSpaceBetweenTextAndTable)
                  DrawVectorText(GetGadgetItemText(ListIcon, -1, j))
               Next j
               StrokePath(LineThickness)
               NewLine = #False
               PixPos + H
            EndIf
            
            VectorFont(DefaultFontID)
            For j = 0 To Columns - 1
               size = 0
               For k = 0 To j - 1
                  size + Widths(k)
               Next k
               AddPathBox(XSpaceBetweenEdgeAndTable + size, PixPos, Widths(j), H)
               MovePathCursor(XSpaceBetweenEdgeAndTable + XSpaceBetweenTextAndTable + size, PixPos + YSpaceBetweenTextAndTable)
               DrawVectorText(GetGadgetItemText(ListIcon, i, j))
            Next j
            StrokePath(LineThickness)
            PixPos + H
            If PixPos + 4 * H > OutputHeight
               CurrentPage + 1
               MovePathCursor(XSpaceBetweenEdgeAndTable + OverallSize - VectorTextWidth(ReplaceString(PageName, "{NUM}", Str(CurrentPage))), OutputHeight - 2 * H)
               DrawVectorText(ReplaceString(PageName, "{NUM}", Str(CurrentPage)))
               NewPrinterPage()
               CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
                  ScaleCoordinates(SizeFactor, SizeFactor)
               CompilerEndIf
               NewLine = #True
               PixPos = 0
               If i = Count
                  LastLineReached = #True
               EndIf
            EndIf
            
         Next i
         If LastLineReached = 0
            CurrentPage + 1
            MovePathCursor(XSpaceBetweenEdgeAndTable + OverallSize - VectorTextWidth(ReplaceString(PageName, "{NUM}", Str(CurrentPage))), OutputHeight - 2 * H)
            DrawVectorText(ReplaceString(PageName, "{NUM}", Str(CurrentPage)))
         EndIf
         
         StopVectorDrawing()
      EndIf
      StopPrinting()
   EndIf
   
EndProcedure


CompilerIf #PB_Compiler_IsMainFile
   Procedure main()
      Protected i, j, Columns, Items, TextSize, a$
      
      OpenWindow(0, 0, 0, 640, 480, "ListIcon Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
      ListIconGadget(0, 5, 5, 630, 430, "Column 1", 200)
      ButtonGadget(1, 270, 440, 100, 22, "Print")
      
      Columns = Random(6, 3)
      Items   = 100
      For i = 1 To Columns - 1
         AddGadgetColumn(0, i, "Column " + Str(i + 1), 200)
      Next i
      For i = 1 To Items
         a$ = ""
         For j = 0 To Columns - 1
            TextSize = Random(40, 5)
            If j > 0
               a$ + #LF$
            EndIf
            a$ + Left("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam", TextSize)
         Next j
         AddGadgetItem(0, -1, a$)
      Next i
      
      Repeat
         Select WaitWindowEvent()
            Case #PB_Event_CloseWindow
               Break
            Case #PB_Event_Gadget
               If EventGadget() = 1
                  PrintListIcon(0, "Page {NUM}", 2, #PrintListIcon_Orientation_LandScape)
               EndIf
         EndSelect
      ForEver
      
   EndProcedure
   
   main()
CompilerEndIf
Hier habe ich einen weiteren Parameter eingebaut um immer in der gewünschten Ausrichtung zu drucken.
doctorized
Beiträge: 4
Registriert: 04.08.2019 20:09

Re: ListIcon ausdrucken

Beitrag von doctorized »

Danke! Danke! Danke!
Benutzeravatar
HeX0R
Beiträge: 2960
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: ListIcon ausdrucken

Beitrag von HeX0R »

O. K. da hatte ich offensichtlich nen Knoten im Kopf :lol:
Antworten