Pitäisi tulostaa A4 -tarra-arkille VB6:lla printer.print -menetelmällä suoraan koodista. Oletusasetuksilla tulostin luulee paperin olevan tavallinen, 80g paperi ja tulostaa sen nopeasti. Paperi ei ehdi lämmetä eikä jälki tahdo pysyä kiinni paperissa, myös suttaa. Wordissa ja muissa pystyy valitsemaan paperin laaduksi tarran, paksun, erittäin paksun jne., jolloin tulostusnopeus on paljon hitaampi ja toimivampi.
Miten printer.print -menetelmällä tulostimen saa käsittämään että kyseessä on tarra-arkki? Normi HP lasertulostin, LaserJet 500 color.
Kysyypi 20 vuotta vb-koodausta tehnyt, eikä aikaisemmin tällaiseen ole ollut tarvetta, mutta nyt on :)
Määrität tulostimen asetuksista että lokerossa X on tarroja ja valitset VB6:n priter-objektista että käytetään ko. lokeroa.
Tai sitten teet tuon haluamasi määrityksen WinAPIlla. Näkisin että tämä jälkimmäinen olisi turhaa hienostelua, kun kuitenkin varmaan lähinnä omaan käyttöön on tulossa jos VB6:lla teet.
Kiitos, niinpäs tietenkin. Olen asettanut tulostimen asetuksissa tarran, mutta en ole ajatellut tuota lokeroa. Kokeilen heti aamulla.
Tavoitteeni olisi kuitenkin saada tulostin ymmärtämään suoraan ohjelmasta käsin käyttäjän tarve, ettei joka kerta tarvitsisi käydä erikseen tulostimen asetuksia availemassa ja tähän tuo WinAPI olisi varmaan paras. Onko siihen heittää koodinpätkää?
Lokeron valinta ei tuonut apua. Tulostimen asetus ei vain "jää mieleen", kun tulee printer.doc, niin annetut asetukset ovat unohtuneet.
Apit kahlasin kaikki läpi, ei löytynyt paperin laatuun viittaavaa.
Varmaan tulostimelle voi lähettää suoraan konekieltä, hexaa tms. mutta mulle täysin vierasta. Harmi, jos jää selvittämättä :(
VB6 Printer Objektin PaperBin ominaisuus määrittää lokeron ja PrintQuality ominaisuus määrittää tulostuslaadun.
Printer Objektin ominaisuudet ja metodit Printer Objektin vakiot
PrintQuality määrittää tulostuslaadun / tarkkuuden (dpi), mutta ei ota kantaa siihen onko paperi 80g vai painavampaa tai tarraa. Paistotelan lämpöä ja paperin nopeutta pitäisi päästä säätämään jotta muste tarttuisi paremmin paperiin. Tässä ongelma, jolle ei näytä löytyvän ratkaisua???
juhar70 kirjoitti:
Tässä ongelma, jolle ei näytä löytyvän ratkaisua???
No mitäs tähän nyt voisi sanoa. Yksinkertiaset ratkaisut on jo kerrottu ja ohjelmallinen ratkaisukin onnistuu jos jaksaa nähdä vaivaa.
Ainakin itselläni tulostinasetuksista tehty tarra-asetus säilyy VB6:n tulosteissa. Tosin VB6 kehitysympäristö tai käännetty ohjelma täytyy ehkä käynnistää uudelleen, että oletusasetukset ovat voimassa. (Eli kun ohjelma käynnistetään, niin senhektiset tulostusasetukset saattavat pysyä voimassa vaikka oletusasetuksia Windowsissa muutettaisiinkin)
Voit myös käyttää commondialogin print-dialogia VB6:stä käsin, jolloin voit ohjelmassa määritellä tulostusasetukset.
Kolmas ratkaisu on tietenkin tehdä mediatyypin valinta ohjelmallisesti. VB6:ssa se ei ole yhtä helppoa kuin modernimmissa kielissä. VB6:n tuki on päättynyt 31.3.2005 joten en hirveästi näe järkeä panostaa sillä koodattujen ohjelmien jatkokehittämiseen. Ennemmin kannattaa portata ohjelmat nykyaikaan.
Jos kuitenkin et jaksa itse lukea API-dokumentaatioita ja implementoida tuota, niin tokihan voit ostaa sen palveluna. Itse jos lähtisin tuollaista tekemään niin työmääräarvio olisi 3 tuntia. (360 € + alv) Eli siis VB6-ympäristön kaivaminen naftaliinista ja MS:n dokumentaation lukeminen sekä niiden pohjalta implementointi. Halvemmalla voit päästä käyttämällä netin alihankintapalveluita ja lupaamalla vaikka 50$ jollekin joka tekee sinulle tuollaisen. Eiköhän joku matalamman kustannustason elävä sellaisen innolla väsää tuohon hintaan.
Commondialogissa on kaikki olelliset osat tulostimen hallintaan, vain paperilaatu -valinta puuttuu.
Apit on kahlattu läpi, eikä sieltäkään ratkaisua löytynyt.
Googlettamalla sama kysymys on esitetty ennenkin eikä kunnon vastausta ole tullut vielä vastaan.
Mielelläni maksan vaikka 100 euroa, mutta en ole koskaan aikaisemmin tarvinnut alihankintapalveluita, joten ei tietoa missä tällaista on tarjolla?
VB6 on edelleen käypä alusta ohjelmien tekemiseen, toimii hyvin Win 8.1 ja kaikissa sitä edeltäneissä käyttiksissä. Jos on 200-300 000 koodiriviä ja useita kolmannen osapuolen tekemiä moduuleita, ei näiden siirtäminen uudempiin kehitystyökaluihin ole järkevää saavutettuun hyötyyn nähden. Vb6:lla mennään niin pitkälle kuin sillä pääsee ;-)
juhar70 kirjoitti:
Commondialogissa on kaikki olelliset osat tulostimen hallintaan, vain paperilaatu -valinta puuttuu.
Itse pääsen kyllä ihan CommonDialog.ShowPrinter -dialogista valitsemaan printterin ja klikkaamaan Preferences ja sieltä löytyy paperityypin valinta mikäli kirjoittimen ajuri sellaista tarjoaa. Mikäli kirjoittimen ajuri ei mahdollista paperityypin valintaa lainkaan, niin silloin sitä ei tietenkään voi ohjelmallisestikaan valita. (Paitsi jos kirjoitinvalmistaja on jostain oudosta syystä toteuttanut sen ajuriin mutta jättänyt sen pois graafisesta liittymästä)
ShowPrinter on toki tiedossa ja juuri ajoin sitä.
Vaikka sieltä valitsee mitä asetuksia hyvänsä, Printer.print ei vaan muista niitä. Ihan kuin Printer ei olisi sama kuin ShowPrinter:ssä valittu tulostin.
Pitäishän sen olla sama, kun kyseessä on oletustulostin.
Lisäksi asetan Printerin oikeaksi:
Dim XG as printer For Each XG In Printers If InStr(XG.DeviceName, Trim(Data1.Recordset("Tulostin"))) > 0 Then Set Printer = XG Exit For End If Next
Mutta ei vaan tartu?
Mod. lisäsi kooditagit!
Tuossa koodissahan vaihdat printeriä (Set Printer = XG)
Sun pitää näyttää se dialogi vasta tuon koodin jälkeen.
Kokeilin molemmin tavoin, ei wörkkinyt.
Yhden koodin löysin aikaisemmista kätköistä:
cmDialog1.ShowPrinter If Err = 0 Then RTB.SelPrint cmDialog1.hDC End If
Tuossa RTB on RichTextBox.
Tällä tarra-asetus pysyi voimassa.
Toisin sanoen, printerkin pitäisi jotenkin saada tulostumaan tuon .hdc:n läpi?
Tai sitten kirjoittaa tarvittavat tuohon RTB -olioon. Sekin onnistuu, mutta joka tapauksessa kirjoitinta pitää aina käskeä tiedostamaan että tarra tulossa :)
Mukavampi olisi jos sen saisi ohjelmallisesti aikaan.
Kaivoin sit VB6 -koneen naftaliinista ja testasin, niin tuon printdialogin käyttö ei toiminut, ei vaikka laitoin defaultprinter=True kuten dokumentaatiossa neuvottiin
MSDN kirjoitti:
When PrinterDefault is True, you can write code to print directly to the Visual Basic Printer object. Otherwise, you must use the graphic device interface (GDI) calls to print to the printer specified by the control's hDC property.
Mutta jos olin kirjoittimen oletusasetuksista valinnut, että käytetään tarraa ja tulostin ihan vaan Printer.Print "Testi": Printer.EndDoc, niin tulostimeni kyllä sen tiedon hienosti sai (tulostimen näytölle tuli että "aseta A4 Tarra lokeroon 1 ja paina jatka")
Kokeilin tuota mitä sanoit, eli tulostimen omista asetuksista tarraksi ja hyvin toimi, paperi kulki hitaammin, kuten pitikin. Mutta asetuksen vaihtaminen takaisin normaalipaperille tai tarralle on työläs, pitää mennä tulostimen omiin asetuksiin "Laitteet ja tulostimet" kautta, sillä vb:n commondialog ei asetuksia jätä päälle.
Melkoisen kinkkinen homma. Väliaikaisesti voi toki muuttaa asetuksia tulostimen omista asetuksista, mutta kyllä tavoite on saada toimimaan se ohjelmallisesti.
Kokeilin myös saada tekstit viivakoodeineen RichTextBoxiin, mutta ongelmaksi tulee kirjainten asettelu siten, että ne asettuvat tarra-arkin tarroille sopivasti kun tarroja on esim 3 x 12 kappaletta. Printer.currentX ja -Y komennoilla kohdat on helppo määrittää, mutta samaa ei voi tehdä RichTextBoxissa.
Onnistuisiko purkkaratkaisuksi, että tekee toisen tulostimen asennuksen ja laittaa siihen oletukseksi paperinlaaduksi tarrat?
(Windowsista en tiedä, mutta Linukkapuolella toimineen).
Toinen purkkaratkaisu on vaihtaa ohjelmallisesti kirjoittimen oletusasetuksiin tarrat ennen tulostusta ja sitten vaihtaa se takaisin tulostuksen jälkeen.
Mutta eipä taida tämä olla VB6:lla sen helpompaa kuin vaihtaa suoraan ne tarrat.
Aihe on jo aika vanha, joten et voi enää vastata siihen.