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

API, COM et SDKs Delphi Discussion :

Faire disparaitre le scrollbar de plusieurs dbgrid


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut Faire disparaitre le scrollbar de plusieurs dbgrid
    Bonjour,

    J'ai récupéré sur le net récemment ce code qui permet de faire disparaitre les scrollbars d'un dbgrid (verticale et horizontal).
    Mon besoin étant de faire disparaitre juste l'horizontale.
    J'utilise donc 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
    24
    25
    26
    27
    28
    29
    30
     
      private
        { Private declarations }
    ...
        FDBGridWndProc: TWndMethod;
        procedure DBGridWndProc(var Msg: TMessage);
    ...
    implementation
     
    Uses
      ....;
     
    {$R *.dfm}
    ...
     
    procedure TFormPrincipal.DBGridWndProc(var Msg: TMessage);
    begin
      ShowScrollBar(DBGridCategorie.handle, SB_HORZ, False);
      ShowScrollBar(DBGridCategorie.Handle, SB_VERT, True);
      FDBGridWndProc(Msg);
    end;
    ...
     
    procedure TFormPrincipal.FormCreate(Sender: TObject);
    Begin
    ....
      {CACHE LES SCROLLBARS DU DBGRIDCategorie}
      FDBGridWndProc := DBGridCategorie.WindowProc;
      DBGridCategorie.WindowProc := DBGridWndProc;
    ...
    Cela fonctionne parfaitement.
    Mais j'ai besoin de faire la même chose sur un autre dbgrid placé également sur cette form.
    J'ai tenté de doubler les procedures sans succès et avec plantage. donc j'ai essayé cela ci-dessous, mais je ne c'est pas quoi mettre à un moment.

    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
      private
        { Private declarations }
    ...
        FDBGridWndProc: TWndMethod;
        procedure DBGridMultipleWndProc(DBGrd: TDBGrid; var Msg: TMessage);
    ...
    implementation
    
    Uses
      ....;
    
    {$R *.dfm}
    ...
    
    procedure TFormPrincipal.DBGridMultipleWndProc(DBGrd: TDBGrid; var Msg: TMessage);
    begin
      ShowScrollBar(DBGrd.handle, SB_HORZ, False);
      ShowScrollBar(DBGrd.handle, SB_VERT, True);
      FDBGridWndProc(Msg);
    end;
    ...
    
    procedure TFormPrincipal.FormCreate(Sender: TObject);
    Begin
    ....
      {CACHE LES SCROLLBARS DU DBGRIDCategorie}
      FDBGridWndProc := DBGridCategorie.WindowProc;
      DBGridCategorie.WindowProc := DBGridMultipleWndProc( ??????); 
    // que puis-je mettre ici ? j'ai essayé DBGridMultplieWndProc(DBGridCategorie); mais cela ne fonctionne pas ?
    ...
    Avez-vous une idée ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    salut

    pourquoi pas simplement, sans autres fioritures

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowScrollBar(DBGrid1.Handle, SB_HORZ, False);
      ShowScrollBar(DBGrid2.Handle, SB_HORZ, False);
    .....
    end;

  3. #3
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Salut Serge,

    SI tu mets juste ce paramètre dans le Create de la form cela n'as aucun effet.

    J'ai fais cela, mais j'ai un dernier souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFormPrincipal.FormCreate(Sender: TObject);
    Begin
      {CACHE LES SCROLLBARS DU DBGRIDCategorie}
      FDBGridWndProc := DBGridCategorie.WindowProc;
      DBGridCategorie.WindowProc := DBGridWndProc;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFormPrincipal.DBGridWndProc(var Msg: TMessage);
    begin
      ShowScrollBar(DBGridCategorie.Handle, SB_HORZ, False);
      ShowScrollBar(DBGridObjets.Handle, SB_HORZ, False);
      FDBGridWndProc(Msg);
    end;
    Alors à l'ouverture de ma form la bar horizontal du Premier DBgrid disparait, mais celle du deuxième dbgrid non.
    Par contre si je passe d'un Dbgrid à l'autre (les grids sont dans un tabsheet différent par exemple) et bien le 2ème dbgrid cette fois n'affiche plus la barre du bas.

    Mais comment activé cela dés l'ouverture de mon projet ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    SI tu mets juste ce paramètre dans le Create de la form cela n'as aucun effet.
    Citation Envoyé par Andnotor
    cela ne fonctionne pas depuis le OnCreate, mais parfaitement depuis le OnShow:
    Bizarre , j'ai testé ça sur le OnCreate avec d3 et ça fonctionne nickel chrome

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Je pense avoir trouvé en fait :

    Dans ma form j'ai mis cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFormPrincipal.FormCreate(Sender: TObject);
    Begin
      FDBGridWndProc := TDBGrid(Sender).WindowProc;
      TDBGrid(Sender).WindowProc := DBGridWndProc;
    end;
    et la procedure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFormPrincipal.DBGridWndProc(var Msg: TMessage);
    begin
      ShowScrollBar(DBGridCategorie.Handle, SB_HORZ, False);
      ShowScrollBar(DBGridObjets.Handle, SB_HORZ, False);
      FDBGridWndProc(Msg);
    end;
    Ca peut surement aider quelqu'un.

    a+

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 934
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    Premièrement, Sender est la fiche et non le DBGrid ! Ton transtypage fonctionne parce que les deux dérivent de TControl (WindowProc est défini dans TControl). Mais attention à ce genre de transtypage sur de mauvais types.

    Ensuite ce code fonctionnerait la même chose (Sender est la fiche, donc Self, donc référence inutile ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TFormPrincipal.FormCreate(Sender: TObject);
    Begin
      FDBGridWndProc := WindowProc;
      WindowProc     := DBGridWndProc;
    end;
    Enfin, cela ne fonctionne pas depuis le OnCreate, mais parfaitement depuis le OnShow:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormShow(Sender: TObject);
    begin
      ShowScrollBar(DBGrid1.Handle, SB_HORZ, False);
      ShowScrollBar(DBGrid2.Handle, SB_HORZ, False);
    end;

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

Discussions similaires

  1. Faire disparaitre plusieurs div
    Par BernardT dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2009, 12h00
  2. [FLASH MX] Une scrollbar pour plusieurs champs texte
    Par ffmlgraphics dans le forum Flash
    Réponses: 1
    Dernier message: 08/08/2005, 16h45
  3. Réponses: 10
    Dernier message: 01/04/2005, 13h14
  4. [Scrolling] Mouse Wheel avec plusieurs DBGrid
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 06/08/2004, 17h30
  5. Réponses: 5
    Dernier message: 27/02/2004, 11h20

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