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 :

placer curseur pour édit sur cellule d'un stringrid


Sujet :

Delphi

  1. #1
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut placer curseur pour édit sur cellule d'un stringrid
    Bonjour,

    Le titre n'est peut être pas très explicite. Je voudrais que le curseur pour éditer du texte vienne se placer dans une cellule spécifique d'un stringGrid après un clic sur un bouton.

    Bonus? : En fait, la cellule spécifique concerne la dernière ligne ajoutée et une colonne qui sera toujours la même. Existe-t-il un moyen de connaître la dernière ligne ajoutée dans le stringGrid et de garder le curseur dessus sachant qu'à chaque ajout, la grille est triée alphabétiquement aussitôt après selon une colonne. (Donc la dernière ligne de la grille n'est pas forcément la dernière ligne ajoutée).

    Pouvez-vous m'aider s'il vous plaît ?


    Merci d'avance.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Il faut utiliser les propriété Row et Col de la TStringGrid

    En leur affectant une valeur on se positionne sur une cellule donnée.
    Cela devrait répondre au point 1

  3. #3
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    ok, merci pour ta réponse ! ça m'aide déjà

    est-ce que quelqu'un peut m'aider un peu pour la suite ? s'il vous plait ?

  4. #4
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    Apparemment il faut utiliser les options goEditing et goAlwaysShowEditor...

    Mais comment dois-je m'y prendre pour que, lorsque je clique sur le bouton "ajouter" (qui ajoute une ligne dans le stringGrid), à la ligne ajoutée et à une colonne donnée, la cellule passe en mode édition ?

    J'ai essayé de rajouter le code suivant à la suite du code du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GrilleSaisieProjet.Options:=GrilleSaisieProjet.Options+[goEditing,goAlwaysShowEditor];
    mais je dois mal l'utiliser


    Pouvez-vous me guider s'il vous plaît ?

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 346
    Points : 3 124
    Points
    3 124
    Par défaut
    Bonjour,

    essaye de voir si la dernière ligne de la grille n'est pas donnée par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Row := StringGrid1.RowCount - 1  ;
    après ton tri.

    En plus tu as TopRow qui désigne la première ligne visible et VisibleRowCount qui donne le nombre de ligne à l'écran (cela te permet d'atteindre la dernière ligne affichée en bas de ta grille)

    A+

    Charly

  6. #6
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    merci pour ta réponse mais je sais déjà comment avoir la dernière ligne de la grille, le problème c'est que j'aimerai récupérer la dernière ligne ajoutée, qui n'est pas forcément la même :/

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    C'est au niveau de ton tri qu'il faut que tu conserves le nouvel emplacement de la ligne insérée.

    Ou bien effectuer une recherche après tri de ta ligne si tu disposes d'un critère permettant de l'identifier.

    @+ Claudius

  8. #8
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    voici le code de mon tri :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     //tri du tableau selon le libelle
      with Grille do
      begin
        for i:=2 to rowcount-3 do
          for j:=i+1 to rowcount-2 do
            if (cells[1,i]>cells[1,j])  then
            begin
              S := rows[i].text;
              rows[i].text := rows[j].text;
              rows[j].text := S;
            end;
    Comment dois-je m'y prendre ?

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Avant le tri, la ligne ajoutée est bien en dernière position ?

  10. #10
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    oui elle se situe à la ligne RowCount -1

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Bon ben déjà tu as un soucis, ton tri ne prends pas en compte la dernière ligne (ni la première d'ailleurs Row = 1).

  12. #12
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    non non je l'ai bien géré ça c'est parce que j'ai des en-têtes de colonnes et à la fin de mon tableau j'affiche d'autres informations aussi.

    bref mon tri fonctionne très bien !

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par senv33 Voir le message
    bref mon tri fonctionne très bien !
    OK

    Pendant le tri il suffit de conserver dans une variable l'évolution de la position de la dernière ligne.

    Test ceci:
    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
    var
      I, J, NewRow: Integer;
      S: string;
    begin
      with Grille do
      begin
        NewRow := RowCount - 2;
        for I := 2 to RowCount - 3 do
          for J := I + 1 to RowCount - 2 do
            if (Cells[1, I] > Cells[1, J])  then
            begin
              if I = NewRow then
                NewRow := J
              else if J = NewRow then
                NewRow := I;
              S := Rows[I].Text;
              Rows[I].Text := Rows[J].Text;
              Rows[J].Text := S;
            end;
        // ShowMessage(IntToStr(NewRow));
        Col := 1;
        Row := NewRow; // Se rendre sur la nouvelle position après tri.
      end;
    end;
    @+ Claudius

  14. #14
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    salut, pourquoi tu casse ta tête avec stringgrid?
    TclientDataset+dbgrid, feront tout pour toi (affichage, insertion,modification, trie) 5 min de travail, et en plus tu peut enregistré tes données rapidement dans un fichier;
    http://delphi.developpez.com/sources/?page=sec_app_bdd
    http://www.jcolibri.com/articles/bdd...taset_xml.html
    bon dev
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  15. #15
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    @ Cl@udius : merci beaucoup, ça fonctionne très bien

    @ edam : merci, je le saurai pour la prochaine fois là, je vais continuer sur mon stringGrid, j'en ai bientôt fini !

  16. #16
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    j'ai encore un petit problème..

    Vu qu'après un clic sur mon bouton, la cellule concernée est sélectionnée, j'aimerai qu'elle passe également au mode édition pour ainsi éviter de cliquer une fois dessus.

    Pour se faire, j'ai essayé de mettre ceci après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if NewRow <> Grille.RowCount-2 then
    begin
        SetFocus;
        EditorMode := True;
    end;
    mais j'ai une erreur : le contenu de mon avant dernière ligne
    n'est pas une valeur en virgule flottante correcte
    . j'ai fait en sorte que cette ligne du tableau, qui est fusionnée sur toutes les colonnes, ne puisse être ni sélectionnée ni éditée.

    Comment puis-je résoudre ce problème s'il vous plaît ?

  17. #17
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par senv33 Voir le message
    @ edam : merci, je le saurai pour la prochaine fois là, je vais continuer sur mon stringGrid, j'en ai bientôt fini !
    je veux pas te découragé, mais je crois pas..!! , car j'ai déjà passé par là
    dans tout les cas c'est un bon exercice, pour comprendre le TStringrid, son fonctionnement et ces évènements, bon dev
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  18. #18
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    avec ce 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
    18
    19
    20
    21
    22
    23
    var
      I, J, NewRow: Integer;
      S: string;
    begin
      with Grille do
      begin
        NewRow := RowCount - 2;
        for I := 2 to RowCount - 3 do
          for J := I + 1 to RowCount - 2 do
            if (Cells[1, I] > Cells[1, J])  then
            begin
              if I = NewRow then
                NewRow := J
              else if J = NewRow then
                NewRow := I;
              S := Rows[I].Text;
              Rows[I].Text := Rows[J].Text;
              Rows[J].Text := S;
            end;
        Col := 1;
        Row := NewRow; // Se rendre sur la nouvelle position après tri.
      end;
    end;
    indice de grille hors limite
    : ce problème survient quand je clique sur une ligne de mon stringGrid et qu'ensuite je veuille afficher un autre stringGrid sur lequel il n'y a pas tant de ligne et donc où le numéro de ligne n'apparaît pas.

    en utilisant le débugger, je crois que ça situe vers le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (Cells[1, I] > Cells[1, J])  then
    Vous pouvez m'éclairer ?

  19. #19
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Je ne vois pas très bien le rapport avec le 2° StringGrid pour l'instant.
    Tu effectues ce tri également sur le 2° ?

  20. #20
    Nouveau membre du Club Avatar de senv33
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    Re,

    je me suis mal exprimé :S

    en fait c'est lorsque j'affiche de nouvelles données sur le même stringGrid et où le nombre de ligne est moins important.

    exemple : je clique sur la 17e ligne de mon stringGrid, ensuite je change les données à l'intérieur de mon stringGrid, il n'y a plus que 10 lignes et du coup avant l'affichage des données, j'ai cette erreur !

Discussions similaires

  1. Plusieurs fois Worksheet_SelectionChange pour Zoom sur Cellules
    Par oleev dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/01/2015, 00h50
  2. Réponses: 1
    Dernier message: 25/03/2013, 08h39
  3. [XL-2007] Tempo sur cellule pour sa validation
    Par NulenExcel77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/10/2011, 09h30
  4. Click sur cellule pour affichage feuille
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2008, 11h07
  5. Réponses: 5
    Dernier message: 24/05/2006, 20h22

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