Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB6.0] Twee printtaken tegelijk uitvoeren (OPOS)

Pagina: 1
Acties:
  • 608 views sinds 30-01-2008
  • Reageer

  • GhandiHarder
  • Registratie: Februari 2003
  • Laatst online: 12:49
Beste mede-tweakers,

Sinds een tijdje ben ik bezig met het leren programmeren in Visual Basic 6.0. Na wat oefenprogramma's ben ik nu bezig met een kassa systeem. Ik werk in een snackbar, en mocht mijn projectje uiteindelijk serieus uitpakken gaan we kijken of we er wat mee kunnen. Tot nu toe is het puur ter zelfonwikkeling, maar het is natuurlijk leuk om met een doel te programmeren.

Het systeem is redelijk ver gevorderd. Er worden twee bonprinters aangestuurd; een Epson U210d en een Epson L90. Epson heeft een uitgebreide development kit en daarmee heb ik ze aan de praat gekregen. Ik maak gebruik van de OPOS drivers die gemakkelijk via VB aan te sturen zijn. Op dit moment heb ik twee fucties (print_bon en print_keukenbon) die resp. de L90 en de u210 aan sturen. Dit werkt prima! Alleen er is één probleem; Zodra ik een bon print, dan print hij eerste de gewone bon, als hij klaar is dan print hij de keukenbon en als die laatste klaar is, kan ik (de gebruiker) pas weer verder. Tijdens het printen kan ik niets met mijn applicatie doen. Aangezien er soms lange bonnen geprint worden, is dit vrij irritant.
Ik zou graag willen dat er een printopdracht gegeven kan worden en ik vervolgens, tijdens het printen, gewoon verder kan met het maken van een nieuwe bon. Net zoals je bijvoorbeeld in Word meerder printopdrachten achter elkaar kan doen.

Ik weet niet of er nog meer informatie nodig is om mijn vraag te beantwoorden. Zoja, dan geeft ik die graag. Code posten is ook geen probleem.

  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11 10:57
Word (en andere Windows programma's) sturen de opdracht naar de print spooler die het verder op de achtergrond regelt. Jouw OPOS drivers werken blijkbaar anders waardoor je programma pas verder gaat als het printen is afgerond.

Je zou een eigen variant op de print spooler kunnen maken door de taken door een activex exe op de achtergrond uit te laten voeren. Volgens mij is dat de makkelijkste manier om in een VB programma een soort van multitasking te doen.

  • GhandiHarder
  • Registratie: Februari 2003
  • Laatst online: 12:49
Zou je een hint kunnen geven hoe ik de gegevens van het enige programma naar het ander programma kan sturen?

  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11 10:57
Een activex exe is een component dat je initieert en start vanuit het hoofdprogramma. Je krijgt iets als volgt:
code:
1
2
3
4
Dim pt AS PrintTask 'PrintTask is de ActiveX EXE
Set pt = New PrintTask
pt.PrintBon bondata 'bondata is de data die je wilt printen
Set pt = Nothing

Veel meer moet je me hierover niet vragen want m'n kennis is al een paar jaar weggezakt. Kijk of je wat kunt vinden over ActiveX en het verschil tussen ocx/dll/exe en probeer daar wat mee.

Verwijderd

OPOS ken ik niet, maar die Epson bonprinters zijn prima rechtstreeks aan te sturen: gewoon de juiste data en escape-codes naar de printerpoort sturen.
Wat je eigenlijk nodig hebt: het printen zelf uitvoeren in een eigen thread, zodat je main thread (de POS-applicatie zelf) niet 'bevriest'. Hoe eenvoudig dat in VB6 te realiseren is weet ik niet, maar in VB.NET kun je heel handig gebruik maken van de BackgroundWorker van het .NET framework (en zelfs van threadpools als je meerdere jobs wil gaan queuen).

Sowieso zou ik je, wanneer je nog maar net begonnen bent met het leren programmeren, aanraden om niet met VB6 te beginnen (wordt niet meer verder aan ontwikkeld) en voor .NET te gaan...

  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11 10:57
OPOS is een standaard om hardware bij kassasystemen aan te sturen dus het kan wel zin hebben het te gebruiken. Zo kun je nog eens een ander merk printertje kopen.

Je .net verhaal kan ik me helemaal in vinden.

Verwijderd

Och, als je POS Epson en IBM ondersteunt, kun je dik 90% van de bonprinters aan, waaronder Mannesmann Tally, Brother, OKI en Citizen...

  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11 10:57
Verwijderd schreef op dinsdag 15 januari 2008 @ 00:33:
Och, als je POS Epson en IBM ondersteunt, kun je dik 90% van de bonprinters aan, waaronder Mannesmann Tally, Brother, OKI en Citizen...
Voor iedere standaard is wel een alternatief voorhanden ;)

  • GhandiHarder
  • Registratie: Februari 2003
  • Laatst online: 12:49
