Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Miten tulostuksen esikatselu?

Sivun loppuun

IT-Studio [22.12.2004 22:49:17]

#

Miten kannattais toteuttaa tulostuksen esikatselu VB6:ssa?
Siis tarkoituksena on tehdä onkinlainen tekstinkäsittelyohjelma.

sooda [22.12.2004 23:03:56]

#

Printterillehän voi printata tyyliin printer.print, printer.line, printer.pset ym. Teet vain pictureboxin johon printtaat printerin sijasta.

IT-Studio [22.12.2004 23:32:57]

#

Aha! kiitos! :)

Antti Laaksonen [22.12.2004 23:39:00]

#

Ja kuvan pienennys esikatseluikkunassa onnistuu PictureBoxin PaintPicture-metodilla tai WinAPIn StretchBlt-funktiolla.

IT-Studio [23.12.2004 20:25:47]

#

Juu, mutta saisinko pienen esimerkin kummastakin. :-) Tein tuota tunnin verran ja rupes hermostuttamaan, kun en tajunnu tuota! :-(
Lykkäs vain koko ajan erroria. :-D

Antti Laaksonen [25.12.2004 12:27:11]

#

Miten olet toteuttanut tulostuksen? Minkälainen koodi aiheutti virheen?

IT-Studio [25.12.2004 21:21:39]

#

Asia on niin, että minä en tarkalleen ymmärtäny mitä noilla printer.print, printer.line, printer.pset ym miten ne pitäis laittaa että se tulostais tuohon pictureboxiin jotakin. Niin asia todennäköisesti valkeais minulle, jos sais pienen esimerkki pätkän ja selostuksen. :-D

Blaze [25.12.2004 21:33:28]

#

Pictureboxilta löytyy kaikki nuo samat metodit, kuin Printer-oliolta, joten voit suoraan korvata tuon "Printer" pictureboxin nimellä.

Antti Laaksonen [26.12.2004 00:54:09]

#

Kaiketi kuitenkin tulostat tekstin Printer-olion avulla? Tai jos et, niin kerro, miten. :)

IT-Studio [26.12.2004 18:59:27]

#

Tässä on ongelmana minulla se, että minä en ole koskaan käyttäny noita Printer-oliolta, kun ei ole koskaan tarvinnu tulostaa. Elikkä jonkinlainen esimekki, että minä ymmärtäisin miten noita käytetään! :-)

Blaze [26.12.2004 21:13:30]

#

Dim i As Integer
For i = 1 to 50
  Printer.Print i & ":s rivi turhaa tekstiä"
Next i

IT-Studio [26.12.2004 23:05:12]

#

Nyt valkes toi asia miten ne laitetaan sinne, mutta miten tekstin kokoa ja fonttia voi muuttaa.

tuomas [26.12.2004 23:15:03]

#

Sellainen funktiolista avautuu siihen kun kirjoitat printer. (pistettä laitettaessa) josta näet kaikki printer olion funktiot.

Tässä nyt muutamia:

Printer.Font = "tahoma"
Printer.FontBold = True
Printer.FontItalic = False
Printer.FontSize = 10

Antti Laaksonen [26.12.2004 23:15:04]

#

Tähän tapaan:

Printer.FontName = "Arial"
Printer.FontSize = 24
Printer.FontItalic = True

Kun kirjoitat "printer.", avautuu luettelo, jossa näkyvät loput fonttiin liittyvät ominaisuudet.

muok: Tuli kyllä mahdollisimman samanlaiset viestit. :)

tuomas [26.12.2004 23:15:37]

#

kerkesimpäs ensin :D

IT-Studio [27.12.2004 00:38:07]

#

Ihan kuin olis sekunnilleen... :D
Nyt rupes lyyti kirjoittaan, mutta saako tuon PictureBoxin jotenkin heitettyä tuosta suoraan printterille.

sooda [27.12.2004 19:46:04]

#

Kokeile printer.paintpicture-hommelia. Paintpicturesta löytyy täältä haulla vaikka mitä, ja vb:n ohjeessakin on siitä hyvä selostus.

tuomas [27.12.2004 20:39:42]

#

