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

C++Builder Discussion :

TDBGRid et ScrollBar [Non suivi]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par défaut TDBGRid et ScrollBar
    Bjr

    Je développe sous BC++ et cherche à ôter la scrollbar verticale d'un DbGrid. La doc trouvée ici mentionne la fonction ShowScrollBar qui fonctionne très bien sous Win2000 mais plante sur XPPro (Acces Violation ... Read Of Address 0x0000..).

    Après un rapide parcours de la doc je tente un HandleNeeded() sans résultat.

    Problème connu ? ou autre solution ?

    A noter que le compilateur refuse la propriété DbGrid-ScrollBars elle n est pas accessible

    merci à vous

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par défaut
    Pardon pardon, je suis allé un peu vite. L'exception venait d'une autre raison.

    Mais du coup je me rends compte que la ScrollBar ne disparait pas même en Win2000 (je l'ai cru car le nombre de lignes était insuffisant).

    Y a t il une autre méthode que ShowScrollBar() ?

  3. #3
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    je pense que ShowScrollBar() est la meilleure méthode,

    seulement elle doit être appelée à chaque fois que le composant Dbgrid est redessinnée,sinon elle réapparait.

    il n'ya pas de gestionnaire d'evenement OnPaint accessible de l'exterieur pour le DBGrid.
    Donc il faut faire un composant descendant de TDBGrid pour pouvoir acceder
    à la méthode Paint de DBGrid.
    Rien de bien compliqué je te rassure :
    Menu->Composant ->nouveau composant ,etc..
    comme nom de composant j'ai mis DjDBGrid mais tu mettre ce que tu veux

    dans le .h :
    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
    class PACKAGE TDjDBGrid : public TDBGrid
    {
    private:
            bool FVertScrollVisible;   // scroll vertical
            void __fastcall SetVScrollVisible(bool fvisible);
            bool FHorzScrollVisible;   //scrll horizontal
            void __fastcall SetHScrollVisible(bool fvisible);
     
     
    protected:
            virtual void __fastcall Paint(void);
    public:
            __fastcall TDjDBGrid(TComponent* Owner);
    __published:
            __property Boolean ScrollVertical = {read =FVertScrollVisible,write=SetVScrollVisible, default=0};
            __property Boolean ScrollHorizontal ={ read =FHorzScrollVisible,write=SetHScrollVisible, default=0};
     
    };
    dans le .cpp

    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
    #include "DjDBGrid.h"
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    // ValidCtrCheck est utilisé pour vérifier que les composants créés n'ont
    // aucune fonction virtuelle pure
    //
     
    static inline void ValidCtrCheck(TDjDBGrid *)
    {
            new TDjDBGrid(NULL);
    }
    //---------------------------------------------------------------------------
    __fastcall TDjDBGrid::TDjDBGrid(TComponent* Owner)
            : TDBGrid(Owner)
    {
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TDjDBGrid::Paint(){
     
          //à chaque fois que le grille est redessinée
         // elle met ou eleve les scrollbar :
     
           ShowScrollBar(Handle,SB_HORZ,FHorzScrollVisible);
           ShowScrollBar(Handle,SB_VERT,FVertScrollVisible);
            TDBGrid::Paint();
    }
    //---------------------------------------------------------------------------
    void __fastcall TDjDBGrid::SetVScrollVisible(bool fvisible){
           FVertScrollVisible=fvisible;
           Repaint();
    }
    //---------------------------------------------------------------------------
    void __fastcall TDjDBGrid::SetHScrollVisible(bool fvisible){
           FHorzScrollVisible=fvisible;
     
           Repaint();
    }
    //---------------------------------------------------------------------------
    namespace Djdbgrid
    {
            void __fastcall PACKAGE Register()
            {
                     TComponentClass classes[1] = {__classid(TDjDBGrid)};
                     RegisterComponents("DjobDev", classes, 0);
            }
    }
    //---------------------------------------------------------------------------

    y'a plus qu'à l'installer et via ll'EDI : propriétés ScrollVertical et ScrollHorizontal

    ou bien le code par DjDbgrid1->ScrollVertical =true;

    [EDIT]
    ou lieu des repaint je crois qu'il vaut mieux des Invalidate, je sais plus,
    mais des membres plus compétents que moi dans la création de composant pourront t'en dire plus à ce sujet ...
    [/EDIT]

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    502
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 502
    Par défaut
    Super, en effet j'ai constaté la rémanence du ScrollBar...

    Je suis un peu pris par le temps aussi je ne testerai pas ta méthode immédiatement mais merci beaucoup quand même. Je vais me garder cela pour mes petits congés de Noel.

Discussions similaires

  1. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  2. Dimensions des colonnes d'un TDBGrid
    Par osmose22 dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/12/2002, 11h27
  3. [VB6] [Scrollbar] Valeur maximale supérieure à 32750
    Par néo333 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/12/2002, 10h24
  4. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 03h51
  5. [visuel]ScrollBar et StatusBar
    Par psl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/08/2002, 21h28

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