Listicongadget drucken zum zweiten mit Vorschau
Verfasst: 26.03.2009 19:51
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:
und hier die Demo:
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
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