No mutta tosi koodarihan tekee hitaan purkkaviritelmän ja lukee picturelootasta jokaisen pikselin väriarvot ja lähettää ne printterille :P
No ei vaan, kokeile etsiä vaikka tuolta jotakin http://www.planetsourcecode.com/vb/ , jollakulla on kummiskin ollut sama ongelma joskus.

IT-Studio [27.12.2004 21:36:58]

#

Sanokaa mikä tässä mättää! Alku toimii hyvin, mutta sit kun yrittää tulostaa, niin minulla paukauttaa vain error ikkunan eteen ja tulostin pinttaa yhden tyhjän paperin ulos.

Private Sub Command1_Click()
Picture1.Cls
Dim i As Integer
For i = 1 To 12
  Picture1.FontName = "Arial"
  Picture1.FontSize = 24
  Picture1.Print i & ":s rivi turhaa tekstiä"
  Picture1.CurrentY = 400 * i
  Picture1.CurrentX = 200 * i
Next i
End Sub

Private Sub Command2_Click()
  Printer.PaintPicture Picture1.Picture, 0, 0
End Sub

Blaze [27.12.2004 21:46:20]

#

Et viittis paljastaa, mitä siinä error-ikkunassa lukee?
Tuo minusta näyttäis kyllä ihan toimivalta.

IT-Studio [27.12.2004 22:06:59]

#

Sori!
Tällästä siinä on:

Run-time error '481':
Invalid picture

Antti Laaksonen [27.12.2004 22:20:16]

#

Muuta Picture1:n AutoRedraw-ominaisuudeksi True. Kirjoita vielä PaintPicture-metodissa Picture1.Picturen asemesta Picture1.Image. Sitten pitäisi toimia.

Kuvakehyksessä Picture-ominaisuus tarkoittaa tiedostosta ladattua kuvaa, Image taas sisältää jälkeenpäin piirretyn grafiikan. Virheilmoitus johtui siitä, että mitään kuvaa ei ollut ladattu. AutoRedrawin taas täytyy olla True, jotta piirretty grafiikka menee talteen kuvakehykseen.

IT-Studio [27.12.2004 22:38:05]

#

Nyt toimii, kuin rasvattu! :-D
Ja sit viel yks juttu! Miten saa piirettyy viivoja ja määriteltyy niitten paikat?:-)

Blaze [27.12.2004 22:46:12]

#

Line-metodilla.

Antti Laaksonen [27.12.2004 22:49:37]

#

Tämä opas kertoo grafiikkajutuista:
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=vbo_7

IT-Studio [27.12.2004 23:26:47]

#

Johan on näyttö täynä viivoja, palloja ja laatikoita.
Miten viivan paksuus määritellään?

Antti Laaksonen [27.12.2004 23:28:22]

#

DrawWidth-ominaisuuden avulla.

IT-Studio [28.12.2004 00:44:26]

#

Juu! Nyt on piirto asiat kasassa, mutta se pienennys ja suurennus juttu viellä. Miten sen sais tuossa toimimaan?

Blaze [28.12.2004 00:49:32]

#

PaintPicturelle voi antaa parametreina uuen koon ja VB venyttää tai kutistaa sen kuvan automaagisesti.

IT-Studio [28.12.2004 01:03:17]

#

Ei toimi! :-(

Blaze [28.12.2004 01:14:13]

#

Ai mikä ei toimi? En omista kristallipalloa.

IT-Studio [28.12.2004 01:24:03]

#

Eikun sori nyt en ajatellu tarpeeksi pitkälle, sotki yhen toisen metodin kanssa! Mutta silti minulle ei valennu, että miten se siihen perään määritellään.

Nyt on näin:

Picture1.PaintPicture

Niin, miten tuosta jatketaan?

Blaze [28.12.2004 01:34:22]

#

Vilkaseppa helpistä mitä parametreja tuolle voi antaa, niin eiköhän se aukene.

IT-Studio [28.12.2004 02:00:05]

#

Onko ees sinne päin?

Picture1.PaintPicture Picture1.Image, 2400, 480, 8000 * 3 / 4, 10000 * 3 / 4

Ei siis millään mee minulle jakeluun! :-)
Niin ja minulla ei ole koneella MSDN:ää ja tuolla helpissä se valittaa että asennase. Kuuluuko se MSDN tulla tuon ite ohjelman mukana?

