Jag hittade denhär utskrifts-rutinen till en listview på forumet, postad av Andreas Hillqvist för några Man använder Tab(antal tecken) för att definiera vänsterkanten. I mitt fall är det current x som bestämmer positionen på raden. Fick fram Utskrift från listview
år sen. Den fungerar utmärkt, men jag kan inte hitta något sätt att få raka högerkanter i kolumnerna.
Jag får bara raka vänsterkanter. Man vill ju ha ental ovanför varann i sifferkolumner. Försökte med
att lägga olika antal blanksteg först i varje subitem men siffrorna har inte samma bredd som blanksteg. Hur brukar man göra?
//Tor Erik
Public Sub PrintListView(ListView As ListView, Optional LeftMarginal As Single, Optional TopMarginal As Single, Optional RightMarginal As Single, Optional BottomMarginal As Single)
Dim Index As Long
Dim LVWidth As Long
Dim LastHeader As Long
Dim PrinterWidth As Single
Dim PrinterHeight As Single
Dim ColumnLeft() As Single
Dim ListItem As ListItem
Dim ColumnHeader As ColumnHeader
LVWidth = ColumnWidth(ListView)
LastHeader = ListView.ColumnHeaders.Count - 1
PrinterWidth = Printer.ScaleWidth - LeftMarginal - RightMarginal
PrinterHeight = Printer.ScaleHeight - TopMarginal - BottomMarginal
'Calculate headers position
ReDim ColumnLeft(0 To ListView.ColumnHeaders.Count)
ColumnLeft(0) = Printer.ScaleLeft + LeftMarginal
For Each ColumnHeader In ListView.ColumnHeaders
Index = Index + 1
ColumnLeft(Index) = ColumnLeft(Index - 1) + (ColumnHeader.Width * PrinterWidth \ LVWidth)
Next
'Prints headers on first page
PrintHeaders ListView, TopMarginal, ColumnLeft
For Each ListItem In ListView.ListItems
'Prints headers
If Printer.CurrentY > Printer.ScaleHeight - BottomMarginal Then
Printer.NewPage
PrintHeaders ListView, TopMarginal, ColumnLeft
End If
'Prints lines on page
Printer.CurrentX = ColumnLeft(0)
Printer.Print ListItem.Text;
For Index = 1 To LastHeader
Printer.CurrentX = ColumnLeft(Index)
Printer.Print ListItem.SubItems(Index);
Next
Printer.Print 'New Line
Next
Printer.EndDoc
End Sub
Private Sub PrintHeaders(ListView As ListView, TopMarginal As Single, ColumnLeft() As Single)
Dim Index As Long
Dim ColumnHeader As ColumnHeader
Printer.FontBold = True
Printer.CurrentY = Printer.ScaleTop + TopMarginal
For Each ColumnHeader In ListView.ColumnHeaders
Printer.CurrentX = ColumnLeft(Index)
Printer.Print ColumnHeader.Text;
Index = Index + 1
Next
Printer.Print 'New Line
Printer.FontBold = False
End Sub
Private Function ColumnWidth(ListView As ListView)
Dim ColumnHeader As ColumnHeader
For Each ColumnHeader In ListView.ColumnHeaders
ColumnWidth = ColumnWidth + ColumnHeader.Width
Next
End Function
Sv: Utskrift från listview
sedan räknar man tecken i ordet för att placera dom rätt i höger justering.
Dvs Tab(antal tecken + hela området - antal aktuella tecken)
Kan se ut så här om det finn 4 tecken i ett område som börjar på Tab(50) och får innehålla 9 tecken
Print;Tab(50 + 9 - 4);"4,54"Sv: Utskrift från listview
att en siffra har bredden 90 med den teckenstorlek jag använder. Så nu
funkar det att få raka högerkanter på kolumnerna. //Tor Erik