[VB.NET] Barcode Scanner

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

  • F-Tim
  • Registratie: November 2003
  • Laatst online: 04-04 21:15
Hallo allemaal,

ik ben bezig met een barcode scanner te integreren in mijn applicatie, het is een USB scanner die als je iets scant gewoon als tekst op het scherm pompt, aangevuld met een breakline.
Een voorbeeld hiervan is: "/IBP/"
Nu wilde ik dit in VB.NET opvangen, en de hele ingevoerde string weergeven in een messagebox tijdelijk. Als de rest van de applicatie werkt komt er gewoon een ButtonClick of procedure aan te hangen.

Nu had ik de volgende code in gedachten (KeyPreview staat op True overigens, en Barcode is een globale string variabele at the moment):
code:
1
2
3
4
5
6
Private Sub BarcodeLogin(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
   Barcode = Barcode + e.KeyChar.ToString
   If e.KeyChar.ToString = "/" And Len(Barcode) > 2 Then
       MsgBox(Barcode)
   End If
End Sub

En als ik het met het toetsenbord invoer werkt het wel, dan laat hij gewoon de hele string zien. Echter als ik het met de barcode scanner invoer werkt het niet. Dan krijg ik slechts 1 "/" te zien. En ik heb geen idee of dit alleen het eerste of alleen het laatste karakter is geweest. Maar ik zou wel graag de gehele string willen uitlezen.

Kan iemand me op weg helpen hiermee? Google helpt me ook niet veel verder aangezien deze voornamelijk voorbeelden geeft die direct met een poort (vaak ook nog RS232) communiceren, maar dat is niet nodig bij deze scanner. Wie hier weet hoe ik de gehele string in VB.Net kan krijgen?

Wanna play?


  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Hm, maar zou VB die input van de scanner wel zien als een keypres?

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 08-04 21:55
En heeft die scanner geen enige vorm van documentatie? Hoe moeten wij nu weten hoe die scanner communiceert met jouw PC. Je hebt bijboorbeeld geen dll die voor jouw de communicatie met de scanner verzorgt en de berichten door stuurt, die je weer in je applicatie kunt opvangen?

  • F-Tim
  • Registratie: November 2003
  • Laatst online: 04-04 21:15
Sybr_E-N schreef op donderdag 02 maart 2006 @ 12:15:
En heeft die scanner geen enige vorm van documentatie? Hoe moeten wij nu weten hoe die scanner communiceert met jouw PC. Je hebt bijboorbeeld geen dll die voor jouw de communicatie met de scanner verzorgt en de berichten door stuurt, die je weer in je applicatie kunt opvangen?
Bij de barcode scanner zit idd geen vorm van documentatie of DLL bijgeleverd idd ;)
Maar aangezien het benodigd is.. het is een Ufo Scan UF-101 USB Barcode scanner.
Zoeken op google levert me hierover weinig informatie in de vorm van handleiding of software (drivers danwel voorbeelden) op. Maargoed, bij deze mijn excuses als deze informatie te weinig was in de openings post.
ZroBioNe schreef op donderdag 02 maart 2006 @ 10:45:
Hm, maar zou VB die input van de scanner wel zien als een keypres?
Daar ging ik eigenlijk wel van uit, aangezien als je gewoon een Word document opent bijvoorbeeld en een barcode scant, dat het exact hetzelfde uitziet alsof je het via het toetsenbord hebt ingevoerd. Bovendien reageert VB er wel op, zei het dan dat hij niet alle karakters verwerkt krijgt. Dit zal waarschijnlijk liggen aan de manier waarop ik het probeer te verwerken, maar ik heb geen flauw benul hoe ik dit correct kan gebruiken in VB.Net zodat hij wél alle karakters accepteert en inleest.

Edit: Nevermind, het blijkt dat VB.Net 2003 gewoon te traag is... In VB.Net 2005 werkt dezelfde procedure wel als een zonnetje.... 8)7

[ Voor 6% gewijzigd door F-Tim op 02-03-2006 13:27 ]

Wanna play?


  • basz
  • Registratie: April 2000
  • Laatst online: 21-10-2025

basz

Professioneel prutser

en als je niet de string geeft in een messagebox, maar de lengte van die string... welke waarde krijg je daar dan uit?

[ Voor 3% gewijzigd door basz op 02-03-2006 13:28 . Reden: zie hierboven ]


  • F-Tim
  • Registratie: November 2003
  • Laatst online: 04-04 21:15
En dan zit ik nu met een opvolgend subtiel probleem....
Op het einde van de invoer komt een Enter .... echter hoe vang ik deze op dat deze niet naar het programma gestuurd wordt? Want deze klikt dan automatisch op een button welke op dat moment dan doodleuk de focus heeft