Blaze [28.12.2004 02:09:30]

#

IT-Studio kirjoitti:

Niin ja minulla ei ole koneella MSDN:ää ja tuolla helpissä se valittaa että asennase. Kuuluuko se MSDN tulla tuon ite ohjelman mukana?

Juu. Pitäähän joka softassa nyt dokumentaatio tulla mukana.
Jos sitä nyt ei jostain syystä ole, niin sitä voi lukea myös vepissä: http://msdn.microsoft.com/library/en-us/vbcon98/html/vbstartpage.asp

IT-Studio kirjoitti:

Picture1.PaintPicture Picture1.Image, 2400, 480, 8000 * 3 / 4, 10000 * 3 / 4

Ihan oikealtahan tuo näyttäis.

IT-Studio [28.12.2004 19:20:44]

#

Mä en nyt ymmärrä! Ei toi pienennä sitä kokoa. Siis ei tapahdu mitään!

Blaze [28.12.2004 20:03:53]

#

Laaksonen puhu tuolla ylempänä AutoRedrawista, se näyttäis pitävän olla päällä (älä kysy miks, en tiedä :) sillä pictureboksilla, josta kopioidaan.

IT-Studio [28.12.2004 20:43:34]

#

AutoRedraw on päällä, mutta ei toimi. Onko mitään muuta keinoa muuttaa tuon kokoa?

Antti Laaksonen [28.12.2004 21:58:38]

#

Näköjään kuva, josta kopioidaan ja jonne kopioidaan, ei saa olla sama. Voit tehdä vaikka niin, että alkuperäinen kuva piirretään Picture1-kontrolliin. Tämä kuva ei ole käyttäjän nähtävillä, koska kontrollin Visible on False. Sitten on Picture2, jonka käyttäjä näkee. Siihen kuva kopioidaan halutulla suurennoksella tai pienennyksellä tähän tapaan:

' kopiointi puolet pienempänä
Picture2.PaintPicture Picture1.Image, 0, 0, Picture1.Width / 2, Picture1.Height / 2
' kopiointi puolet suurempana
Picture2.PaintPicture Picture1.Image, 0, 0, Picture1.Width * 2, Picture1.Height * 2

Piilossa olevan kuvakehyksen (Picture1) AutoRedrawin on oltava True, näkyvällä kuvakehyksellä (Picture2) ei ole väliä. Lisää AutoRedrawista: Jos AutoRedraw on True, kuvakehykseen piirrettävä grafiikka menee talteen myös muistiin. Silloin sen pystyy kopioimaan myöhemmin esim. PaintPicture-metodilla toiseen kuvakehykseen. Grafiikka ei myöskään katoa, jos jokin toinen ikkuna tulee väliaikaisesti oman ikkunan päälle. Jos AutoRedraw on False, kuvakehyksestä ei pysty kopioimaan ja kuvan päivityksestä pitää huolehtia itse Paint-tapahtumassa.

IT-Studio [28.12.2004 23:04:22]

#

Toimii muuten hyvin, mutta se Picture2:hen koko ei muutu mukana. Se Picture2 pysyy saman kokosena koko ajan, mutta sen sisällä oleva tavara muuttaa kokoaan. Vai olenko minä nyt taas pudonnu kärryiltä! :-)

Antti Laaksonen [28.12.2004 23:21:40]

#

Koon muutoksen saat tehtyä ihan vain näin ennen kopiointia:

Picture2.Width = Picture1.Width / 2
Picture2.Height = Picture1.Height / 2

Nämä esimerkit on tarkoitettu sovellettaviksi. :)

IT-Studio [29.12.2004 00:10:08]

#

Ai! :-D Mä en ollu varma pitikö se myös vaikuttaa siihen Picture2:hen kokoon, mutta kiitos! Niin viel yks juttu miten saa formin reunaan sen vierityspalkin.

Muok: Eikun mä löysinkin tuosta vierityspalkista juttua! :-)


Sivun alkuun

Vastaus

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

Tietoa sivustosta