Seite 1 von 1

Listicongadget drucken zum zweiten mit Vorschau

Verfasst: 26.03.2009 19:51
von hjbremer
Nach der ersten simplen Version hier eine etwas aufwendigere, mit Druckvorschau und Parameterwahl

Hinweis: Die x und y Werte sind nicht in mm sondern Pixel. zbr und zhh sind der Zoomfaktor für die Vergrößerung.

Vielleicht testet ihr das ja mal, ob es auch auf anderen Druckern funktioniert

zuerst die Include:

Code: Alles auswählen

Declare lvPrint0Event(event)
Declare lvPrint1Start(lvnr,parentwindownr,buttonfontid=0)
Declare lvPrint2Vorschau()
Declare lvPrint2VorschauImage()
Declare lvPrint3Leer()
Declare lvPrint4Fuellen()
Declare lvPrint5Print()
Declare lvPrint6LvHorzMitte()
Declare lvPrint9TextBreite(txt$,fontid,*size)

;XIncludeFile "\Bremer\PureBasic430_Pbi\DebugMacros.pbi"

;lvPrint2.pbi
;ListIconGadget ausdrucken mit Vorschau by HJBremer März 2009
;PB 4.x Windows XP

Structure lvprint

  vswinnr.i
  vsfontid.i
  vsspinxnr.i
  vsspinynr.i
  vsspinitemnr.i
  vsspinfbrnr.i
  vsspinfhhnr.i
  vsspinSeite.i
  vsseiteninfo.i
  vsframeprnab.i
  vstxtibr.i
  vstxtihh.i
  vsbutprn.i
  vsbutprnall.i
  vsbutMitte.i
  vsbutEnde.i
  vsbutfontid.i
  vsvon.i
  vsbis.i
  vsx.i
  vsy.i
  vsrows.i          ;gleich itempage
  vsfbr.i
  vsfhh.i
  
  vsimg.i           ;Vorschau Seitenimage
  vsignr.i          ;Imagegadget für Vorschau
  vslvimg.i         ;Vorschau LV Image = kleinere Version vom Original
  vsfaktor.i        ;um diesen faktor Vorschauwerte verkleinern
  
  prnhres.i
  prnvres.i
  prnoffx.i
  prnoffy.i
    
  parent.i
  lvnr.i
  lvid.i
  lvfont.i
  hdfont.i

  hdid.i
  cols.i
  
  hd.rect
  lv.rect
  lvbr.i
  lvhh.i
  hdhh.i
  
  itemhh.i
  itembr.w[0]      ;hiermit wird in itemxx gespeichert/gelesen
  itemxx.s{200}    ;Platz für 100 Spalten, bei Bedarf vergrößern
  itemtext$
  itempage.i
  itemcount.i
  
  imagenr.i
  pen1.i
  brush1.i
  hdcolor.i
  lvcolor.i
  neuimagebr.i
  neuimagehh.i
    
EndStructure

Procedure lvPrint0Event(event)
Shared *lvp.lvprint
If Not *lvp: ProcedureReturn event: EndIf

With *lvp

 If EventWindow() = \vswinnr
    
    Select event
        Case #PB_Event_Gadget 
             Select EventGadget() 
  
                Case \vsspinxnr
                     \vsx = GetGadgetState(\vsspinxnr)
                     lvPrint2VorschauImage()

                Case \vsspinynr
                     \vsy = GetGadgetState(\vsspinynr)
                     lvPrint2VorschauImage()
                  
                Case \vsspinitemnr
                     \vsrows = GetGadgetState(\vsspinitemnr)
                     lvPrint2VorschauImage()
                  
                Case \vsspinfbrnr
                     \vsfbr = GetGadgetState(\vsspinfbrnr)
                     lvPrint2VorschauImage()
                  
                Case \vsspinfhhnr
                     \vsfhh = GetGadgetState(\vsspinfhhnr)
                     lvPrint2VorschauImage()
                  
                Case \vsspinSeite
                     \vsvon = (GetGadgetState(\vsspinSeite)-1) * \itempage
                     lvPrint2VorschauImage()
                                
                Case \vsbutprn
                     lvPrint5Print()
                
                Case \vsbutprnall
                     \vsvon = (GetGadgetState(\vsspinSeite)-1) * \itempage 
                     Repeat                      
                      lvPrint3Leer()
                      lvPrint4Fuellen()
                      lvPrint5Print()
                      \vsvon + \itempage
                     Until \vsvon > \itemcount
                
                Case \vsbutMitte
                     lvPrint6LvHorzMitte()
                     lvPrint2VorschauImage()
                       
                Case \vsbutEnde
                     CloseWindow(\vswinnr)
                     DisableWindow(\parent, 0)
                    
             EndSelect   
    EndSelect  
    event = 0 

 EndIf
  
