Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6 BitBlt: canvaksen kopiointi printer-> picturebox

Sedai [28.06.2004 12:55:35]

#

Osaisiko joku sanoa, miksi seuraava lause ei toimi,
eli ei kopioi mitään.

result = BitBlt(Picture1.hdc, 0, 0, 200, 200, Printer.hdc, 0, 0, SRCCOPY)

Muilla kuin SRCCOPYLLA tuntuisi toimivan (esimerkiksi kun viimeinen parametri on BLACKNESS, mutta tuo nyt ei auta)

Tarkoitus on toisinsanoen tehdä eräänlainen print preview.
Kopiointi onnistuu kyllä suoraan picturebox.hdc:stä printer.hdc:lle, mutta ei toisinpäin. Miksi? :<

Antti Laaksonen [28.06.2004 13:29:56]

#

Jos kopiointi onnistuu toisinpäin, vakioiden määritykset varmaan ovat kunnossa. Yleensä BitBlt-funktioon liittyvissä ongelmissa kannattaa kokeilla PictureBoxin AutoRedraw-asetuksen muuttamista vastakkaiseksi. En ole myöskään aivan varma siitä, voiko tulostimelle lähetetyn kuvan kopioida takaisin. Pystyisitkö toteuttamaan esikatselun suoraan niin, että sitä ei tarvitse kopioida tulostimen kautta?

sooda [28.06.2004 13:40:26]

#

Koklaa tunkea Picture1.Refresh kopsimisen jälkeen.

Sedai [28.06.2004 14:02:33]

#

Joo autoredraw tosiaan auttaa yleensä, mutta ei tässä :)
Refresh ei auta myöskään. Kiitos yrityksestä thou.

Ongelma tuntuisi olevan siinä, että printterin ja pictureboxin hdc:t ovat jollakin tasolla yhteensopimattomia.

Ennen pictureboxista printterille (eli toisinpäin) kopioitiin ilmeisesti
1) create a compatible mem DC
2) select the picture control into the mem DC
3) BitBlt the memDC to Printer.hDC
4) unselect the Picture control from the mem DC
5) delete the mem DC

Tätä soveltamalla saattaisi ratketa ongelma, mutta vaikeaksi menee.

JoreSoft [29.06.2004 21:55:32]

#

Yritä kopioida picture1:n image:n sisältö pictureen ensin.

Picture1.picture = Picture1.image

Lue ensin printterin asetukset että kuva tulee oikeassa suhteessa. Elikkä scalewidth, scaleheight täytyy jotenkin muokata pritterin scaalauksen mukaan että kuvasta tulisi halutun kokoinen.
Jos niitä ei muuta, pahimmassa tapauksessa kuva tulostuu 1:1 elikkä esim 800*600 kuva tulostuu parin tuuman alueelle.

Vastaus

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

Tietoa sivustosta