|

楼主 |
发表于 2016-3-10 03:51:56
|
显示全部楼层
从发我这个贴子到现在,经历了很多事情,换了好几份工作,忙忙碌碌,一直没理出头绪。现在先发一个任务,有擅长打印机编程的朋友先看看。
出于个人兴趣,钱不是很多,有愿意帮忙的,先谢过了。支付宝付款,完后再继续发新任务。
如果我发的贴子发错版块,烦请版主帮忙移一下,谢谢。
工程在附件中。
以下是内容:
我想打印listview内容,按顺序打印所有行,用手工指定的方式打印每一行的第一列、第二列、第三列等等,而不是所有列。
但下面的代码,打印出来的效果全都挤在一起,列与列之间没有空隙。再往下就不会写了。感谢各位大师不吝赐教。
注:没有打印机也可以开发,装一个TinyPDF(虚拟打印机)一样可以看出效果。
Dim i As Integer
Dim strText As String
For i = 1 To ListView1.ListItems.Count
strText = ListView1.ListItems(i).Text
strText = strText + ListView1.ListItems(i).SubItems(1)
strText = strText + ListView1.ListItems(i).SubItems(2)
strText = strText + ListView1.ListItems(i).SubItems(3)
Printer.Print strText
Next i
-
-
-
-
下面的代码是遍历Listview所有单元格并打印,打印效果是矩阵式,和listview显示效果一一对应,第二列直线对齐,不受第一列内容多少的影响。第三列亦然。
作为思路的参考。
Dim objCol As ColumnHeader
Dim ObjItem As ListItem
Dim lngX As Long
Dim lngX1 As Long
Dim lngTop As Long
Dim strText As String
On Error GoTo Error_Handler
Screen.MousePointer = vbHourglass
For Each objCol In ListView1.ColumnHeaders
lngX = lngX + objCol.Width
Next
Printer.CurrentY = lngTop
Printer.Font.Bold = True
Printer.DrawMode = vbCopyPen
For Each ObjItem In ListView1.ListItems
lngTop = lngTop + 255
lngX = 420
For Each objCol In ListView1.ColumnHeaders
If objCol.Index > 1 Then
strText = ObjItem.SubItems(objCol.Index - 1)
Else
strText = ObjItem.Text
End If
lngX1 = lngX + 1440
Printer.CurrentY = lngTop + 562
Select Case objCol.Alignment
Case ListColumnAlignmentConstants.lvwColumnCenter
Printer.CurrentX = lngX + (((objCol.Width * 15) - Printer.TextWidth(strText)) / 2)
Case ListColumnAlignmentConstants.lvwColumnLeft
Printer.CurrentX = lngX + (Screen.TwipsPerPixelX * 5)
Case ListColumnAlignmentConstants.lvwColumnRight
Printer.CurrentX = lngX + ((objCol.Width * 15) - Printer.TextWidth(strText)) - (Screen.TwipsPerPixelX * 5)
End Select
Printer.Print strText
lngX = lngX1
Next
Next |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|