Miten kannattais toteuttaa tulostuksen esikatselu VB6:ssa?
Siis tarkoituksena on tehdä onkinlainen tekstinkäsittelyohjelma.
Printterillehän voi printata tyyliin printer.print, printer.line, printer.pset ym. Teet vain pictureboxin johon printtaat printerin sijasta.
Aha! kiitos! :)
Ja kuvan pienennys esikatseluikkunassa onnistuu PictureBoxin PaintPicture-metodilla tai WinAPIn StretchBlt-funktiolla.
Juu, mutta saisinko pienen esimerkin kummastakin. :-) Tein tuota tunnin verran ja rupes hermostuttamaan, kun en tajunnu tuota! :-(
Lykkäs vain koko ajan erroria. :-D
Miten olet toteuttanut tulostuksen? Minkälainen koodi aiheutti virheen?
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
Pictureboxilta löytyy kaikki nuo samat metodit, kuin Printer-oliolta, joten voit suoraan korvata tuon "Printer" pictureboxin nimellä.
Kaiketi kuitenkin tulostat tekstin Printer-olion avulla? Tai jos et, niin kerro, miten. :)
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! :-)
Dim i As Integer For i = 1 to 50 Printer.Print i & ":s rivi turhaa tekstiä" Next i
Nyt valkes toi asia miten ne laitetaan sinne, mutta miten tekstin kokoa ja fonttia voi muuttaa.
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
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. :)
kerkesimpäs ensin :D
Ihan kuin olis sekunnilleen... :D
Nyt rupes lyyti kirjoittaan, mutta saako tuon PictureBoxin jotenkin heitettyä tuosta suoraan printterille.
Kokeile printer.paintpicture-hommelia. Paintpicturesta löytyy täältä haulla vaikka mitä, ja vb:n ohjeessakin on siitä hyvä selostus.
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.
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
Et viittis paljastaa, mitä siinä error-ikkunassa lukee?
Tuo minusta näyttäis kyllä ihan toimivalta.
Sori!
Tällästä siinä on:
Run-time error '481':
Invalid picture
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.
Nyt toimii, kuin rasvattu! :-D
Ja sit viel yks juttu! Miten saa piirettyy viivoja ja määriteltyy niitten paikat?:-)
Line-metodilla.
Tämä opas kertoo grafiikkajutuista:
https://www.ohjelmointiputka.net/oppaat/opas.
Johan on näyttö täynä viivoja, palloja ja laatikoita.
Miten viivan paksuus määritellään?
DrawWidth-ominaisuuden avulla.
Juu! Nyt on piirto asiat kasassa, mutta se pienennys ja suurennus juttu viellä. Miten sen sais tuossa toimimaan?
PaintPicturelle voi antaa parametreina uuen koon ja VB venyttää tai kutistaa sen kuvan automaagisesti.
Ei toimi! :-(
Ai mikä ei toimi? En omista kristallipalloa.
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?
Vilkaseppa helpistä mitä parametreja tuolle voi antaa, niin eiköhän se aukene.
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?
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.
Mä en nyt ymmärrä! Ei toi pienennä sitä kokoa. Siis ei tapahdu mitään!
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.
AutoRedraw on päällä, mutta ei toimi. Onko mitään muuta keinoa muuttaa tuon kokoa?
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.
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ä! :-)
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. :)
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! :-)
Aihe on jo aika vanha, joten et voi enää vastata siihen.