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

Composants VCL Delphi Discussion :

Forcer une scrollbar horizontale à se déplacer


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut Forcer une scrollbar horizontale à se déplacer
    Bonjour,

    Dans un treeview, j'ai un problème lorsque l'utilisateur cliquer sur un noeud de mon arbre : si le nom est trop long, la scrollbar horizontale se déplace tout à droite de mon treeview, ce qui est assez gênant.

    J'aimerais savoir s'il est possible de forcer une scrollbar à se repositionner à gauche, et que l'affichage du treeview revienne également à gauche (qu'il suive la scrollbar en fait).

    J'ai essayé de manipuler les propriétés du genre EM_SCROLL, etc, mais sans résultats...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 158
    Points : 89
    Points
    89
    Par défaut
    J'ai le meme genre de problème, je voudrais placer l'ascenseur ou je veux. Donc si quelqu'un, en relisant ce message, a une idée...

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SendMessage(TreeView.Handle, WM_HSCROLL, SB_TOP, 0);
    EM_SCROLL, comme son E, l'indique c'est pour un EDIT !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    Aaah, enfin une réponse plus d'un an après avoir posé la question

    Je vais pouvoir mettre le tag 'résolu'

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    Hello,

    Je réouvre ce topic car j'ai besoin d'un complément de réponse :

    J'ai un long treeview qui doit être reconstruit périodiquement. Le problème est que lorsque je le reconstruis, la scrollbar verticale se remet tout au sommet du treeview. Donc j'aimerais stocker la position de la scrollbar et lorsque je reconstruit mon treeview, la repositionner à cette position.

    J'ai pas mal fouiné et essayé plusieurs choses, mais impossible de forcer le déplacement de ma scrollbar comme je le souhaite. Voici mon code actuel :

    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
     
    var info : TScrollInfo ;
         position : Integer ;
    begin
     
    position := 10 ; //exemple
     
    GetScrollInfo(Treeview.Handle, SB_VERT, info) ; //pour remplir les paramètres de info
    with info do
    begin
      cbSize := SizeOf(info) ;
      fMask := SIF_POS ;
      nTrackPos := position ;
    end ;
     
    SetScrollInfo(Treeview.Handle, SB_VERT, info, true) ;
    end ;
    Merci pour votre aide

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Stocke plutôt le noeud et joue avec MakeVisible ... en général cela fonctionne assez bien
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Stocke plutôt le noeud et joue avec MakeVisible ... en général cela fonctionne assez bien
    Malheureusement je ne peux pas car j'utilise un composant acheté comme treeview (TeeTree) et celui-ci utilise des noeuds qui n'héritent pas de TTreeNode, donc n'ont pas la fonction MakeVisible

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Si c'est au moins un TreeView Windows qui est derrière tente un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(TreeView.Handle, TVM_ENSUREVISIBLE, 0, Longint(Item.Handle)
    Si c'est un composant entièrement dessiné, ça semble plus chiant, ... le WM_SCROLL ne fonctionnera pas ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    J'ai vérifié et ce n'est pas un Treeview Windows. Mon Treeview hérite d'un TCustomPanel -> TCustomPanelNoCaption.

    Pour le WM_SCROLL, il est dans une Unit ? J'ai un message "Undeclared identifier", tout comme pour le TVM_ENSUREVISIBLE, et impossible de trouver où ils se trouvent.


    Je pense toutefois que le bout de code que j'ai mis un peu plus haut n'est pas loin de la solution, car j'arrive à déplacer la scrollBar vers TOP ou BOTTOM, mais pas à la positionner à un endroit personnalisé.

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    WM_SCROLL, c'est un nom générique pour les message de type scroll
    TVM_ENSUREVISIBLE, doit être dans CommCtrl mais ne fonctionne qu'avec un TreeView Windows,

    As tu essayé SetScrollPos
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 422
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    As tu essayé SetScrollPos


    SetScrollPos fonctionne ! Pourtant j'étais réticent car j'avais lu sur MSDN que :

    Note The SetScrollPos function is provided for backward compatibility. New applications should use the SetScrollInfo function.
    La scrollbar bouge enfin, mais le treeview ne se déplace pas en conséquence. Je vais voir si j'arrive à y remédier.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/02/2011, 10h11
  2. Réponses: 7
    Dernier message: 12/02/2010, 17h04
  3. Déplacer le curseur d'une ScrollBar
    Par Alouka dans le forum MFC
    Réponses: 2
    Dernier message: 24/01/2008, 11h02
  4. [JScrollPane]Comment savoir quand une scrollbar apparait ?
    Par FrigoAcide dans le forum Composants
    Réponses: 4
    Dernier message: 29/04/2004, 10h10
  5. forcer une fenetre à etre au premier plan jusqu'a ...
    Par peppena dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/12/2003, 16h14

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