EndWith
ProcedureReturn event
EndProcedure

Procedure lvPrint1Start(lvnr,parentwindownr,buttonfontid=0)
Shared *lvp.lvprint
Static lastlvnr
Protected j

If Not *lvp Or lastlvnr <> lvnr
   *lvp.lvprint = AllocateMemory(SizeOf(lvprint))
EndIf

lastlvnr = lvnr

With *lvp

  \lvnr = lvnr
  \lvid = GadgetID(\lvnr) 
  \hdid = SendMessage_(\lvid,#LVM_GETHEADER,0,0)

  \lvfont = GetGadgetFont(\lvnr)
  \hdfont = SendMessage_(\hdid,#WM_GETFONT,0,0) 
  \parent = parentwindownr
  \vsbutfontid = buttonfontid
  If Not \vsbutfontid
     \vsbutfontID = GetGadgetFont(#PB_Default)
  EndIf

  \cols = SendMessage_(\hdid,#HDM_GETITEMCOUNT,0,0)  
  \itempage = SendMessage_(\lvid,#LVM_GETCOUNTPERPAGE,0,0)
  \itemcount = SendMessage_(\lvid,#LVM_GETITEMCOUNT,0,0)
  
  ;Höhe einer LVZeile
   If \itemcount        
      \lv\top = 0: \lv\left = #LVIR_LABEL 
      SendMessage_(\lvid, #LVM_GETSUBITEMRECT, 0, \lv.rect)
      \itemhh = \lv\bottom - \lv\top
   EndIf  
   
   ;wenn horizontale Scrollbar 
   If GetWindowLong_(\lvid,#GWL_STYLE) & #WS_HSCROLL 
    \itempage + 1  ;funktioniert so sicher, bis Fontsize 14
   EndIf           ;darüber ist Schrift für Header sowieso zu groß
   
  ;LVbreite incl. unsichtbare Cols mit letzter Col des Headers ermitteln
  SendMessage_(\hdid, #HDM_GETITEMRECT , \cols-1, \hd.rect)
  \lvbr = \hd\right 
  
  ;Headerhöhe
  \hdhh = \hd\bottom 
  
  ;LV Höhe incl. Header
  GetWindowRect_(\lvid, \lv.rect)
  OffsetRect_(\lv.rect, - \lv\left, - \lv\top)
  \lvhh = \lv\bottom
  
  ;Breite der einzelnen Spalten durch Abfrage des Headers
  For j = 0 To \cols - 1
    SendMessage_(\hdid, #HDM_GETITEMRECT ,j,\hd.rect) 
    \itembr[j] = \hd\right - \hd\left
  Next
  
  ;\pen1 = CreatePen_(#PS_SOLID,0,#Red)   
  ;\brush1 = CreateSolidBrush_($FEFEFE)

  \pen1 = GetStockObject_(#BLACK_PEN)
  \brush1 = GetStockObject_(#WHITE_BRUSH)
  \hdcolor = #Black
  \lvcolor = #Black
  
  \vsvon = 0
  If \vsx = 0: \vsx = 10: EndIf
  If \vsy = 0: \vsy = 10: EndIf
  If \vsfbr = 0: \vsfbr = 10: EndIf    ;von 60 auf 10 geändert 31.03.2009
  If \vsfhh = 0: \vsfhh = 10: EndIf
  If \vsrows = 0: \vsrows = \itempage: EndIf

EndWith
EndProcedure

Procedure lvPrint2Vorschau()
Shared *lvp.lvprint
If Not *lvp: ProcedureReturn 0: EndIf

Protected dc, hsize,vsize
Protected br, hh, brh, t.size, flags
Protected wbr,whh,hor,ver
Protected sp,sp1,sp2,sp3,sp4,sp5
Protected ze,ze1
Protected br1,t1br,t2br
Protected framehh.f, spinhh.f

With *lvp

DisableWindow(\parent, 1)  ;sehr wichtig !

If PrintRequester() ;oder DefaultPrinter()
                    
  dc = StartDrawing(PrinterOutput()) 
    \prnhres = GetDeviceCaps_(dc,#HORZRES)          ;:Debug \prnhres
    \prnvres = GetDeviceCaps_(dc,#VERTRES)          ;:Debug \prnvres
       Hsize = GetDeviceCaps_(dc,#HORZSIZE)         ;:Debug  hsize
       Vsize = GetDeviceCaps_(dc,#VERTSIZE)         ;:Debug  vsize
    \prnoffx = GetDeviceCaps_(dc,#PHYSICALOFFSETX)  ;:Debug \prnoffx
    \prnoffy = GetDeviceCaps_(dc,#PHYSICALOFFSETY)  ;:Debug \prnoffy
  StopDrawing() 
  
  ;Basiswerte für Abstände, Durschnitt für 10 Zeichen
  lvPrint9TextBreite("XXXWWWQyjÜ", \vsbutfontid, t.size)
  br = 1 + t\cx / 10: hh = 3 + t\cy: brh = br / 2
  
  ;Fenstergröße
  wbr = br * 63: whh = 600
  flags = #PB_Window_Invisible|#PB_Window_BorderLess|#WS_THICKFRAME|#PB_Window_WindowCentered
  \vswinnr = OpenWindow(-1,0,0,wbr,whh,"",flags, WindowID(\parent))
  
  ;Vorschauimage + Scrollarea
  \vsfaktor = 4  ;von 6 auf 4 geändert 31.03.2009
  hor = \prnhres / \vsfaktor
  ver = \prnvres / \vsfaktor

  ;falls bereits vorhanden = Image löschen
  If IsImage(\vsimg): FreeImage(\vsimg): EndIf
  \vsimg = CreateImage(-1,hor,ver)  ;Blatt Papier  

  ScrollAreaGadget(0, 0, 0, wbr, whh-8*hh, hor, ver, 5, #PB_ScrollArea_Single|#PB_ScrollArea_Center) 
    \vsignr = ImageGadget(-1,0,0,0,0,0)       
  CloseGadgetList()
  
  ;Buttons + Frames
  SetGadgetFont(#PB_Default, \vsbutfontid)
  
  lvPrint9TextBreite("Drucker Horz:  ",\vsbutfontid,t.size): t1br = t\cx
  lvPrint9TextBreite("000000",\vsbutfontid,t.size):          t2br = t\cx
  
  sp  = 5: ze = whh - 7.5*hh
  sp1 = sp + 5
  ze1 = ze 
  br1 = t1br + t2br + br
  
  Frame3DGadget(-1,sp,ze1,br1,1+hh*7,Str(hsize)+" * "+Str(vsize)+" mm"): ze1 = ze + hh 
  TextGadget(-1, sp1,      ze1, t1br, hh, "Drucker Horz:",#SS_ENDELLIPSIS) 
  TextGadget(-1, sp1+t1br, ze1, t2br, hh, Str(\prnhres),#SS_ENDELLIPSIS): ze1 + hh
  TextGadget(-1, sp1,      ze1, t1br, hh, "Drucker Vert:",#SS_ENDELLIPSIS)
  TextGadget(-1, sp1+t1br, ze1, t2br, hh, Str(\prnvres),#SS_ENDELLIPSIS): ze1 + hh
  TextGadget(-1, sp1,      ze1, t1br, hh, "LvImage Horz:",#SS_ENDELLIPSIS)
  TextGadget(-1, sp1+t1br, ze1, t2br, hh, Str(\lvbr),#SS_ENDELLIPSIS): ze1 + hh
  TextGadget(-1, sp1,      ze1, t1br, hh, "LvImage Vert:",#SS_ENDELLIPSIS)
  TextGadget(-1, sp1+t1br, ze1, t2br, hh, Str(\lvhh),#SS_ENDELLIPSIS): ze1 + hh
  TextGadget(-1, sp1,      ze1, t1br, hh, "Image Horz:",#SS_ENDELLIPSIS): ze1 + hh
  TextGadget(-1, sp1,      ze1, t1br, hh, "Image Vert:",#SS_ENDELLIPSIS): ze1 - hh

  \vstxtibr = TextGadget(-1, sp1+t1br, ze1, t2br, hh, Str(\neuimagebr),#SS_ENDELLIPSIS): ze1 + hh
  \vstxtihh = TextGadget(-1, sp1+t1br, ze1, t2br, hh, Str(\neuimagehh),#SS_ENDELLIPSIS)
  
  framehh.f = hh * 3: spinhh.f = hh * 1.5     
  sp1 = sp + br1 + 10
  br1 = br * 5
  ze1 = ze  
  sp2 = sp1 + br1 + 2*br
  sp3 = sp2 + br1 + 2*br
  sp4 = sp3 + br1 + 2*br
  sp5 = sp4 + br1 + 2*br
  sp6 = sp5 + br1 + 2*br
  Frame3DGadget(-1,sp1,ze1,br1+br,framehh,"x") 
  Frame3DGadget(-1,sp2,ze1,br1+br,framehh,"y") 
  Frame3DGadget(-1,sp3,ze1,br1+br,framehh,"rows")
  Frame3DGadget(-1,sp4,ze1,br1+br,framehh,"zbr")
  Frame3DGadget(-1,sp5,ze1,br1+br,framehh,"zhh")
  Frame3DGadget(-1,sp6,ze1,br1+br,framehh,"Horz")
  \vsspinxnr    = SpinGadget(-1,sp1+brh,ze1+hh,br1,spinhh, 0, \prnhres, #PB_Spin_ReadOnly|#PB_Spin_Numeric)
  \vsspinynr    = SpinGadget(-1,sp2+brh,ze1+hh,br1,spinhh, 0, \prnvres, #PB_Spin_ReadOnly|#PB_Spin_Numeric)
  \vsspinitemnr = SpinGadget(-1,sp3+brh,ze1+hh,br1,spinhh, 0, 500, #PB_Spin_ReadOnly|#PB_Spin_Numeric)
  \vsspinfbrnr  = SpinGadget(-1,sp4+brh,ze1+hh,br1,spinhh,10, 199, #PB_Spin_ReadOnly|#PB_Spin_Numeric)
  \vsspinfhhnr  = SpinGadget(-1,sp5+brh,ze1+hh,br1,spinhh,10, 199, #PB_Spin_ReadOnly|#PB_Spin_Numeric)
  \vsbutMitte = ButtonGadget(-1,sp6+brh,ze1+hh,br1,spinhh,"<-->")

  SetGadgetState(\vsspinxnr,\vsx)
  SetGadgetState(\vsspinynr,\vsy)
  SetGadgetState(\vsspinitemnr,\vsrows)
  SetGadgetState(\vsspinfbrnr,\vsfbr)
  SetGadgetState(\vsspinfhhnr,\vsfhh)
  
  br1 = br * 13
  ze1 = ze + framehh + hh
  \vsseiteninfo = Frame3DGadget(-1,sp1,ze1,br1,framehh,"Seite") 
  \vsspinSeite = SpinGadget(-1,sp1+brh,ze1+hh,br*5,spinhh, 1, 1, #PB_Spin_ReadOnly|#PB_Spin_Numeric)
  \vsbutprn  = ButtonGadget(-1,sp1+brh+br*6,ze1+hh,br*6,spinhh,"Print")
  SetGadgetState(\vsspinSeite,1)
  
  \vsframeprnab = Frame3DGadget(-1,sp3,ze1,br1,framehh,"ab Seite")
  \vsbutprnall = ButtonGadget(-1,sp3+br+brh,ze1+hh,br*10,spinhh,"Drucken")
  
  \vsbutEnde = ButtonGadget(-1,wbr-5-br*5,whh-5-spinhh,br*5,spinhh,"Ende")
  
  SetGadgetFont(#PB_Default, #PB_Default)
  
  HideWindow(\vswinnr,0)
  ; --------------------------------------
  
  lvPrint2VorschauImage()
  
EndIf   

EndWith
EndProcedure 

Procedure lvPrint2VorschauImage()
Shared *lvp.lvprint
If Not *lvp: ProcedureReturn 0: EndIf

Protected teiler, seiten, rest, seitenab
Protected x,y, fbr.f, fhh.f
Protected vsimgbr,vsimghh

With *lvp

  \itempage = GetGadgetState(\vsspinitemnr)  ;wenn itempage geändert wurde
  \lvhh = 1 + \hdhh + (\itemhh * \itempage)  ;ändert sich auch lvhh
  \vsbis = \vsvon + \itempage
  
  ;nur für Anzeige
  teiler = \itempage
  If \itempage = 0: teiler = 1: EndIf
  seiten = \itemcount / teiler
  rest = \itemcount % teiler
  If rest: seiten + 1: EndIf
  SetGadgetText(\vsseiteninfo,"Seite 1-"+Str(seiten))
  SetGadgetAttribute(\vsspinSeite, #PB_Spin_Maximum , seiten)
  seitenab = GetGadgetState(\vsspinSeite)
  SetGadgetText(\vsframeprnab,"ab Seite "+Str(seitenab))
  
  ;Image erstellen + füllen
  lvPrint3Leer()
  lvPrint4Fuellen()

  x = GetGadgetState(\vsspinxnr): y = GetGadgetState(\vsspinynr)

  ;fakto um auf Seitenbreite zu vergrößern/verkleinern
  fbr.f = \vsfbr / 10  ;10 weil im spingadget zoom
  fhh.f = \vsfhh / 10  ;um Faktor 10 größere Werte eingestellt werden.
  
  \neuimagebr = \lvbr * fbr: SetGadgetText(\vstxtibr,Str(\neuimagebr))
  \neuimagehh = \lvhh * fhh: SetGadgetText(\vstxtihh,Str(\neuimagehh))
  
  vsimgbr = \neuimagebr / \vsfaktor
  vsimghh = \neuimagehh / \vsfaktor
  
  ;falls bereits vorhanden = löschen
  If IsImage(\vslvimg): FreeImage(\vslvimg): EndIf
  
  \vslvimg = CopyImage(\imagenr, -1)       ;Kopie vom Originalimage
  ResizeImage(\vslvimg, vsimgbr, vsimghh)  ;Kopie resizen für Vorschau
  
  StartDrawing(ImageOutput(\vsimg)) 
      Box(0, 0, ImageWidth(\vsimg), ImageHeight(\vsimg), $D7F8F8)
      DrawImage(ImageID(\vslvimg), (x + (\prnoffx / 2)) / \vsfaktor , y  / \vsfaktor)
  StopDrawing() 
  
  SetGadgetState(\vsignr,ImageID(\vsimg))   

EndWith
EndProcedure 

Procedure lvPrint3Leer()
Shared *lvp.lvprint
If Not *lvp: ProcedureReturn 0: EndIf

Protected dc,j,k,oldpen,oldbrush

With *lvp
  
  If IsImage(\imagenr): FreeImage(\imagenr): EndIf
  \imagenr = CreateImage(-1, \lvbr, \lvhh)
  
  dc = StartDrawing(ImageOutput(\imagenr)) 
  
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(\hdfont)
      FrontColor(\hdcolor)
      
      ;wichtig für DrawText_() 
       SetTextAlign_(dc,#TA_TOP)
       
      ;Gesamtrahmen mit pen und brush malen
       oldPen = SelectObject_(dc, \pen1) 
       oldBrush = SelectObject_(dc, \brush1)
       Rectangle_(dc, 0, 0, \lvbr, \lvhh)

      ;Header malen
       For j = 0 To \cols - 1
           SendMessage_(\hdid, #HDM_GETITEMRECT, j, \hd.rect) 
           If j = \cols - 1
             DrawEdge_(dc,\hd,#BDR_RAISEDOUTER,#BF_BOTTOM|#BF_MONO)
           Else
             DrawEdge_(dc,\hd,#BDR_RAISEDOUTER,#BF_BOTTOMRIGHT|#BF_MONO)
           EndIf
           \itemtext$ = GetGadgetItemText(\lvnr, -1, j)
           ;Text positionieren und malen
           If j = 0
             \hd\right - 6: OffsetRect_(\hd,5,2)
           Else
             \hd\right - 5: OffsetRect_(\hd,4,2)
           EndIf
           DrawText_(dc,\itemtext$,-1,\hd,#DT_END_ELLIPSIS)
       Next       
       
      DrawingFont(\lvfont)

       ;leeres Lv malen 
       SetRect_(\lv,0,0,0,\hdhh)
       For j = 0 To \itempage - 1
         SetRect_(\lv,0,\lv\bottom,0,\lv\bottom + \itemhh)
         For k = 0 To \cols - 1
           \lv\left = \lv\right
           \lv\right + \itembr[k] 
           If k = \cols - 1
             DrawEdge_(dc,\lv,#BDR_RAISEDOUTER,#BF_BOTTOM)
           Else
             DrawEdge_(dc,\lv,#BDR_RAISEDOUTER,#BF_BOTTOMRIGHT)
           EndIf
         Next
       Next
       
       SelectObject_(dc,oldBrush) 
       SelectObject_(dc,oldPen) 
       DeleteObject_(\brush1) 
       DeleteObject_(\pen1)
  
  StopDrawing()
  
EndWith
EndProcedure

Procedure lvPrint4Fuellen()
Shared *lvp.lvprint
If Not *lvp: ProcedureReturn 0: EndIf

Protected dc,j,k,add

With *lvp
  
  If \vsvon < 0: \vsvon = 0: EndIf
  If \vsvon > \itemcount: \vsvon = \vsvon - \itempage: EndIf 
  
  \vsbis = \vsvon + \itempage
  If \vsbis > \itemcount: \vsbis = \itemcount: EndIf
  
  dc = StartDrawing(ImageOutput(\imagenr)) 
  
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(\lvfont)
      FrontColor(\lvcolor)
      
      ;wichtig für DrawText_() 
       SetTextAlign_(dc,#TA_TOP)

       SetRect_(\lv,0,0,0,\hdhh)
       For j = \vsvon To \vsbis
         SetRect_(\lv,0,\lv\bottom,0,\lv\bottom + \itemhh)
         For k = 0 To \cols - 1
           \lv\left = \lv\right
           \lv\right + \itembr[k] 
            ;Textitem malen
            \itemtext$ = GetGadgetItemText(\lvnr,j,k) 
            add = 3: If k = 0: add = 4: EndIf
            OffsetRect_(\lv,add,0): \lv\right - add
            DrawText_(dc,\itemtext$,-1,\lv,#DT_END_ELLIPSIS)          
            OffsetRect_(\lv,-add,0): \lv\right + add
         Next
       Next
  
  StopDrawing()
  
EndWith
EndProcedure

Procedure lvPrint5Print()
Shared *lvp.lvprint
If Not *lvp: ProcedureReturn 0: EndIf

Protected x,y, fbr.f, fhh.f

With *lvp
  
  x = GetGadgetState(\vsspinxnr): y = GetGadgetState(\vsspinynr)
  
  StartPrinting("Test")
      
      StartDrawing(PrinterOutput()) 
    
      fbr.f = \vsfbr / 10 
      fhh.f = \vsfhh / 10
      
      \neuimagebr = \lvbr * fbr      
            
      If \neuimagebr > \prnhres - x
         \neuimagebr = \prnhres - x
         fhh = (\neuimagebr / \lvbr)
      EndIf   
      
      \neuimagehh = \lvhh * fhh
      
      If \neuimagehh > \prnvres - y
         \neuimagehh = \prnvres - y
         fbr = \neuimagehh / \lvhh
         \neuimagebr = \lvbr * fbr
      EndIf   

      ResizeImage(\imagenr,\neuimagebr,\neuimagehh)
      DrawImage(ImageID(\imagenr),x,y)  
        
      StopDrawing() 
   
  StopPrinting()
 
EndWith
EndProcedure 

Procedure lvPrint6LvHorzMitte()
Shared *lvp.lvprint
If Not *lvp: ProcedureReturn 0: EndIf

Protected newx

With *lvp
  
  newx = ((\prnhres - \neuimagebr) / 2) - \prnoffx / 2
  SetGadgetState(\vsspinxnr, newx)
  
EndWith
EndProcedure 

Procedure lvPrint9TextBreite(txt$,fontid,*size.size)
Protected dc

  dc = GetWindowDC_(0)
  SelectObject_(dc,fontid)
  GetTextExtentPoint32_(dc,txt$,Len(txt$),*size.size)
  ReleaseDC_(0,dc)

EndProcedure

und hier die Demo:

Code: Alles auswählen

XIncludeFile "lvPrint2.pbi"

Procedure.s Zufallsdaten()

Dim x$(20)
Restore ZufDaten
For k = 1 To 20: Read.s x$(k): Next
text$ + x$(Random(4)+1) + #LF$
text$ + x$(Random(4)+6) + #LF$
text$ + x$(Random(4)+11) + ""
text$ + x$(Random(4)+16) + ""

ProcedureReturn text$

DataSection
ZufDaten:
Data.s "12345 ", "35793 ", "48265 ", "72561 ", "55127 "
Data.s "Wieda", "Bremen", "Kuhdorf", "Neustadt", "Bonn"
Data.s "Otto ", "Mike ", "Hans-Jürgen ", "Ulrike ", "Familie "
Data.s "Meier", "Bremer", "Müller", "Holzfäller", "Sappel"
EndDataSection       

EndProcedure

;=Demo================================================================

fontidArial = FontID(LoadFont(#PB_Any,"Arial",10))
fontidTimes = FontID(LoadFont(#PB_Any,"Times",16))
fontidCourier = FontID(LoadFont(#PB_Any,"Courier New",9))

winmain = OpenWindow(-1, 9, 99, 630, 500, "Listicongadget mit Vorschau") 
;CreateGadgetList(WindowID(winmain)) 

lvnr = ListIconGadget(-1, 10,10,400,350,"Lfdnr",50,#PB_ListIcon_GridLines)
lvid = GadgetID(lvnr)
hdid = SendMessage_(lvid, #LVM_GETHEADER, #Null, #Null)
       
       SetWindowTheme_(hdid, @null.w, @null.w)
       SetGadgetFont(lvnr,fontidArial)  
       SendMessage_(hdid, #WM_SETFONT, fontidTimes, 1)     
       
       AddGadgetColumn(lvnr, 1, "Sp 1 01234567890123456789", 140)
       AddGadgetColumn(lvnr, 2, "Sp 2", 140)
       AddGadgetColumn(lvnr, 3, "Sp 3", 130)
       HideGadget(lvnr,1)
       For j = 0 To 29
        text$ = Zufallsdaten()
        AddGadgetItem(lvnr, -1, Str(j)+#LF$+text$)
       Next
       HideGadget(lvnr,0)
       
  sp = 15
  ze = 380
b4nr = ButtonGadget(-1,sp + 300,ze,88,22,"Print")

Repeat 
event = WaitWindowEvent() 

event = lvPrint0Event(event)  ;Eventhandler für Vorschaufenster

  Select event
      Case #PB_Event_Gadget 
           Select EventGadget() 

              Case b4nr
                lvPrint1Start(lvnr,winmain,fontidCourier)
                lvPrint2Vorschau()
                
           EndSelect   
  EndSelect
Until event = #PB_Event_CloseWindow 

End