1. #1
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 567
    Points
    567

    Par défaut Problème de fonctionnement d'un filtre

    Bonsoir à tous,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if not Edit1.Text in ['A'..'Z','a'..'z']  then
     Begin Beep(2000,30);Abort end;
    Erreur:Operator is not overloaded:not "TTranslatestring".

    Je ne comprend pas où est l'erreur!

  2. #2
    Membre averti

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 99
    Points : 420
    Points
    420

    Par défaut

    La modification suivante vous fournira une erreur plus adéquate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not (Edit1.Text in ['A'..'Z','a'..'z'])  then

  3. #3
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    février 2014
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 419
    Points : 1 835
    Points
    1 835

    Par défaut

    Bonjour.

    L'opérateur in ne peut pas marcher entre une chaine entière de caractères et un caractère.
    C'est comme si tu demandais si "BONJOUR" est dans 'B' : cela n'a aucun sens.
    Il faut balayer le string caractère par caractère.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function GoodEdit(S: string): boolean;
    var
      i: integer;
    begin
      Result:= false;
      for i:= 1 to Length(S) do
        if not (S[i] in ['A'..'Z','a'..'z']) then Exit;
      Result:= true;
    end;
    Ou alors vérifier la frappe de caractère dans l'événement OnKeyPress :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
    begin
       if not(Key in ['A'..'Z','a'..'z', #8]) then Key:= #0; // #8 autorise la touche backspace
    end;
    Cordialement
    Thierry

  4. #4
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 567
    Points
    567

    Par défaut

    Bonsoir à tous


    Donc j'ai modifié le code ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if not (edit1.text[1] in ['A'..'Z','a'..'z'])  then       //je m'intéresse uniquement au premier caractère du mot.
     Begin Beep(2000,30); edit1.text:='' ; Exit end;
    merci de m'avoir aidé.

  5. #5
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    février 2014
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 419
    Points : 1 835
    Points
    1 835

    Par défaut

    N'oublie pas de vérifier au préalable la longueur de Text.
    Car si Text est vide, Text[1] va déclencher une exception (external: SIGSEGV).

    Thierry

  6. #6
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 567
    Points
    567

    Par défaut

    Bonsoir,

    N'oublie pas de vérifier au préalable la longueur de Text.
    Car si Text est vide, Text[1] va déclencher une exception (external: SIGSEGV).
    Effectivement et merci pour la remarque Thierry.

    Donc j'ai modifié le code ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if edit1.text='' then
     Begin Beep(2000,30); Exit end;
     if not (edit1.text[1] in ['A'..'Z','a'..'z'])   then
     Begin Beep(2000,30); edit1.text:='' ; Exit end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Problème de fonctionnement d'un filtre
    Par christian.pernin dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2011, 22h06
  2. Problème de fonctionnement du Canvas
    Par Julien_C++ dans le forum C++Builder
    Réponses: 18
    Dernier message: 27/07/2006, 10h06
  3. [HashTable] Problème de fonctionnement
    Par RR instinct dans le forum Langage
    Réponses: 8
    Dernier message: 22/06/2006, 14h01
  4. Datecalc : problème de fonctionnement
    Par mollux dans le forum Modules
    Réponses: 2
    Dernier message: 07/06/2006, 08h59
  5. Réponses: 5
    Dernier message: 18/03/2006, 10h30

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