När man gör ett "hidden-formulär" för att använda sig av det som utskriftsformulär, hur får man det stort som ett A4-papper då? Får inte formulärets höjd till större än 11085 vilket är en bra bit mindre än ett A4 ark. En lättare och smidigare lösning är att använda printer-objektet. Man väljer x- och y-koordinat med Printer.CurrentX resp Printer.CurrentY. Sedan skriver man text med Printer.Print. Det går också att rita cirklar, linjer, punkter mm. Hej, nu lägger jag mej i det här ämnet! Jo du kan skriva ut bilder med printerobjektet Tror det smygit sig in en liten referenser till formuläret:form.printForm och A4-storlek
Ser fram emot en lösning på detta!!
Mvh ToveSv: form.printForm och A4-storlek
Exempel:
<code>
Private Sub Form_Click ()
Dim HWidth, HHeight, I, Msg ' Declare variables.
On Error GoTo ErrorHandler ' Set up error handler.
Msg = "This is printed on page"
For I = 1 To 2 ' Set up two iterations.
HWidth = Printer.TextWidth(Msg) / 2 ' Get half width.
HHeight = Printer.TextHeight(Msg) /2 ' Get half height.
Printer.CurrentX = Printer.ScaleWidth / 2 - HWidth
Printer.CurrentY = Printer.ScaleHeight / 2 - HHeight
Printer.Print Msg & Printer.Page & "." ' Print.
Printer.NewPage ' Send new page.
Next I
Printer.EndDoc ' Printing is finished.
Msg = "Two pages, each with a single, centered line of text, "
Msg = Msg & "have been sent to your printer."
MsgBox Msg ' Display message.
Exit Sub
ErrorHandler:
MsgBox "There was a problem printing to your printer."
Exit Sub
End Sub
</code>
Hälsningar IvarSv: form.printForm och A4-storlek
Jag har haft samma problem med att skriva ut hidden formulär och jag har också försökt med printer-objektet men då går de väl inte att skriva ut bilder? Jag vill skriva ut en bakgrundsbild och några textfält utplacerade på bilden, finns det något annat sätt att lösa det på?
//RAVESv: form.printForm och A4-storlek
Använd printer.paintpicure dinImage
Det är lite knöligt att använda men det går :-)
Tänk på att om du använder ett aggregat tex en Listview så måste du loopa igenom datat i den för att det sk skrivas ut
Jag brukar loopa igenom formuläret med koden
skickar exempelkod:
Private Sub printProvdel1()
Dim LI As ListItem
Dim rad As Integer
Dim kontrol As Control
For Each kontrol In frmprotokoll
If TypeOf kontrol Is Image Then
Printer.PaintPicture frmprotokoll.Image1, frmprotokoll.Image1.Left, frmprotokoll.Image1.Top
ElseIf TypeOf kontrol Is Label Then
Printer.FontSize = 14
Printer.CurrentX = kontrol.Left
Printer.CurrentY = kontrol.Top
Printer.Print kontrol.Caption
ElseIf TypeOf kontrol Is ListView Then
Printer.Print " "
Printer.Print " "
Printer.FontSize = 10
Printer.CurrentY = frmprotokoll.LV1.Top
For Each LI In frmprotokoll.LV1.ListItems
If LI.ListSubItems(1).Text = "" Or LI.ListSubItems(1).Text = "0" Then
Printer.CurrentX = frmprotokoll.LV1.Left
rad = Printer.CurrentY
Printer.Print LI.Text
Printer.CurrentY = rad
Printer.CurrentX = frmprotokoll.LV1.Left + 100
Printer.Print LI.ListSubItems(2).Text
Else
Printer.CurrentX = frmprotokoll.LV1.Left
rad = Printer.CurrentY
Printer.Print LI.Text
Printer.CurrentY = rad
Printer.CurrentX = frmprotokoll.LV1.Left + 100
Printer.Print LI.ListSubItems(1).Text
End If
Next LI
End If
Next kontrol
Printer.EndDoc
End SubSv: form.printForm och A4-storlek
<code>
If TypeOf kontrol Is Image Then
Printer.PaintPicture frmprotokoll.Image1, frmprotokoll.Image1.Left, frmprotokoll.Image1.Top
ElseIf TypeOf kontrol Is Label Then
</code>
Borde nog vara:
<code>
If TypeOf kontrol Is Image Then
Printer.PaintPicture kontrol.Picture, kontrol.Left, kontrol.Top
ElseIf TypeOf kontrol Is Label Then
</code>
Och för listvieviewn:
<code>
ElseIf TypeOf kontrol Is ListView Then
Printer.Print " "
Printer.Print " "
Printer.FontSize = 10
Printer.CurrentY = frmprotokoll.LV1.Top
For Each LI In frmprotokoll.LV1.ListItems
If LI.ListSubItems(1).Text = "" Or LI.ListSubItems(1).Text = "0" Then
Printer.CurrentX = frmprotokoll.LV1.Left
rad = Printer.CurrentY
Printer.Print LI.Text
Printer.CurrentY = rad
Printer.CurrentX = frmprotokoll.LV1.Left + 100
Printer.Print LI.ListSubItems(2).Text
Else
Printer.CurrentX = frmprotokoll.LV1.Left
rad = Printer.CurrentY
Printer.Print LI.Text
Printer.CurrentY = rad
Printer.CurrentX = frmprotokoll.LV1.Left + 100
Printer.Print LI.ListSubItems(1).Text
End If
Next LI
End If
</code>
Borde nog vara:
<code>
ElseIf TypeOf kontrol Is ListView Then
Printer.Print " "
Printer.Print " "
Printer.FontSize = 10
Printer.CurrentY = kontrol.Top
For Each LI In kontrol.ListItems
If LI.ListSubItems(1).Text = "" Or LI.ListSubItems(1).Text = "0" Then
Printer.CurrentX = kontrol.Left
rad = Printer.CurrentY
Printer.Print LI.Text
Printer.CurrentY = rad
Printer.CurrentX = kontrol.Left + 100
Printer.Print LI.ListSubItems(2).Text
Else
Printer.CurrentX = kontrol.Left
rad = Printer.CurrentY
Printer.Print LI.Text
Printer.CurrentY = rad
Printer.CurrentX = kontrol.Left + 100
Printer.Print LI.ListSubItems(1).Text
End If
Next LI
End If
</code>