IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Lecteur code barre


Sujet :

Delphi

  1. #21
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Salut,
    C'est "Default=true" qui déclenche le Click.
    En mode design, click sur Button1, F11 pour les propriétés, cherche la propiiété "Default" que tu mets à True, c'est tout.
    solilog.

  2. #22
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2016
    Messages : 57
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    jamais non plus vous nous avez présenté votre code !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    Q1.SQL.Add('select * from Article where CodBarre=:part');
    Q1.Prepared;
    Q1.Active:=false;
      if key=vk_return then
      begin
      Q1.Parameters.ParamByName('part').Value:=edit1.text;
      Q1.Active:=true;
      Edit2.text:=Q1.Fieldbyname('DesignArt').text;
      Edit1.text:='';
      Edit1.SetFocus;
      end;
     
    end;

  3. #23
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2016
    Messages : 57
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Appuyer ? Il suffit en fin de ton traitement de rendre le focus au TEdit qui recevra le codebarre grâce à un SetFocus.
    si j'ai bien compris ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.Edit1Exit(Sender: TObject);
    begin
    //...traitement
    Edit1.setfocus ?
    end;
    si je quitte pas le tedit on arrive jamais a Edit1.setfocus

  4. #24
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 097
    Points
    13 097
    Par défaut
    Donc si le code barre a dix digits, la requête ressemblera à ça :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part
    select * from Article where CodBarre=:part

  5. #25
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2016
    Messages : 57
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par solilog Voir le message
    Salut,
    C'est "Default=true" qui déclenche le Click.
    En mode design, click sur Button1, F11 pour les propriétés, cherche la propiiété "Default" que tu mets à True, c'est tout.
    solilog.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    Button1.Click;
    end;
      ...
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var x:string;
    begin
    x:=Edit1.text;
        with Q1 do
        Begin
        Close;
        SQL.Clear;
        SQL.Add ('select * from Article where CodBarre like "%' + x + '%"  ');
        Open;
        Edit2.text:=Fieldbyname('DesignArt').text;
        end;
    end;
    J'ai Fait ça Mr solilog j’espère que j'ai bien écrit, lorsque je tape au clavier + ENTER ça marche bien sinon dans 2 jours je récupère la douchette chez mon client pour confirmé, merci...

  6. #26
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Salut,
    Non, supprime ta procédure OnKeypressed !!!
    Si tu as bien mis Default=True dans ton bouton (en mode concept), çà suffit, le code du bouton sera exécuté.
    solilog

  7. #27
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2016
    Messages : 57
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par solilog Voir le message
    Salut,
    Non, supprime ta procédure OnKeypressed !!!
    Si tu as bien mis Default=True dans ton bouton (en mode concept), çà suffit, le code du bouton sera exécuté.
    solilog
    mais comment le code du bouton va s’exécuter alors que la lecture serai sur le edit1 et aucun événement est appliquer sur Edit1 !?

  8. #28
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Salut,
    AVEC LA PROPRIETE DEFAULT=TRUE. Cette propriété signifie que le bouton est clické si on frappe ENTER. et la douchette reverra #13 en fin de scanne selon tes réglages. Je pense même que le réglage "#13" en fin de scanne est la valeur par défaut.
    Je t'ai donné les contraintes:
    - button1.default=true (en mode conception)
    - qu'à la fin de la procedure Button1Click, tu remettes le focus sur Edit1 pour une autre lecture
    - et que la douchette termine le scan par ENTER.
    Regarde (F1) le help de la propriété Default des boutons.
    solilog.

  9. #29
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    ce que j'aime (façon de parler) c'est qu'à deux interlocuteurs différents on a deux codes différents !
    Post #22 on me ressort grosso modo ce que j'ai proposé sans faire attention à certaines choses, et pourquoi un keydown ! alors que dans mes commentaires de code il était indiqué onKeyPress ?
    Post #25 on repart dans les mêmes erreurs de requête non paramétrées

    Post #15 je vous ai indiqué qu'il valait mieux avoir une requête préparée, mais pas une requête créée au runtime dans l'évènement ou du moins pas telle que vous le faite dans le code Du post #22 Andnotor à parfaitement résumé la situation de ce que cela donne et je pense même que cela plante avant d'avoir pu obtenir ces 10 lignes à cause du prepare

    N.B. à propos du code du Pot #15 j'y ai rajouté un Key:=#0 ce qui permet de ne pas utiliser la précaution du Edit1.SetFocus (AMHA il reste nécessaire cependant , par précaustion, si dans le traitement on utilise des showmessage ou autres traitement d'erreurs ou de traitement sur d'autres zones contenant un focus)
    Et ne me dites pas que cela ne fonctionne pas, je me base pour cette réponse sur un programme de 2002 toujours utilisé dans mon entreprise, et qui sert à tester des codes barres à la volée.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #30
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Avant d'aller plus loin !
    Il faut savoir comment fonctionne la Douchette

    C'est simple
    Lance Word ou Notepad++
    Active l'affichage des caractères spéciaux c'est l'icone
    Et si cela affiche un en fin de code ou un CRLF sur Notepad++
    Cela confirmera la présence du caractère 13 pour lancer un traitement automatique, soit via OnKeyDown ou OnKeyPress, soit via un TButton en Default à True

    Parce que 30 messages pour l'explication d'une douchette USB qui normalement d'une simplicité enfantine cela fait beaucoup !
    Il faudrait procéder par étape


    Voici du code extrait depuis mes applications où des personnes passent leur journée à scanner des codes barres (entre le 18/07/2016 11:11:21 au 13/01/2017 11:01:35, soit plus presque 6 mois avec 164357 scan, donc petite moyenne de 923 scan par jour)
    Pour une autre application avec exactement le même code, c'est juste 3 199 636 objets scannés entre 23/04/2015 15:31:49 et 13/01/2017 11:11:27, ce qui donne 630 jours, soit une moyenne de 5072 scan par jour
    Donc je peux le dire "ça fonctionne"
    Je plussois ce que dit SergioMaster, arrêter de partir dans tous les sens, on vous fait partager notre expérience et l'on sait ce que l'on écrit ici !

    1- Juste la gestion de la douchette
    avec un TEdit nommé edScan, un TLabel nommé lblScanConfirm et une TListBox nommé ListBox1
    Cela dans une nouvelle fenêtre vierge ! juste pour le test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //------------------------------------------------------------------------------
    procedure TFormXXX.edScanKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      if Key = VK_RETURN then
      begin
        edScan.SelectAll();
        lblScanConfirm.Caption := '';
        if TreatScan(edScan.Text) then
        begin
          lblScanConfirm.Caption := edScan.Text;
          edScan.Text := '';
        end;
      end;
    end;
    Evidemment mettre le code métier directement dans le OnKeyDown c'est vilain !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //------------------------------------------------------------------------------
    function TFormXXX.TreatScan(const ACodeBarre: string): Boolean;
    begin
      Result := False;
      ListBox1.Items.Add(ACodeBarre + ' a été traité ');
      Result = True;
    end;
    Déjà au moins ce truc minimal fonctionne-t-il correctement ?
    Inutile d'aller plus loin sinon !



    2- Intégrer cela dans la vraie fenêtre
    Idem, faire l'essai, si il y a un problème à ce stade, c'est ça qu'il faut étudier




    3- Ajouter le SQL
    Pour cela un objet Query préparé à l'avance (par exemple dans le FormCreate de la TFom ou d'un TDataModule)
    Et cela est pour moi, un autre sujet car dans un code bien conçu, la lecture d'une donnée est isolée et n'a pas de lien spécifique avec la lecteur d'un code barre

    L'avantage de séparer TOUT c'est que l'on peut tester les éléments séparément les uns des autres
    Tu peux donc tester la lecture dans la base même si tu n'as pas la douchette
    Puis lorsque tu auras la douchette, tu pourras t'occuper juste d'elle pour commencer puis interconnecter le code gérant la douchette du code gérant la base !
    C'est en tout mélangeant que l'on s'embourbe d'un code compliqué que l'on ne maitrise plus


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //------------------------------------------------------------------------------
    function TFormXXX.TreatScan(const ACodeBarre: string): Boolean;
    begin
      Result := False;
      try
        EdDesignArt.Text := DataModule.GetDesignArt(ACodeBarre);
        Result = True;
      except
        on E: Exception do
        begin
          EdDesignArt.Text := E.Message;
        end;
      end;
    end;
    Dans un TDataModule qui heberge les Query

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function TDataModuleXXX.GetDesignArt(const ACodeBarre: string): string;
    begin
      with OpenArt(ACodeBarre) do
      try
        if not IsEmpty then
          Result := FieldByName('DesignArt').AsString
       else
         raise Exception.CreateFmt('Article "%s" non trouvé', [ACodeBarre]);
      finally
        Close();
      end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function TDataModuleXXX.OpenArt(const ACodeArticle: string): TDataSet;
    begin
      Result := qryArticle; // tout simplement posé sur le TDataModule 
      if not Result.Prepared then
        Result.Prepare();
     
      Result.Close();
      Result.ParamByName('pCodeArticle').AsString:= ACodeArticle;
      Result.Open();
    end;
    Code dfm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    object qryArticle: TQuery
      SQL.Strings = (
        'SELECT * FROM Article WHERE CodBarre = :pCodeArticle')
      ParamData = <
        item
          DataType = ftUnknown
          Name = 'pCodeArticle'
          ParamType = ptUnknown
        end>
    end
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #31
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2016
    Messages : 57
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par solilog Voir le message
    Salut,
    AVEC LA PROPRIETE DEFAULT=TRUE. Cette propriété signifie que le bouton est clické si on frappe ENTER. et la douchette reverra #13 en fin de scanne selon tes réglages. Je pense même que le réglage "#13" en fin de scanne est la valeur par défaut.
    Je t'ai donné les contraintes:
    - button1.default=true (en mode conception)
    - qu'à la fin de la procedure Button1Click, tu remettes le focus sur Edit1 pour une autre lecture
    - et que la douchette termine le scan par ENTER.
    Regarde (F1) le help de la propriété Default des boutons.
    solilog.
    Il semble ça marche pasque j'ai envoyé un programme teste à mon client qui à la douchette et il me dit que c'est positif, je confirmerai plutard, merci Monsieur.

  12. #32
    Membre à l'essai
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2016
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2016
    Messages : 57
    Points : 11
    Points
    11
    Par défaut
    Grand merci à messieurs, SergioMaster ShaiLeTroll pour les dernières citation ainsi qu'au autre qui m'on aidé, je vais les exploités..

Discussions similaires

  1. Lecteur code barre et Access 2000
    Par DMboup dans le forum Access
    Réponses: 11
    Dernier message: 17/06/2006, 14h05
  2. [Débutant][PS2] Communication avec lecteur code-barre
    Par FreeCake dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/02/2006, 15h14
  3. [Comm]Lecteur code barre
    Par nicotine002 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 31/12/2005, 18h44
  4. comment lire apartir d'un lecteur code barre
    Par saim mohamed dans le forum Langage
    Réponses: 4
    Dernier message: 12/09/2005, 10h57
  5. [HARDWARE] [Conseil] Lecteur code barre
    Par Ni(o dans le forum Périphériques
    Réponses: 4
    Dernier message: 22/06/2004, 19h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo