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 :

[D6] Figer une colonne d'une DBGrid !?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut [D6] Figer une colonne d'une DBGrid !?
    Je souhaite figer (comme dans Excel) les 2-3 premières colonnes, de manière à ce quelles restent visible, même en scrollant horizontalement.

    J'ai bien vu ce post :http://www.developpez.net/forums/sho...562#post344562, mais l'astuce ne fonctionne pas. Les colonnes se dupliquent aléatoirement.
    Je préfèrerais une solution sans composants en plus (non standard), et surtout pas la JVCL.

    Si quelqu'un a une idée ...
    Merci.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Le composant SMDBGRID le fait, regardes ici les sources sont fournit ca pourra peut être te donner une piste de comment faire.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Je l'ai fait il y a quelques semaines! et ca fonctionne parfaitement.

    Par contre il me faut plus d'infos, sur la manière dont est implémenté le DataSet / au DBGrid, as-tu des définis des TxxxFields ?

    En gros, 1 autre DBGrid, relié au même DataSet
    -> DBGridGauche, DBGridDroit

    Ensuite, jouer avec les visibilités des colonnes,
    DBGridGauche.Columns[ x ].Visible.

    Redimensionner correctement les Width des colonnes, Les gestions des largeurs n'étant pas forcément logique dans les source DBGrids.pas

    Ensuite, gérer le décalage vertical éventuel. l'ascenseur horizontal apparait à droite mais pas à gauche, la DBGridGauche doit dont être moins haute au pixel près...

    Mon source brut, pour gérer cela pour donnner une idée uniquement.

    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
         // SYNCHRO DES GRILLES GAUCHES
         XG := 42;
         if PanelGauche.Visible
           then DBGrid.Options := DBGrid.Options - [ dgIndicator ]
           else DBGrid.Options := DBGrid.Options + [ dgIndicator ];
         for i := 0 to DBGrid.Columns.Count - 1 do
         with DBGrid.Columns[ i ] do
           begin
           if PanelGauche.Visible
             then BAGauche := ( Field = TableCanevas ) or
                              ( Field = TableDesignation ) or
                              ( Field = TableReference )
             else BAGauche := False;
           DBGridGauche.Columns[ i ].Visible := BAGauche;
           if BAGauche then DBGridGauche.Columns[ i ].Width := Width;
           Visible := not BAGauche;
           if BAGauche then Inc( XG, DBGridGauche.Columns[ i ].Width );
           end;
         PanelGauche.Width := XG;
         PanelSyntGauche.Width := XG;
    Les 3 TFields (TableCanevas, Tabledesignation, TableReference) sont mes 3 champs à figer, mais cela pourrait être dynamiques
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  4. #4
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Pas mal. La bidouille est simple à faire.
    En superposant correctement les deux DBGrid, ça donne un résultat présentable.
    Malatar >> Quand j'aurais du temps, je regarderais pour faire un composant propre (si c'est pas trop dur pour moi).

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  5. #5
    Membre expérimenté
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Par défaut
    Autre possibilité qui devrait fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TYPE
      TMa_Grille=class(TDBGrid)
      public
        property FixedCols;
      END;
     
      TMa_Grille(DBGrid_ligne).FixedCols:=3;
    La property FixedCols étant dans l'un des ancêtres de TDBGrid

  6. #6
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Eric.H
    Autre possibilité qui devrait fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TYPE
      TMa_Grille=class(TDBGrid)
      public
        property FixedCols;
      END;
     
      TMa_Grille(DBGrid_ligne).FixedCols:=3;
    La property FixedCols étant dans l'un des ancêtres de TDBGrid
    Non, ça ne fonctionne pas. L'affichage mélange les colonnes.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  4. supprimer une ligne et une colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 8
    Dernier message: 14/08/2007, 15h42
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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