Tarkoitus tulostaa C5 kokoon kirjekuori. Commondialogilla tulostin ja vaaka-asettelu, mutta en saa paperille mitään tai sitten vähän reunoille. Vasempaan ylänurkkaan tulisi logo joka on kokeilun vuoksi picture ja image boksissa, olen kokeillut kummallakin. Millään etäisyysmuutoksilla en saa paikkaa vaihtumaan ja sitä ihmettelenin, että mitne homma hoidetaan..?
Dim wid As Single
Dim hgt As Single
CommonDialog1.CancelError = True
On Error Resume Next
CommonDialog1.ShowPrinter
If Err.Number = 32755 Then
Exit Sub
End If
On Error GoTo 0
If CommonDialog1.Orientation = cdlLandscape Then
Printer.Orientation = cdlLandscape
End If
Printer.PaintPicture Picture1.Picture, _
1440, 1440
wid = ScaleX(Picture1.ScaleWidth, Picture1.ScaleMode, _
Printer.ScaleMode)
hgt = ScaleY(Picture1.ScaleHeight, _
Picture1.ScaleMode, Printer.ScaleMode)
Printer.EndDocEikös tuon 1440,1440 pitäisi olla vasen ylänurkka paperissa? Ei ole c5 tai a4 koossa ainakaan. Tässä koodissa ei ole osoitteen tulostusta mukana, kunhan saisi tuon logon oikeaan paikkaan ensin... En ole tehnyt mitään erikoista formia joka tulostaa vaan syöttämällä suoraan tulostimelle. Luulisi onnistuvan ilman erillisen formin tekoa johon nuo sijoittelee? Sillain tosin ainakin onnistuu...
Moikka Toitsu!
kokeile säätää oheisen mallin mukaan...
CommonDialog1.CancelError = True
On Error Resume Next
CommonDialog1.ShowPrinter
If Err <> 0 Then
Err.Clear
On Error GoTo 0
Exit Sub
End If
On Error Goto ErrorHandler
Printer.Orientation = _
CommonDialog1.Orientation
prn.ScaleMode = vbPixel
prn.CurrentX = 30 'esim.
prn.CurrentY = 30 'esim.
Printer.PaintPicture Picture1.Picture, _
Printer.CurrentX, Printer.CurrntY
Printer.CurrentX = 2500 'esim.
Printer.CurrentY = 1500 'esim.
For i As Integer = 1 to 3
Printer.Print( _
Me.Controls( _
"osrivi" & Cstr(i)).Text)
Printer.CurrentX = 2500
Printer.CurrentY = _
Printer.CurrentY + _
Printer.Font.Size * 2.5
Next
Printer.EndDoc
Exit Sub
ErrorHandler:
Msgbox(Error)
Err.Clear
On Error GoTo 0Kuva siirtyi hienosti oikealle paikalleen, mutta osoitetietojen tulostus ei tuota toivottua tulosta. Alla oleva koodi ei kirjoita mitään ja pelkkä printer.print määritettyyn kohtaan tekee kokonaan uuden sivun jonka alussa teksti on. Toki kokeilin siirtää kohtaa ettei teksti mene ulos paperilta. En tosin vieläkään haluaisi antaa periksi ja tehdä formia joka sitten kokonaisuudessaan tulostetaan...
Printer.CurrentX = 2500 'esim.
Printer.CurrentY = 1500 'esim.
For i As Integer = 1 to 3
Printer.Print( _
Me.Controls( _
Text1 & Cstr(i)).Text)
Printer.CurrentX = 2500
Printer.CurrentY = _
Printer.CurrentY + _
Printer.Font.Size * 2.5Moikka taas Toitsu!
sorry, jäi vaihtamatta toi prn. muotoon Printer. -- sitten toi osoiterivi jutska elikä oletetaan, että osoitetiedot koostuvat kolmen tekstiruutu-objektin (Text1, Text2 & Text3) teksteistä...
For i = 1 to 3
'sinun koodissasi...
Printer.Print(Me.Controls(Text1 & Cstr(i)).Text)
'eli jos Text1.Text on esim. "Matti Meikäläinen" ja i = 1...
'koska tekstiruutu-objektiin viitatessa VB palauttaa
'oletusarvoisesti tekstiruutu-objektin tekstisisällön
'niin koodiksi muodostuisi tässä tapauksessa...
'Printer.Print(Me.Controls("Matti Meikäläinen1").Text)
'josta on luonnollisesti seurauksena virhe...tässä oikea tapa...
For i = 1 to 3
Printer.Print( _
Me.Controls("Text" & Cstr(i)).Text)
'eli nyt jos i = 1 niin koodiksi muodostuu
'Printer.Print(Me.Controls("Text1").Text)
'...Aihe on jo aika vanha, joten et voi enää vastata siihen.