Ik had 2 oplossingen...
A.) Keyboard buffer... het laatste karakter weghalen
B.) Focus overzetten naar ander item.

A.) Keyboard buffer... geen idee hoe die leeg te halen, Google levert niets bruikbaars op, en MSDN toont ook geen info waar ik iets mee aan kan vangen. Daar gaat het met name over Direct X input en C++ input.
B.) Een ander component krijgt gewoonweg niet de focus als ik Component.Focus() gebruik 8)7 Waarschijnlijk dat dit te maken heeft dat ik een MDI Mainform gebruik, maar vreemd vind ik het wel...

Wanna play?


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:51
Je kan volgens mij de enter gewoon negeren, met zoiets:
code:
1
2
if e.keychar == "keychar voor enter"
e.handled = true

Syntax klopt overigens geen zak van... :)

Roomba E5 te koop


  • Poltergeist
  • Registratie: Oktober 2000
  • Laatst online: 08-04 16:57
De meeste (zoniet alle) scanners die ik ken, hebben de mogelijkheid om wel of geen CR mee te sturen.

  • F-Tim
  • Registratie: November 2003
  • Laatst online: 04-04 21:15
sig69 schreef op donderdag 02 maart 2006 @ 14:10:
Je kan volgens mij de enter gewoon negeren, met zoiets:
code:
1
2
if e.keychar == "keychar voor enter"
e.handled = true

Syntax klopt overigens geen zak van... :)
Werkt ook niet.... zelfs niet als ik extra nog een Exit Sub in het Then stukkie zet :'(
En dan controleer ik op e.KeyChar = Chr(13) .....
Poltergeist schreef op donderdag 02 maart 2006 @ 14:14:
De meeste (zoniet alle) scanners die ik ken, hebben de mogelijkheid om wel of geen CR mee te sturen.
Ja... maar als er geen drivers bijzitten kan ik dat dus niet instellen helaas....

[ Voor 29% gewijzigd door F-Tim op 02-03-2006 14:16 ]

Wanna play?


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 06-04 15:52
De meeste barcode pennen kan je programeren door een uitgeprinte lijst met barcode-codes (;)) in te laten lezen. Hiermee programmeer je werking van pen. Dat zal bij jou pen ook wel zo zijn. Weet je zeker dat er op de website van de leverancier niets staat?

Daarmee kan je o.a. regelen of er een enter moet worden gestuurd na dat de barcode is gescanned e.d..

Verwijderd

F-Tim schreef op donderdag 02 maart 2006 @ 14:16:
Ja... maar als er geen drivers bijzitten kan ik dat dus niet instellen helaas....
dit soort barcodescanners ( het soort dat een toetsenbord simuleert ) gebruikt geen drivers. Maar je kunt ze meestal wel instellen door bepaalde codes in de handleiding te scannen.

  • F-Tim
  • Registratie: November 2003
  • Laatst online: 04-04 21:15
om3ega schreef op donderdag 02 maart 2006 @ 14:18:
De meeste barcode pennen kan je programeren door een uitgeprinte lijst met barcode-codes (;)) in te laten lezen. Hiermee programmeer je werking van pen. Dat zal bij jou pen ook wel zo zijn. Weet je zeker dat er op de website van de leverancier niets staat?

Daarmee kan je o.a. regelen of er een enter moet worden gestuurd na dat de barcode is gescanned e.d..
Verwijderd schreef op donderdag 02 maart 2006 @ 14:18:
[...]

dit soort barcodescanners ( het soort dat een toetsenbord simuleert ) gebruikt geen drivers. Maar je kunt ze meestal wel instellen door bepaalde codes in de handleiding te scannen.
En dat mag juist niet... want het programma moet simultaan met een oudere versie van de applicatie kunnen draaien op de pc, en mijn applicatie moet compatible zijn met de andere :+
Ik moet dus echt de carriage return eruit zien te vissen....

Wanna play?


Verwijderd

F-Tim schreef op donderdag 02 maart 2006 @ 14:29:
En dat mag juist niet... want het programma moet simultaan met een oudere versie van de applicatie kunnen draaien op de pc, en mijn applicatie moet compatible zijn met de andere :+
Ik moet dus echt de carriage return eruit zien te vissen....
Probeer dan eens het volgende :
- Maak een textbox
- Maak code die een enter afvangt ( met keypress of KeyUp )
- Wanneer de enter is ontvangen, text uit box uitlezen, verwerken en box legen.

Heeft wel als nadeel dat je ervoor moet zorgen dat je altijd in die textbox staat als je scant.

