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

Contribuez Delphi Discussion :

Procédures pour une saisie semi automatique


Sujet :

Contribuez Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut Procédures pour une saisie semi automatique
    Bonjour,

    Pour les besoins d'une petite application j'ai créé des procédures qui permettent de faire une saisie semi auto sur un TEdit.

    Ces procédures fonctionnent avec une fichier contenant une série de mots.
    (Pour les besoin de cette appli j'ai également un fichier "fich_index" qui regroupe tous les index des fichiers utilisés)

    Procédure de proposition de mot en fonction des caractères saisis dans le Tedit

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    procedure libelle();
    var
    i,j,k:integer;
    nomtext,nomprovi,nom,mot:string;
    begin
    Seek(fich_index,1);Read(fich_index,enregindex);
    seek(fich_pref,enregindex.index_pref);Read(fich_pref,enregpref);
    if (enregpref.suggestion='oui') and (test_auto=0) then
    begin
               try
                  nomprovi:='';nom:='';
                   for i:=pos('.del',nomfich) downto 1 do
                     begin
                       if ord(nomfich[i])<>92  then nomprovi:=nomprovi+char(ord(nomfich[i]));
                       if ord(nomfich[i])=92  then Break;
                     end;
                      nom:=nomprovi;nomprovi:='';
     
                    for i:=length(nom) downto 2 do
                      begin
                        nomprovi:=nomprovi+char(ord(nom[i]));
                     end;
               // ouverture ou création du fichier texte
               nomtext:=ExtractFilePath(Application.ExeName)+'dab00\'+ nomprovi +'mot.del';
               AssignFile(fich_text,nomtext);Reset(fich_text);
               except
               AssignFile(fich_text,nomtext);ReWrite(fich_text);
               enregindex.index_mot:=0;
               Seek(fich_index,1);Write(fich_index,enregindex);
               end;
          //  affichage de la liste des mots
               Seek(fich_index,1);Read(fich_index,enregindex);
               i:=enregindex.index_mot;
     
               if i>0 then
               begin
              compte.aide_saisie.Clear;
        for i:=1 to enregindex.index_mot do
          begin
            Seek(fich_text,i); Read(fich_text,enregtext);
            mot:='';
              for j:=1 to length(compte.Edit1.Text) do
                begin
                  mot:=mot+enregtext.mot[j];
                end;
     
                if mot=trim(compte.Edit1.Text) then
                  begin
                    if compte.aide_saisie.Count<2 then compte.aide_saisie.Items.Add(enregtext.mot);
                       for k:=1 to compte.aide_saisie.Count-1 do
                         begin
                           if enregtext.mot<>compte.aide_saisie.Items[k]then
                            begin
                             compte.aide_saisie.Left:=84;
                             compte.aide_saisie.Top:=122;
                             compte.aide_saisie.Visible:=true;
                             compte.aide_saisie.Items.Add(enregtext.mot);
                            end;
                         end;
                    end;
                 end;
     
               end; // fin de if i>0
     
    end; //fin de if enregpref.suggestion='oui'
    end; // fin de procédure
    Procédure du TEdit OnChange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure Tcompte.Edit1Change(Sender: TObject);
    begin
      if TEdit(Sender).Modified then
        Libelle;
    end;
    Procédure de saisie d'un mot dans la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure Tcompte.aide_saisieClick(Sender: TObject);
    begin
      test_auto:=1;
    compte.Edit1.Text:=compte.aide_saisie.Items[compte.aide_saisie.ItemIndex];
    aide_saisie.Clear;
    aide_saisie.Visible:=false;
    end;
    Procédure du TEdit OnExit
    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
    21
    22
    23
    24
    25
    26
     
    procedure Tcompte.Edit1Exit(Sender: TObject);
    var
    i,fl:integer;
    begin
     
               Seek(fich_index,1);Read(fich_index,enregindex);
               // vérification du mot saisi
               fl:=0;
               for i:=1 to enregindex.index_mot do
                 begin
                    if trim(edit1.Text)= enregtext.mot then fl:=1;
                 end;
     
               // si le mot n'a pas été trouvé on l'ajoute au fichier
               if (fl=0) and (length(edit1.Text)>2) then
                  begin
                     enregtext.mot:=trim(edit1.Text);
                     enregindex.index_mot:=enregindex.index_mot+1;
                     Seek(fich_index,1);Write(fich_index,enregindex);
                     Seek(fich_text,enregindex.index_mot);
                     Write(fich_text,enregtext);
     
                  end; // fin de if fl=0
     
    end;
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  2. #2
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    En fait, il faudrait intégrer tout le code dans une classe descendant de TEdit.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    merci pour ce code c'est trés utile , mais comment on crée le fichier fich_index et si possible comment on le remplace par un Ttable

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 54
    Points
    54
    Par défaut
    voici un code tres efficace pour saisie automatque dans un TEdit, il utilise un TTable au lieu de fichier :
    la table1est indexé sur le champ nom (liste pour d valeurs de saisie automatique),l'utilisation de la fonction uppercase permet de ne pas defirencier Maj et Min

    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
    21
    22
    23
    24
    25
    26
    procedure TForm.Edit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    Var B : Integer; A,D: STRING;
    begin
     
    If Key <> 8 Then Begin
    Table1.First;
    while not Table1.Eof do
      begin
      A:= Table1.fieldbyname(Nom).Text;
      D:=Edit1.Text;
      B := Edit1.SelStart;
      If uppercase(Copy(A,1, length(D))) = uppercase(Copy(D,1, length(D))) Then Begin;
      Edit1.Text := A;
      Edit1.SelStart := B;
      Edit1.SelLength := (Length(Edit1.Text) - B);
      //break;
      End;
     
      Table1.Next;
      end;
     
    end;
    //Fin de procedure //
     
    end;

Discussions similaires

  1. Saisie semi-automatique a partir d'une BD avec textbox
    Par dalinho84 dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/05/2013, 03h16
  2. [AC-2007] Comment faire une saisie semi-automatique sous access 2007
    Par spawny161184 dans le forum VBA Access
    Réponses: 10
    Dernier message: 02/11/2011, 15h09
  3. Réponses: 17
    Dernier message: 23/12/2009, 17h12
  4. Inserer saisie semi-automatique dans une macro
    Par Bib0ucH dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/08/2008, 14h45
  5. Comment désactiver la saisie semi-automatique pour un champ
    Par frochard dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 17/01/2008, 11h23

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