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 :

Masquer les scrollbars des DBGrid et utiliser des flèches personnalisées (Delphi 7)


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut Masquer les scrollbars des DBGrid et utiliser des flèches personnalisées (Delphi 7)
    Bonjour,
    Sur Delphi 7, je souhaite masquer les barres de défilement (verticale et horizontale) de deux composants DBCtrlGrid1 et DBCtrlGrid2, et les remplacer par des icônes personnalisées (flèches haut/bas et gauche/droite).
    L’objectif est d’apporter une touche d’innovation à l’interface utilisateur (UI) en modernisant l’apparence de la navigation dans les grilles.
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    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 593
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je ne vais que vous donner la piste, pas la solution.

    Un TDBGrid est une classe dérivée de TCustomGrid. TCustomGrid a la propriété protégée ScrollBars par défaut à ssBoth.
    Votre objectif est donc de mettre cette valeur à ssNone.

    Il vous faut donc "hacker", la classe TDBGrid pour quelle soit traitée comme une TCustomGrid pour accéder à cette propriété protégée.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    C'est juste la question exacte de la FAQ : Comment masquer l'ascenseur vertical/horizontal dans un DBGrid ?

    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 très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Merci à ShaiLeTroll et SergioMaster pour vos réponses.
    Vous avez bien répondu concernant le masquage de la scrollbar. Cependant, comment pourrais-je remplacer ce fonctionnement par des icônes, s’il vous plaît ?

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    SendMessage WM_HScroll ou manuellement DataSet Next, Prior ...

    Etudie le code tu TDBNavigator
    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

  6. #6
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 469
    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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    procedure HideScrollBars(Grid: TDBCtrlGrid);
    begin
      ShowScrollBar(Grid.Handle, SB_VERT, False);
      ShowScrollBar(Grid.Handle, SB_HORZ, False);
    end;
     
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      HideScrollBars(DBCtrlGrid1);
      HideScrollBars(DBCtrlGrid2);
    end;
     
    procedure TForm1.btnUpClick(Sender: TObject);
    begin
      DBCtrlGrid1.Scroll(-1); // vers le haut
    end;
     
    procedure TForm1.btnDownClick(Sender: TObject);
    begin
      DBCtrlGrid1.Scroll(1); // vers le bas
    end;
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.
    Ce n’est pas un bogue - c’est une fonctionnalité non documentée.

  7. #7
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 469
    Par défaut
    Un TDBGrid est une classe dérivée de TCustomGrid. TCustomGrid a la propriété protégée ScrollBars par défaut à ssBoth.
    Votre objectif est donc de mettre cette valeur à ssNone.

    Il vous faut donc "hacker", la classe TDBGrid pour quelle soit traitée comme une TCustomGrid pour accéder à cette propriété protégée.
    Voici un bref exemple :

    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
    unit DBGridHack;
     
    interface
    uses
      Vcl.Grids, Vcl.DBGrids;
     
    procedure DisableGridScrollBars(Grid: TDBGrid);
     
    implementation
     
    type
      // Classe factice, hérite de TCustomGrid
      TCustomGridCracker = class(TCustomGrid) 
    end;
     
    procedure DisableGridScrollBars(Grid: TDBGrid);
    begin
      // On caste le TDBGrid en TCustomGridCracker pour accéder à ScrollBars
      TCustomGridCracker(Grid).ScrollBars := ssNone;
    end;
     
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    uses
      DBGridHack;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DisableGridScrollBars(DBGrid1);
    end;
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.
    Ce n’est pas un bogue - c’est une fonctionnalité non documentée.

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    Voici un bref exemple :

    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
    unit DBGridHack;
     
    interface
    uses
      Vcl.Grids, Vcl.DBGrids;
     
    procedure DisableGridScrollBars(Grid: TDBGrid);
     
    implementation
     
    type
      // Classe factice, hérite de TCustomGrid
      TCustomGridCracker = class(TCustomGrid) 
    end;
     
    procedure DisableGridScrollBars(Grid: TDBGrid);
    begin
      // On caste le TDBGrid en TCustomGridCracker pour accéder à ScrollBars
      TCustomGridCracker(Grid).ScrollBars := ssNone;
    end;
     
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    uses
      DBGridHack;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DisableGridScrollBars(DBGrid1);
    end;

    [Fatal Error] DBGridHack.pas(5): File not found: 'Vcl.Grids.dcu'
    pour rappel je suis sur delphi7

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    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 593
    Billets dans le blog
    65
    Par défaut
    File not found: 'Vcl.Grids.dcu'
    pour rappel je suis sur delphi7
    Il suffit de supprimer le préfixe Vcl.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Février 2018
    Messages : 481
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Il suffit de supprimer le préfixe Vcl.

    [Error] DBGridHack.pas(19): Undeclared identifier: 'ssNone'

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

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