[ Voor 9% gewijzigd door Verwijderd op 02-03-2006 14:36 ]


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Hoe kan het dat een andere button de focus heeft? Je scanner stuurt keyboardinput naar een textbox, dus die textbox heeft dan toch de focus?
Het kan wel dat de button 'Default' staat op het form, dan kun je dat waarschijnlijk het beste uitschakelen.

Verder is het niet nodig om de keypress af te vangen denk ik. De ValueChanged lijkt me praktischer, die wordt als het goed is aangeroepen na de CR. Vervolgens nog even die /IBP/ eraf halen en je hebt de hele barcode.
(dat zou btw ook in 2003 goed moeten werken ;))

Verwijderd

bee-es schreef op donderdag 02 maart 2006 @ 14:38:
Hoe kan het dat een andere button de focus heeft? Je scanner stuurt keyboardinput naar een textbox, dus die textbox heeft dan toch de focus?
Het kan wel dat de button 'Default' staat op het form, dan kun je dat waarschijnlijk het beste uitschakelen.

Verder is het niet nodig om de keypress af te vangen denk ik. De ValueChanged lijkt me praktischer, die wordt als het goed is aangeroepen na de CR. Vervolgens nog even die /IBP/ eraf halen en je hebt de hele barcode.
(dat zou btw ook in 2003 goed moeten werken ;))
hij gebruikt geen textbox, maar de keyevents van het form. Hij heeft het in zijn startpost namelijk over het feit dat hij KeyPreview heeft aangezet.

  • F-Tim
  • Registratie: November 2003
  • Laatst online: 04-04 21:15
Verwijderd schreef op donderdag 02 maart 2006 @ 14:36:
[...]

Probeer dan eens het volgende :
- Maak een textbox
- Maak code die een enter afvangt ( met keypress of KeyUp )
- Wanneer de enter is ontvangen, text uit box uitlezen, verwerken en box legen.

Heeft wel als nadeel dat je ervoor moet zorgen dat je altijd in die textbox staat als je scant.
Ik heb al met en zonder textbox geprobeerd. Maar ik krijg bij de onload de focus niet op de Textbox gelegd.... Textbox.Focus werkt niet bij de Onload, en ook niet bij de OnShown van de main applicatie.

Bovendien werk ik al met een procedure die KeyPress afvangt, maar dit van alle keys doet. Zodat ik de invoer van de barcode scanner ALTIJD te pakken krijg, onafhankelijk van of hij in een control staat of niet.... Heb het wel al geprobeerd om de focus in een ander component te zetten, wat niet reageert op de enter (zoals een Textbox) maar deze wil gewoon niet de focus krijgen....
bee-es schreef op donderdag 02 maart 2006 @ 14:38:
Hoe kan het dat een andere button de focus heeft? Je scanner stuurt keyboardinput naar een textbox, dus die textbox heeft dan toch de focus?
Het kan wel dat de button 'Default' staat op het form, dan kun je dat waarschijnlijk het beste uitschakelen.

Verder is het niet nodig om de keypress af te vangen denk ik. De ValueChanged lijkt me praktischer, die wordt als het goed is aangeroepen na de CR. Vervolgens nog even die /IBP/ eraf halen en je hebt de hele barcode.
(dat zou btw ook in 2003 goed moeten werken ;))
Ik stuur het dus niet naar een tekstbox ofzo. Die button krijgt gewoon standaard de focus bij het openen van het form. Ik heb al verscheidene zaken geprobeerd om een ander onderdeel de focus te geven, maar VB wil de focus dus niet veranderen. Bovendien wordt die button at runtime aangemaakt aangezien het een login button betreft waarmee een gebruiker een eigen login knop krijgt ;) De applicatie is nl. uiteindelijk bedoeld voor een Touchscreen. En hoewel de code in 2003 ook zou moeten werken, stopte 2003 na het eerste teken met het toevoegen aan de Barcode string... Terwijl 2005 het met exact dezelfde code wél gewoon goed doet.

Edit: Het probleem is opgelost... na veel zoeken @ google.
code:
1
2
3
4
5
6
7
    Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
        If keyData = System.Windows.Forms.Keys.Return Then
            Return True
        Else
            Return MyBase.ProcessDialogKey(keyData)
        End If
    End Function


Deze code toevoegen en alle ingevoerde Enters worden afgevangen. Deze gekoppeld aan een check om te kijken of je een barcode aan het invoeren bent en hij werkt wel normaal, maar niet als de barcode wordt ingevoerd :) Misschien hebben anderen er ook nog wat aan zo.

[ Voor 14% gewijzigd door F-Tim op 02-03-2006 17:01 ]

Wanna play?

Pagina: 1