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.EndDoc
Eikö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 0
Kuva 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.5
Moikka 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.