Det korte og det lange er, at jeg ikke kan finde ud af hvordan jeg får fat i den dll, så jeg kan kode noget af det her. kan nogen hjælpe med det (jeg antager at den er gratis til udviklere) ellers må nogen kunne finde ud af at hjælpe mig med at skrive sådan en eventhandler selv.
Men hvis du endelig vil bruge POS, så ser det umiddelbart ud til at du bare skal fange Scanner.DataEvent eventet og når det så bliver skudt afsted, læser du fra Scanner.ScanData som er en byte[]
Ja, sorry, men jeg har ikke fået nogle mails om at her var sket noget, så det er lidt svært at følge med i Eksperten....
Der er et SDK (mærket er Symbol), men det er ikke helt godt skrevet og det er til compact framework. Jeg har læst flere dårlige beskrivelser af det.
Jeg er helt blank mht at fange den dataevent, så måske et lille eksempel på hvordan man skriver sådan en :) Jeg skal nok selv skrive koden til hvad det skal gøre, men hvordan laves sådan en funktion ?
Jeg forestiller mig til at jeg i min MDI parent laver noget med:
using ??? ... ... public void ScanDataEvent() { DataEvent de = new Scanner.DataEvent(); string scan = de.ScanData.ToString(); .... }
Følgende skal være i en formens constructor eller lign.
// Scanner objectet initialiseres Scanner scanner = new Scanner(); // Her tilføjer du en eventhandler til scannerens dataevent, funktionen OnScan bliver kørt når et scan finder sted. scanner.DataEvent += new DataEventHandler(OnScan);
Dette skrives self uden for constructoren, da det er en ny funktion
byte[] data = ((Scanner)sender).ScanData; foreach(byte b in data) barcode += Convert.ToChar(b); }
Så skulle variablen string i OnScan til sidst gerne indeholde den indscannede stregkode, der skal lige gøres opmærksom på at intet af dette er testet, så jeg tager forbehold for tastefejl eller lign.
Jeg bruger symbol LS2208 (http://www.symbol.com/products/barcode_scanners/barcode_hh_ls2200.html) Det er ikke til PPC men til alm stationær med USB Jeg har læst en del om scannere, og skal også selv bruge nogle til PPC senere. Mit valg er faldet på symbol, men jeg skal ærlig talt ikke kunne soge om det er det bedste. Det er dog det mærke der er mest tilgængeligt her i landet i form af variationer og udbud, og så har de overkommelige priser.
Jeg er ikke sikker på at koden er det rigtige sted og at jeg bruger det rigtige namespace, for der kommer røde streger under det med scandataevent
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using Microsoft.PointOfService.BaseServiceObjects; using Microsoft.PointOfService.BasicServiceObjects;
public MainForm() { // // Required for Windows Form Designer support // InitializeComponent();
Functions fcn = new Functions(); Constants cnt = new Constants();
SearchForm SearchForm = new SearchForm(); SearchForm.MdiParent = this; SearchForm.Show(); }
/// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing )...
#region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent()... #endregion
Scanner myScanner = new Scanner(); myScanner.DataEvent += new DataEventHandler(OnDataEvent);
/// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new MainForm()); }
myScanner.DataEvent += new DataEventHandler(OnDataEvent); -- ---------------- - Invalid token '+=' in class, struct, or interface member declaration Class, struct, or interface method must have a return type Identifier expected
Nej, jeg er webprogrammør, så alt det her med namespaces og assemblys er nyt for mig. En eventhandler er noget man lægger i <body> ;-)
Jeg har nu lagt det ind i mainform funktionen og får nu nogle andre fejl. Jeg har lavet en reference til Microsoft.PointOfService.dll og Microsoft.PointOfService.ControlBase.dll Jeg har lavet en "using Microsoft.PointOfService.BaseServiceObjects;"
Jeg får fejlen: The type or namespace name 'DataEventArgs' could not be found (are you missing a using directive or an assembly reference?)
Der er streg under "DataEventArgs" i funktionen: protected void OnScan(object sender, DataEventArgs e) { string barcode = System.Text.Encoding.ASCII.GetString(((Scanner)sender).ScanData); }
----------------------------------------------------------------------------------------- her er det hele samlet:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using Microsoft.PointOfService.BaseServiceObjects;
public MainForm() { // // Required for Windows Form Designer support // InitializeComponent();
Functions fcn = new Functions(); Constants cnt = new Constants();
SearchForm SearchForm = new SearchForm(); SearchForm.MdiParent = this; SearchForm.Show();
Scanner myScanner = new Scanner(); myScanner.DataEvent += new DataEventHandler(OnScan); }
/// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing )...
#region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent()... #endregion
/// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new MainForm()); }
Okay, det der skal gøres er simpelthen at man skal oprette sin egen klasse der benytter ScannerBase.
Jeg har lavet en meget simpel implementering af den, jeg skriver den i næsten kommentar.
Du skal bare tilføje den some en ny fil i dit projekt, og så oprette et object af typen MyScanner i din form, så skulle du kunne få adgang til events og data osv, som beskrevet tidligere.
using System; using System.Collections; using System.Text; using Microsoft.PointOfService; using Microsoft.PointOfService.BaseServiceObjects; using Microsoft.PointOfService.BasicServiceObjects;
namespace VinGuideDataSharing { public class MyScanner : ScannerBase { public MyScanner() { }
public override string CheckHealth(HealthCheckLevel level) { return level.ToString(); }
public override string CheckHealthText { get { return this.CheckHealthText; } }
public override DirectIOData DirectIO(int command, int data, object obj) { return new DirectIOData(data, obj); } } }
OK nu kommer der ingen fejl men den fanger dog ikke scanner eventet....
Jeg tror jeg skal omprogrammere scanneren, så den simulerer com porten i stedet for et keypress... noget jeg læste om et andet sted.
Du har hjulpet rigtigt meget, så jeg har oprettet et spm mere du kan svare på her http://exp.dk/spm/657539 så kan du og ksoren dele dette spm, da han jo også svarede "rigtigt" Tak til Jer begge :)
Jeg har nu allerede kigget på hvad delfi og scan-it kan tilbyde, vi har masser af kontakter, så det behøver du ikke hjælpe med, men ting koster jo det ting gør, de scannere vi har kig på koster oprindeligt 21000 ex moms, og vi får dem til 16.5 pga antallet.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.