Mikä olisi viisas ratkaisu formin tulostukseen? Olisko jollain heittää jotain testattua koodin pätkää malliksi tai linkkiä, missä olisi hyvät ohjeet?
Olen koettanut saada homman hoidettua tallentamalla näytön bittikartaksi -> tulostaa sen, mutta jälki jää epäselväksi ja muokkaamalla e.graphicsia menee tulostimen asetukset vain sekaisin?!?
Formissa (siis ikkunassa) on ainoastaan muuan tekstikenttä ja pari kuvaa, jotka pitäisi saada paperille. Kuvan kyllä osaan tulostaa ja tekstinkin - vain erikseen, mutta kun ne pitäisi saada samalle paperille.
Laitoin ratkaisun putkan vinkkeihin:
https://www.ohjelmointiputka.net/koodivinkit/
Kiitokset!
Tuo alkaa jo näyttämään paremmalta, vielä olisi pari kysymystä;
Mitenkäs pystyn määrittämään tulostusalueen? Tuollahan tulee nyt tulostettavaksi koko formi reunoineen ja haluaisin ainoastaan formin sisällön ilman reunoja sekä valikkoja. (itseasiassa minulla on tuolla tulostettavalla formilla välilehtiä, joista pitäisi yhden välilehden (Tabpage) sisältö ilman välilehtivalikkoa (Tabcontrol).
' Copy the form's client area BitBlt(targetDC, _ 0, 0, me.ClientRectangle.Width, me.ClientRectangle.Height, _ sourceDC, _ me.ClientRectangle.X, me.ClientRectangle.Y, _ SRCCOPY)
lisäski noita dispose juttuja tuli turhaan kahdesti, jälkimmäinen OK.
Kiitän ja kumarran =)
Sain välilehdet tulostettavaksi kun vaihdoin noihin me.ClientRectangle tilalle tabpage (laitoinkohan perään vielä tuon .ClientRectangle - en muista nyt tarkkaan mutta kuitenkin..)
Lisäksi muokkaisin kokoa lisäämällä marginaaleihin kaksi muuttujaa, jotta kohde mahtuu tulostusalueelle.
Mitä ja mihin kohtaan koodia pitäisi lisätä, että saisi tulostimen asetuksista automaattisesti vaakatulosteen päälle?
Aikaisemmissa VB:n versioissa tulosteen suuntaa muutetaan Printer.Orientation:lla. Kokeile katsoa jos sama tai vastaava löytyy myös DotNetin puolelta. Tuo suunnan vaihto kannattaa laittaa mahdollisimman alkuun, ennen kuin rupeat ohjaamaan mitään tavaraa tulostimelle, jolloin tulostusrajat tms. ilmoitetaan oikein, jos niitä tarvitsee tulostetta muotoillessaan.
'Nämä siis VB 6:lle Printer.Orientation = vbPRORPortrait 'pysty 'tai Printer.Orientation = vbPRORLandscape 'vaaka
Lisää tämä: MyDoc.DefaultPageSettings.Landscape = True
siis:
' If the user clicked OK, print the document. If Result = DialogResult.OK Then ' This method returns immediately, before the print job starts. ' The PrintPage event will fire asynchronously. MyDoc.DefaultPageSettings.Landscape = True MyDoc.Print() End If
Homma hoidossa - Kiitokset vielä!
Jaahans..
Tuli vielä muuan ongelma.
Edellä kuvatulla tavalla homma toimii ihan ok mustesuihku porttitulostimilla, mutta verkossa olevilla lasertulostimilla tulostaa vain 1/8 osan kuvasta ja herjaa paperikooksi väärää. A4 on siis tarkoituksena saada landscapena. Noissa verkkolasereissa landscape täytyy lisäksi laittaa erikseen tulostimen asetuksista eli "MyDoc.DefaultPageSettings.Landscape = True" ei toimi kuten pitäisi -> tulostin menee kokonaan jumiin. Landscapen asettamalla kirjoittimen asetuksista saa tulostettua sitten vain 1/8 osan alueesta.
Miten tuon paperikoon voi pakottaa A4:ksi ja onko tässä nyt jotain muuta mahdollista vikaa?
Joo, edellisen viestin saa unohtaa.
Vika oli yllättäin tulostimien ajureissa eli koodi on täysin toimiva!
Aihe on jo aika vanha, joten et voi enää vastata siihen.