Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Vb tulostus ongelma

Toitsu [23.01.2009 20:24:15]

#

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...

neau33 [25.01.2009 04:05:36]

#

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

Toitsu [26.01.2009 10:48:39]

#

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

neau33 [30.01.2009 21:26:10]

#

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)
  '...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta