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 :

Histoire de surbrillance


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut [StringGrid]Selectionner une cellule & scroller pour l'afficher
    Bonjour à tous,

    Quand je fais une recherche dans une ListBox avec une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       for x := 0 to ListBox.Items.Count-1 do begin
         if ListVal.Items.Strings[x] = <quelque chose> then
           // etc...
    et que je mets à l'intérieur de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       ListBox.ItemIndex := x;
    la surbrillance dans la ListBox suit la valeur x et si je sors de la boucle car ma recherche a abouti, je vois sur quelle ligne de la ListBox le critère de recherche a été satisfait. Jusqu'ici rien d'anormal !

    Maintenant, je pose mon problème :

    Si j'utilise une StringGrid à la place de la ListBox avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       for x := 0 to Grille.RowCount-1 do begin
         if Grille.Cells[0,x] = <quelque chose> then
           // etc...
    j'aimerais que la 'row' ou la 'cell' ayant satisfait au critère de recherche soit en surbrillance comme dans le premier exemple, ce qui n'est pas le cas, bien que la StringGrid soit déclarée avec les options suivantes :
    [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing]


    Deuxième point, si ce n'est pas trop demander :
    Ma StringGrid a une certaine hauteur et comme le nombre de 'Rows' est important, j'ai une 'ScrollBar' verticale à sa droite. Jusque là rien d'anormal !

    Quand la condition de recherche a été satisfaite, comme dit précédemment, est-il possible par code de faire un scroll automatique pour que la 'row' concernée soit recentrée dans la partie visible de la grille ?

    Cela en fait des questions !!!
    J'espère avoir été explicite, et excusez les fautes de frappe.
    Merci de m'aider.

    A vous lire...
    Pierre

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Déjà, voici quelques éléments de réponses... seule le défilement de ScroolBars n'est pas résolu (je cherche encore un peu).

    En ce qui concerne la sélection d'une ligne, il faut faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    MaSelection:TGridRect;
    begin
      MaSelection.Top:=50; //Commence à la ligne 49 (car le début = 0)
      MaSelection.Bottom:=50; // Fini à la ligne 49
      MaSelection.Left:=1; // Sélection de la seconde colonne (car commence à 0)
      MaSelection.Right:=StringGrid1.ColCount-1; // Jusque la dernière
      StringGrid1.Selection:=MaSelection; // Sélectionne les Cellules définies précédemment
    end;
    Pour mettre les Options dans la StringGrid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1.Options:=[goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing];
    Voici déjà de quoi faire
    A+

    PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1.TopRow:= 50 //pour afficher la ligne ... mais je ne sais pas si ça va convenir

  3. #3
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.SelectAndGoToCell(const ARow, ACol: integer);
    var
      r: TGridRect;
    begin
      r := StringGrid1.Selection;
      r.Top := ARow;
      r.Left := ACol;
      r.BottomRight := r.TopLeft;
     
     StringGrid1.Selection := r; //selection de la cellule
     StringGrid1.TopRow := ARow; // on met cette ligne en premiere ligne non fixed
    :s a 1 minute pres !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut Surbrillance
    Merci pour les différentes réponses
    Je fais des essais et vous tiens au courant !
    A vous lire...
    Pierre

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    à l'attention de 'ero-sennin'

    j'ai vu dans un autre sujet que vous disiez que pour déplacer
    le scroll en bas, il fallait écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(Memo1.Handle,WM_VSCROLL,SB_BOTTOM,0);
    (ce qui explique peut-être le '0' après BOTTOM)

    Aussi je me dis que pour mon problème de scroll dans ma StringGrid
    (je l'ai nommé tout simplement Grille)
    je pourrais dire que :
    - j'ai dans ma grille 'nbr' rows écrites ( nbr est un nombre connu)
    - la hauteur d'une row est connue
    - les paramètres des carctères écrits (FontSize) sont connus
    - je sais le numero de la 'row' sur laquelle je veux pointer

    A partir de tout cela, je pourrais peut-être en déduire mathématiquement
    une grandeur X , et écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(Grille.Handle,WM_VSCROLL,SB_BOTTOM,X);
    Qu'en pensez-vous ?

    Je fais parfois quelque chose de similaire pour ajuster la hauteur d'une
    ListBox lorsque j'y ajoute des lignes en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox.Height := {nb lignes} x {hauteur d'une ligne};
    bien que cela soit toutefois un peu éloigné de ce que je veux faire
    avec ma StringGrid !

    A vous lire...

    Pierre

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Salut.

    Ça serait sympa (et utile, quand on fait des recherches), de changer ce titre complètement inapproprié par quelque chose comme "Sélectionner une cellule dans une StringGrid".
    Pour ce faire, éditer le post d'origine.

    Merci pour ceux qui perdent leur temps à deviner ce qui se cache sous des titres totalement abscons, des fois...
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    après essai, l'indexation de la position du cuseur de
    la ScrollBar de ma StringGrid (comme prévu dans le post ci-dessus)
    ne fonctionne pas du tout ! Perdu... tant pis pour moi

    A vous lire...

    Pierre

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bonjour Jipété,

    C'est vrai, j'aurais pu mettre :
    'comment faire qu'une StringGrid soit centrée sur la rangée
    sélectionnée par programme' mais cà me paraissait long !
    et de fait mon titre est plutôt abstrait !!!
    bonne remarque, j'en tiendrai compte à l'avenir
    en me creusant un peu les méninges.

    Pierre

  9. #9
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    pourquoi n'utilise tu pas la propriete TopRow pour deplacer la scrollbar?

    sinon, tu peux toujours (mais c'est plus galere) faire quelque chose du genre

    (SG.Height - (SG.fixedRowCount * SG.FixedRowHeight) / SG.RowHeight pour connaitre le nombre de lignes affichées, mais je ne vois pas l'interet vu que TopRow est LA propriete qu'il te faut?!

  10. #10
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    "Déplacer curseur de ScrollBar par programme"
    pas tres explicite non plus?
    ton probleme, c'est selectionner et centrer un cellule d'une stringgrid ?
    alors pourquoi pas mettre en titre :
    "[StringGrid]Selectionner une cellule & scroller pour l'afficher"
    enfin c'est juste une proposition, mais dans ton titre, on ne sait pas que ca parle de stringgrid, on sait que ca parle de programme, mais ce forum en est un peu le but

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    bonjour guillemouze,

    j'apprecie ta remarque au sujet de mon intitulé
    et j'aime beaucoup ta proposition, mais je ne
    sais pas comment faire la modif du titre !!!
    si quelqu'un peut m'aider....
    j'en tiendrai compte pour mes prochains sujets

  12. #12
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Citation Envoyé par berpi Voir le message
    bonjour guillemouze,

    j'apprecie ta remarque au sujet de mon intitulé
    et j'aime beaucoup ta proposition, mais je ne
    sais pas comment faire la modif du titre !!!
    si quelqu'un peut m'aider....
    j'en tiendrai compte pour mes prochains sujets
    Il suffit d'éditer ton premier post (comme l'a mentionné Jipété).
    A+

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    J'ai 300 lignes dans ma Grille
    je n'en affiche que 30 par manque de place dans la fenêtre ouverte
    si je sélectionne la ligne 200 et que je la met en évidence
    par la technique du post #2 qui fonctionne très bien (merci ero-sennin)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Surbrillance.Top:=pion+1; // pion : ligne choisie
    Surbrillance.Bottom:=pion+1; // une seule ligne
    Surbrillance.Left:=1; // colonne début
    Surbrillance.Right:=Grille.ColCount-1; // colonne fin
    Grille.Selection:=MaSelection; // en Surbrillance
    elle passe en 'surbrillance' bleue mais est toujours invisible
    car elle reste dans les profondeurs de la grille.
    pour la voir, je dois scroller manuellement vers le bas

    Et puis voilà que TopRow arrive ! (merci guillemouze)

    il me suffit de rajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Grille.TopRow := pion; // vision de la ligne !
    et ça fonctionne !!! Miracle...

    Un grand merci à tout le monde.

    Un seul regret : avoir très mal formulé ma requête,
    avoir pu changer le titre dans le premier post
    mais ça n'a pas changé le titre dans la page 'Discussions'

    A vous lire...

    Pierre

  14. #14
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Bonjour

    Je regardais nonchalamment cette discussion, quand j'ai compris comment résoudre un petit pb pas très gênant que je traîne depuis quelques temps, sans avoir trouvé de solution, ni vraiment cherché d'ailleurs

    Dans un prog, j'ai besoin de redessiner une TStringGrid. Le pb c'est qu'aprèscelle-ci défile jusquà la dernière ligne, alors que je voulais conserver le scrolling à l'état précédent

    En fait il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      PremiereLigneAffichee:=MaGrille.TopRow;
      MaGrille.Repaint;  
      MaGrille.TopRow:=PremiereLigneAffichee;
    On en apprend tous les jours...
    Choisir, c'est renoncer...

  15. #15
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    Hé oui, on en apprend tous les jours! C'est pas magnifique! Moi même je ne savais comment faire et en parcourant l'aide Delphi avec un peu de test, j'ai pu trouver un petit bout de la solution

    Sinon, un petit résolu pour ce thread si tout est ok ?

  16. #16
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    @OutOfRange :
    as tu essayé un simple
    il me semble que ca ne change pas le scroll de la grille

  17. #17
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    salut guillemouze

    En fait je me suis planté dans mon post
    Ce n'est pas un repaint qui pose pb, mais le remplissage de toutes les cellules de la grille, du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for l:=0 to grille.rowcount-1 do
      for c:=0 to grille.colcount-1 do
        grille.cells[c,l]=....
    En effet, je ne pense pas qu'une méthode invalidate, refresh ou repaint modifie le scrolling

    Merci qd mm pour ta suggestion
    Choisir, c'est renoncer...

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

Discussions similaires

  1. [C#] histoire de commit et de roolback
    Par dupin40 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 18/05/2021, 17h45
  2. [VB.NET] Sélectionner un champ, le mettre en surbrillance
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 26/09/2007, 20h11
  3. comment savoir quel menu est en surbrillance?
    Par LRobi dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2005, 09h04
  4. Icone en surbrillance dans la barre de tâche
    Par pp dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 29/07/2004, 23h45
  5. Enlever la surbrillance lors d'une recherche avec vi
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 04/03/2004, 13h55

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