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

Lazarus Pascal Discussion :

Auto-suggestion sur une stringgrid


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut Auto-suggestion sur une stringgrid
    Bonjour,

    Je souhaiterais qu'une liste s'affiche au fur et à mesure qu'on tape un texte dans la cellule d'un stringgrid.
    La bonne illustration de ce que je souhaite faire est donnée par ce qui se passe quand on tape une requête dans un moteur de recherche : au fur et à mesure de la frappe, des suggestions s'affichent, et il est possible par un simple "entrée" (ou un clic de souris) de sélectionner la suggestion sans taper tout l'ensemble.

    Dans mon cas, les suggestions proviendraient du contenu d'un fichier que je chargerais dans un second stringgrid invisible de l'utilisateur. Les utilisateurs étant parfois rétif à l'utilisation des majuscules, il faut aussi que je m'affranchisse de cela, mais ce n'est pas un gros soucis.

    Avez-vous une piste pour me guider, sachant que mon niveau est celui d'un amateur (voir topic précédent concernant un graphique de type "radar") ?

    Merci

    D.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    salut

    la solution la plus simple est de passer par le inplaceEditor

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut
    On ne peut pas dire que le wiki soit très prolixe sur cette propriété ni même la doc de Lazarus

    Une doc à me conseiller ?

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    salut

    je connais pas parfaitement lazarus
    mais je pense que tu dois faire un truc de ce genre

    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
    // On defini et on utilise le select editor
    procedure TForm1.StringGrid1SelectEditor(Sender: TObject; aCol, aRow: Integer; var Editor: TWinControl); 
    begin 
       if aRow= MaColone then 
      begin 
          Editor := (Sender as TStringGrid).EditorByStyle(cbsPickList); 
          TPickListCellEditor(Editor).Items.Assign(FieldList) 
       end
      else 
          Editor := nil; // readonly the rest of rows (or select another editor) 
    end; 
    ...
    procedure TForm1.StringGrid1PickListSelect(Sender: TObject); 
    begin 
     //  C'est ici que tu recuper l'element de la liste
    end;

  5. #5
    Membre Expert

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

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonjour diam's.

    Difficile dans ton cas d'utiliser un InplaceEditor du genre ComboBox.
    En effet, on doit "vider" puis "remplir" le ComboBox à chaque caractère frappé.
    Or, l'événement SelectEditor n'est appelé qu'une fois au début de l'édition.
    Et je ne suis pas arrivé non plus à modifier la liste grâce à l'événement OnSetEditText.

    Il y a sans doute mieux, mais la solution que j'ai trouvée est d'utiliser un TListBox indépendant du StringGrid.
    Utilisation de l'événement OnSetEditText pour capturer le texte en cours.
    Recherche dans ton stringgrid caché (tu pourrais utiliser un TStringList).
    Affichage du mot(s) dans le ListBox.
    Clic dans le ListBox pour modifier la valeur de la cellule.
    Inconvénient : ce clic fait perdre la focalisation au stringgrid.

    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
    procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: string);
    begin
       with StringGrid1 do
         if ACol = 1 then
            if Length(Value) < 2 then
               ListBox1.Clear
            else
               SearchNextValue(Value);
    end;
     
    procedure TForm1.SearchNextValue(S: string);
    var
      x, y: integer;
    begin
       ListBox1.Clear;
       S:= LowerCase(S);
       with StringGrid2 do
         for y:= 0 to ColCount - 1 do
            for x:= 0 to RowCount - 1 do
               if Pos(S, LowerCase(Cells[y,x])) = 1 then
                 ListBox1.Items.Add(Cells[y,x]);
    end;   
     
    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
       with ListBox1, StringGrid1 do
         if ItemIndex >= 0 then
            Cells[Col, Row]:= Items[ItemIndex];
    end;
     
    procedure TForm1.StringGrid1SelectCell(Sender: TObject; aCol, aRow: Integer;
      var CanSelect: Boolean);
    begin
       ListBox1.Clear;
    end;
    Cordialement
    Thierry

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 489
    Par défaut
    pour info le TPickListCellEditor descend du Tcombobox donc je pense qu'il est facile de récupérer les événements comme le OnkeyDown ou autre
    après il faut effectivement gérer la liste en fonction

Discussions similaires

  1. Requete Auto jointure sur une table
    Par Guillaume 78 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/11/2007, 09h26
  2. [MySQL] creation de formulaire auto basé sur une table
    Par mj.mj12 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/11/2007, 14h31
  3. Problemes de bordures au clic sur une StringGrid
    Par jmulans dans le forum Delphi
    Réponses: 8
    Dernier message: 27/06/2007, 12h34
  4. auto-incrémentation sur une primary key avec sql server
    Par pops4 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/05/2007, 14h24
  5. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05

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