Verwijderd schreef op dinsdag 15 januari 2008 @ 00:01:
OPOS ken ik niet, maar die Epson bonprinters zijn prima rechtstreeks aan te sturen: gewoon de juiste data en escape-codes naar de printerpoort sturen.
Wat je eigenlijk nodig hebt: het printen zelf uitvoeren in een eigen thread, zodat je main thread (de POS-applicatie zelf) niet 'bevriest'. Hoe eenvoudig dat in VB6 te realiseren is weet ik niet, maar in VB.NET kun je heel handig gebruik maken van de BackgroundWorker van het .NET framework (en zelfs van threadpools als je meerdere jobs wil gaan queuen).

Sowieso zou ik je, wanneer je nog maar net begonnen bent met het leren programmeren, aanraden om niet met VB6 te beginnen (wordt niet meer verder aan ontwikkeld) en voor .NET te gaan...
Ik ben even wezen zoeken en inderdaad; OPOS is slechts één manier, je kunt ze ook via de Advanched Printer Drivers aansturen. Zo staat hij gewoon als printer in windows. Ga ik van het weekend eens proberen als ik de printers weer heb.

Wat betreft .Net; Toen ik net begon kwam ik al snel uit op VB6.0, vanwege de lage instapdrempel en aangezien mijn vorige baas al een opzetje gemaakt het in VB6.0. Toen ik echter verder ging kijken kwam ik inderdaad al vrij rap bij .net 2005. Deze heb ik geinstalleerd en hierop ben ik stukje bij beetje met de wizards het beheerprogramma aan het maken. Grote nadeel kwam ik al snel achter wat voor mijn programma (hoewel het natuurlijk op van allerlei manier kan) het gemis van de Control Arrays. Mijn porgramma heeft ruim 60 Command Buttons en deze zijn in vb6.0 enorm makkelijk te wijzigen.
Ook vind ik, voor de dingen die ik nu doe, .net 2005 wat log aanvoelen... Hele simpele dingen gaan door mijn mijn onkunde soms fout.. en dat geeft meteen een waslijst aan errors.

Maar zoals gezegt; ik begin nog maar net en vind het vooralsnog erg leuk om te doen.

[ Voor 0% gewijzigd door GhandiHarder op 15-01-2008 13:43 . Reden: Typo's ]


Verwijderd

Control arrays worden niet meer ondersteund in VB.NET, maar als je Googlet op "vb.net control array" krijg je een waslijst aan alternatieven die hetzelfde kunnen. Dus niet echt een reden om nu nog met VB6 te beginnen...

De ontwikkelomgeving van Visual Studio 2005 kan idd nogal log aanvoelen, maar de uiteindelijke applicatie (wel draaien buiten de debug omgeving) is qua snelheid meestal allerminst log of traag.

Wat wel een drempel zou kunnen zijn is, als je je kassa zou willen draaien op bv. een paar jaar oude IBM POS terminal met een 400MHz AMD K6 processor en 64MB geheugen: da's eigenlijk net te weinig voor een kale Win2000 en .NET 2.0, en dan kan VB6 een betere keus zijn. Al zou ik dan zelf eerder voor Delphi kiezen... ;)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Wat betreft .Net; Toen ik net begon kwam ik al snel uit op VB6.0, vanwege de lage instapdrempel en aangezien mijn vorige baas al een opzetje gemaakt het in VB6.0.
Dat is de meest gemaakt fout .... de moeilijkheid zit 'em niet in de syntax maar in het ontwerp van de applicatie.

Ik zou je echt willen aanraden om te kijken of je het met een .Net applicatie kunt doen, VB6 is nu toch echt wel op zijn retour en tenzij je er echt niet omheen kan ( wat ik me bij een nieuwe applicatie niet kan voorstellen ) zijn er veel beter gratis alternatieven.

Mbt tot je probleem, is er geen mogelijkheid in de componenten die je gebruikt om aan te geven dat de printtaak asynchroon moet worden uitgevoerd?

Zo niet dan zou je er over kunnen denken om een aparte print (console)applicatie te maken die je aanroept vanuit je VB applicatie. Je kunt dit met een paar simpele API calls doen, bv om te testen of de applicatie inmiddels klaar is.

Je zou ook nog zelf de communicatie kunnen implementeren, alhoewel dat wel een grotere klus is.

Het probleem van de standaard printer spooler vanuit VB is dat je niet makkelijk kunt zien of het printen goed is gegaan.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1