webForumDet fria alternativet

Skriva ut en listview & annat?

.NET

18 svar · 467 visningar · startad av medialabs

Medlem sedan mars 20023 686 inlägg
Frågan#1

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 :)

Medlem sedan juni 200314 inlägg
#2

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

Medlem sedan okt. 20023 030 inlägg
#3

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.

Medlem sedan mars 20023 686 inlägg
#4

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
Medlem sedan okt. 20023 030 inlägg
#5

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)
Medlem sedan mars 20023 686 inlägg
#6

Den klagar över

PrintListView(ListView1)

Run-time error '438':

Object doesn´t support this property or method

Medlem sedan okt. 20023 030 inlägg
#7

Va? Inte för mig, på vilken rad?

Medlem sedan mars 20023 686 inlägg
#8

När jag anropar skriva ut från en command knapp:

PrintListview (ListView1)

Medlem sedan okt. 20023 030 inlägg
#9

Ja men jag menar vilken rad i min funktion. Vilken rad blir gul när du klickar på Debug? :)

Medlem sedan mars 20023 686 inlägg
#10

Nexus86 skrev:

Ja men jag menar vilken rad i min funktion. Vilken rad blir gul när du klickar på Debug? :)

PrintListview (ListView1) :e

Medlem sedan okt. 20023 030 inlägg
#11

Ok. Hur ser din ListView ut? Har du några ColumnHeaders? Är den verkligen en Report? Har du några ListSubItems?

Medlem sedan mars 20023 686 inlägg
#12

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....

Medlem sedan okt. 20023 030 inlägg
#13

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?

Medlem sedan mars 20023 686 inlägg
#14

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.... :)

Medlem sedan okt. 20023 030 inlägg
#15

Såg det. Ta bort parenteserna runt ListView1 så fungerar det. :)

PrintListview ListView1
Medlem sedan mars 20023 686 inlägg
#16

Nexus86 skrev:

Såg det. Ta bort parenteserna runt ListView1 så fungerar det. :)

PrintListview ListView1

Ska testa om en liten stund. :)

Medlem sedan okt. 20023 030 inlägg
#17

Ok. Gör det. Vill själv veta hur bra funktionen funkar. :)

Medlem sedan mars 20023 686 inlägg
#18

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

Medlem sedan okt. 20023 030 inlägg
#19

' :e Man tackar!

267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)