Mitt enkla förslag är att du gör en html-sida av listview'n och ber Internet Explorer att skriva ut den.
/dr Krupp
18 svar · 467 visningar · startad av medialabs
hej!
Nån som kan ge mig en adress till nån vbsida eller har lite kod att dela med sig av. Där man ser hur man gör för att skriva ut en listview.
Ska ha funktionen till mitt program system information :)
Mitt enkla förslag är att du gör en html-sida av listview'n och ber Internet Explorer att skriva ut den.
/dr Krupp
Eller att du lägger en exakt likadan listview i ett dolt fönster och kör DoldForm.PrintForm när du ska skriva ut.
Nexus86 skrev:
Eller att du lägger en exakt likadan listview i ett dolt fönster och kör DoldForm.PrintForm när du ska skriva ut.
Jag har löst det med att använda mig av detta:
''Dim liItem As ListItem.
Dim min As Variant
Dim Item As Variant
Dim liItem As ListItem
Dim liSubItem As ListSubItem
Dim strOutPut As String
Dim itm As Variant
Dim itm2 As Variant
''Loopa ut all information till en variabel.
For Each itm In ListView1.ListItems
strOutPut = ""
Set liItem = itm
strOutPut = strOutPut & liItem.Text
For Each itm2 In liItem.ListSubItems
Set liSubItem = itm2
strOutPut = strOutPut & " " & liSubItem.Text
Next
min = min & strOutPut & vbCrLf
Next
'Börja utskriften nu...
Printer.Print min
Printer.EndDoc
Så kan man också göra men jag tänkte mer på om man hade ikoner och grejer som man ville ha med. :)
Om du har din ListView som en ReportList, vilket du förmodligen har, får jag föreslå en (egentligen två) funktioner som jag nyss skrev som skriver ut lite finare än vad din gör? (no offence)
Private Sub PrintListview(cListView As ListView)
Dim liItm As ListItem
Dim liSubItm As ListSubItem
Dim coItm As ColumnHeader
Dim lColWidth() As Long
Dim lTotal As Long
Dim lLeft As Long
Dim lTop As Long
Dim i As Long
Dim sOutput As String
' Kolla bredden på kolumnerna
ReDim lColWidth(cListView.ColumnHeaders.Count) As Long
For Each coItm In cListView.ColumnHeaders
lColWidth(coItm.Index) = coItm.Width
lTotal = lTotal + coItm.Width
Next coItm
' Sätt skrivarens ScaleMode till twips
Printer.ScaleMode = vbTwips
' Loopa igenom värden och rita ut dem på rätt plats
For Each coItm In cListView.ColumnHeaders
If Printer.TextWidth(coItm.Text) > coItm.Width Then
sOutput = ShortenString(coItm.Text, coItm.Width - 50)
Else
sOutput = coItm.Text
End If
lLeft = 0
For i = 1 To coItm.Index - 1
lLeft = lLeft + lColWidth(i)
Next i
Printer.CurrentX = lLeft
Printer.CurrentY = 0
Printer.Print sOutput
Next coItm
Printer.Print String(200, Chr$(175))
For Each liItm In cListView.ListItems
If Printer.TextWidth(liItm.Text) > lColWidth(1) Then
sOutput = ShortenString(liItm.Text, lColWidth(1) - 50)
Else
sOutput = liItm.Text
End If
lTop = Printer.CurrentY
Printer.Print sOutput
For Each liSubItm In liItm.ListSubItems
If Printer.TextWidth(liSubItm.Text) > lColWidth(liSubItm.Index + 1) Then
sOutput = ShortenString(liSubItm.Text, lColWidth(liSubItm.Index + 1) - 50)
Else
sOutput = liSubItm.Text
End If
lLeft = 0
For i = 1 To liSubItm.Index
lLeft = lLeft + lColWidth(i)
Next i
Printer.CurrentX = lLeft
Printer.CurrentY = lTop
Printer.Print sOutput
Next liSubItm
Next liItm
Printer.EndDoc
End Sub
Private Function ShortenString(sText As String, lGoalWidth As Long) As String
Dim Text As String
Text = sText & "..."
Do Until Printer.TextWidth(Text) < lGoalWidth
Text = Mid$(Text, 1, Len(Text) - 4) & "..."
Loop
ShortenString = Text
End Function
För att skriva ut ListView1, skriv bara
PrintListView(ListView1)
Den klagar över
PrintListView(ListView1)
Run-time error '438':
Object doesn´t support this property or method
Va? Inte för mig, på vilken rad?
Ja men jag menar vilken rad i min funktion. Vilken rad blir gul när du klickar på Debug? :)
Nexus86 skrev:
Ja men jag menar vilken rad i min funktion. Vilken rad blir gul när du klickar på Debug? :)
PrintListview (ListView1) :e
Ok. Hur ser din ListView ut? Har du några ColumnHeaders? Är den verkligen en Report? Har du några ListSubItems?
Nexus86 skrev:
Ok. Hur ser din ListView ut? Har du några ColumnHeaders? Är den verkligen en Report? Har du några ListSubItems?
hmm, jag är i alla fall säker på att jag har ListSubItems,
Det var där jag testade att lägga in din skriv ut funktion....
Du hade ColumnHeaders ser jag och det är verkligen en Report. Frågan är bara varför det inte fungerar. :l
Har du något emot att låna ut din kod för studering?
Nexus86 skrev:
Du hade ColumnHeaders ser jag och det är verkligen en Report. Frågan är bara varför det inte fungerar. :l
Har du något emot att låna ut din kod för studering?
Du har fått ett PM nu.... :)
Nexus86 skrev:
Såg det. Ta bort parenteserna runt ListView1 så fungerar det. :)
PrintListview ListView1
Ska testa om en liten stund. :)
Ok. Gör det. Vill själv veta hur bra funktionen funkar. :)
Nexus86 skrev:
Ok. Gör det. Vill själv veta hur bra funktionen funkar. :)
Det var som självaste fan, Blev ju hur snygga utskrifter som helst. Jag tackar och bockar dig Nexus86 o store Vb gud... :e
' :e Man tackar!