Aktuelle Zeit: 18.10.2018 20:19

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: ListIcon ausdrucken
BeitragVerfasst: 13.06.2018 23:38 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Hier ein Nebenprodukt meines aktuellen Projekts.
Sicherlich nicht in den Top 10 meiner anderen Codes angesiedelt, aber zu schade, um es zu verstecken.

Ich hatte tatsächlich noch nie eine Druckfunktion bisher gebraucht, evtl. gibts ja auch andere, die einen Code-Schubser diesbezügl. brauchen.

kurzer Umriss:
Ein ListIconGadget wird in Tabellenform ausgedruckt, mit Seitenzahl und dynamischer Größenanpassung.
Nicht gedacht für ListIcons mit 20 Spalten und langen Texten, er würde das zwar dennoch auf die Breite eines Ausdrucks bekommen, aber die Schrift wäre wohl unleserlich klein.

Für meine Zwecke wars ausreichend, wer will, kann ja noch etwas dran rumbasteln, z.B. versch. Schriftarten für Header und Tabelleninhalt o.ä. einfügen.

Code:
;==>https://www.purebasic.fr/german/viewtopic.php?p=347448#p347448
Procedure PrintListIcon(ListIcon, PageName.s = "Page {NUM}", LineThickness = 2)
   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")
      OutputHeight = PrinterPageHeight()
      OutputWidth  = PrinterPageWidth()
      Count        = CountGadgetItems(ListIcon) - 1
      
      If StartVectorDrawing(PrinterVectorOutput(#PB_Unit_Pixel))
         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)
               EndIf
         EndSelect
      ForEver
      
   EndProcedure
   
   main()
CompilerEndIf

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Zuletzt geändert von HeX0R am 15.06.2018 16:03, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 14.06.2018 18:10 
Offline
Benutzeravatar

Registriert: 27.02.2006 22:30
Wohnort: Neumünster
:allright: schönes Beispiel mit Vectordrawing - Top :allright:

_________________
Purebasic 5.60 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 14.06.2018 18:32 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Sehr schön...

Leider bei macOS ein Bug mit NewPrinterPage...

Workaround
Code:
               NewPrinterPage()
               ;- Problem with macOS. Workaround recall ScaleCoordinates
               ScaleCoordinates(SizeFactor, SizeFactor)
               

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 14.06.2018 21:12 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Ist dieser Bug schon gemeldet?

Ich habe das mal oben eingebaut.

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 14.06.2018 21:18 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Ne, noch nicht gemeldet.

Habe kein einfache Beispiel zum melden...

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 14.06.2018 23:03 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Ich bin gerade etwas verwirrt...
Ich habe da noch (ist wohl bei Win 10 mit bei) Microsoft XPS Document Writer und Microsoft Print to PDF installiert.
Merkwürdigerweise passiert bei beiden Geräten, wenn ich die auswähle ... nichts?!
Kann das jemand bestätigen?

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 14.06.2018 23:17 
Offline

Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Also unter Win10 ist der PDF-Druck kein Problem.
Sieht gut aus.

_________________
Barcodes for PureBasic - http://micha122.bplaced.net/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 14.06.2018 23:42 
Offline
Benutzeravatar

Registriert: 10.09.2004 09:59
Ich habe nicht behauptet PDF Ausdrucke gehen nicht, ich habe gefragt, ob die o.g. Drucker bei irgendjemanden funktionieren.
Bei dir geht also der Microsoft Print to PDF oder hast Du irgendeinen anderen getestet?

_________________
Link tot?
Ändere h3x0r.ath.cx in hex0rs.coderbu.de und alles wird gut.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 15.06.2018 08:56 
Offline

Registriert: 21.01.2008 19:11
HeX0R hat geschrieben:
Ich habe nicht behauptet PDF Ausdrucke gehen nicht, ich habe gefragt, ob die o.g. Drucker bei irgendjemanden funktionieren.
Bei dir geht also der Microsoft Print to PDF oder hast Du irgendeinen anderen getestet?
Kurztest bei mir:
- PDFCreator funktioniert nicht, leeres Blatt
- FinePrint funktioniert, aber nur 3 Spalten
- PDFCreator über FinePrint funktioniert, aber nur 3 Spalten
- Microsoft XPS Document Writer funtioniert, alle Spalten
Win7x64 PB5.70LTSbeta1(x64)

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ListIcon ausdrucken
BeitragVerfasst: 15.06.2018 10:32 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Bei PDFcreater kommen bei VectorTextHeight und VectorTextWidth falsche werte zurück. (0.0)

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye