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 :

(newbee) StringGrid .. en profondeur


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut (newbee) StringGrid .. en profondeur
    Salut @ tous,

    A defaut d'avoir trouvé un bon tutorial sur les Grids je fais appel à votre aide!!

    Je fais appel au composant TMySQLConnect pour afficher une database dans un Grid.

    Je vous montre mon code, je n'ai rien à cacher

    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
     
     
    // Bouton pour compléter la Grid.
    procedure TForm1.BitBtn4Click(Sender: TObject);
     
     var
       Res   : PMYSQL_RES;
       Row   : PMYSQL_ROW;
       i,j   : integer;
    begin
      Res :=  Sql.Query('SELECT Artiste, Titre, Album, Path FROM playlist ORDER by Artiste, Titre ASC;');
     
      if Res = nil then Error('Aucun resultat')
      else
       try
     
       StringGrid1.ColCount := sql.field_count;
       StringGrid1.RowCount := sql.num_rows(Res);
     
               j := 0;
               Row := Sql.fetch_row(Res);
                while Row <> nil do
                begin
                     for i := 0 to StringGrid1.ColCount do
                     begin
                          //StringGrid1.ColWidth[i,j] := 150;
                          StringGrid1.Cells[i,j] := Row[i];
                     end;
                     Row := sql.fetch_row(Res);
                     j := j + 1;
                end;
        finally
          sql.free_result(Res);
        end;
       end;
    Là, il m'affiche toutes les collones.
    Je voudrais juste afficher, "Artiste, Titre, Album"

    Path je dois m'en servir en caché pour que quand je click sur le rows ca lance une procédure ex : MaProcedure(Path);

    Comment gérer Path :

    - ne s'affichera pas sur ma Grid ?
    - sera utilisé lors du click sur le row.

    Merci @ vous!

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Au moins 2 façons de faire:

    1/ tu rends rigide ton grid, en taillant les 3 premières colonnes pour qu'elles occupent toute la largeur du grid, et tu interdis le redimensionnement des colonnes et pas de Hscrollbar et tu forces la Vscrollbar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowScrollBar(StringGrid1.Handle,SB_VERT,True);
    Alors, la colonne contenant le path ne se verra pas.

    2/ tu appelles le path dans la base quand tu en as besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'select path FROM playlist WHERE Artiste='+grid.Cells[x,y]+' AND Titre='....etc

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    J'pense que j'opterais plus pour la première proposition..
    Je retourne dans mon IDE

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    L'avantage de la 2nde est de minimiser le trafic réseau et le boulot de la DB, puisque tu ne prends QUE la donnée qui est nécessaire. (c'est dailleurs une bonne habitude à prendre ).

    Mais bon, c'est toi qui voit 8)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Mouais.. mouais.. pourquoi pas non plus ... ?


  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Citation Envoyé par mickaelmediaprod
    Mouais.. mouais.. pourquoi pas non plus ... ?

    Bah, si ta DB est en local et le sera toujours, il n'y a pas de trafic réseau, et tu es le seul impacté par les perfs des requètes.

    Sinon, j'imagine que le path doit "peser" entre 30 et 50% de chaque ligne (en octet), non?
    => tu trimbales entre 30 et 50% de données pour rien (sauf LE path nécessaire)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Ouep, la base sera sur un réseau local, toujours.
    Je vais pas prendre Path :-)

    Juste au cas par cas..
    Bon je reprendre mon livre et je code ,a tantot..

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Voilà ma Grid est "en forme".

    Mais j'ai pas récupéré l'ID de ma base.. comment je vais selectionner mon Path sans savoir faire la relation Artiste/Titre/Album ?

  9. #9
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Citation Envoyé par qi130
    2/ tu appelles le path dans la base quand tu en as besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'select path FROM playlist WHERE Artiste=''+grid.Cells[x,y]+'' AND Titre=''....etc
    il faut envoyer une requète pour le récupérer...

    Pour pas t'embéter avec les quotes, tu peux aussi utiliser QuotedStr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'select path FROM playlist WHERE Artiste='+QuotedStr(grid.Cells[x,y])+' AND Titre='+QuotedStr(grid.Cells[x,y+1])+' AND Album....etc

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Hello,
    désolé pour ce retard, la neige m'a bloqué toute cette journée..

    La solution du Where Artiste = 'xx' && Titre = '' ne me semblais pas très fonctionnel.. car dans mon affichage je met en majuscules, et dans ma DB c'est en "normal".. je préfère éviter les soucis :-)

    De plus, c'est une application mutlimédia destinée à du "Live"

    => Rapatrier le Path "à la demande" pourrais ralentir par moment la lecture du fichier quand on Click sur Play => pas bon.

    Je préfère encore rapatrier Path partout, de toute manière le SQL Server est en réseau 100Mbits, le trafic on s'en fou un peu.

    Donc j'ai mit ma Grid en statique, et j'ai inclus Id + Path.

    Résultat:

    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
     
    procedure TForm1.BitBtn4Click(Sender: TObject);
     
     var
       Res   : PMYSQL_RES;
       Row   : PMYSQL_ROW;
       i,j   : integer;
    begin
      Res :=  Sql.Query('SELECT Id, Artiste, Titre, Annee, Duree, Path FROM playlist ORDER by Artiste, Titre ASC;');
     
      if Res = nil then Error('Aucun resultat')
      else
       try
     
       StringGrid1.Show;
       StringGrid1.ColCount := 6;
       StringGrid1.RowCount := sql.num_rows(Res);
     
       StringGrid1.ColWidths[0] := 0;
       StringGrid1.ColWidths[1] := 300;
       StringGrid1.ColWidths[2] := 300;
       StringGrid1.ColWidths[3] := 45;
       StringGrid1.ColWidths[4] := 40;
       StringGrid1.ColWidths[5] := 0;
     
               j := 0;
               Row := Sql.fetch_row(Res);
                while Row <> nil do
                begin
                     for i := 0 to StringGrid1.ColCount do
                     begin
                          StringGrid1.Cells[i,j] := UpperCase(Row[i]);  // La cellule en MAJ.
                     end;
                     Row := sql.fetch_row(Res);
                     j := j + 1;
                end;
        finally
          sql.free_result(Res);
        end;
       end;
    Dernière question, ou mettre et -comment- faire pour que quand on click sur un rows ca execute une procédure MaProcedure(Path) Path alias collone 5 ..

    Merci beaucoup

  11. #11
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Regarde du coté de l'événement OnSelectCell du grid. En entrée de cette procédure, tu disposes des coordonnées de la cellule cliquée, et donc du n° de ligne.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Youp, désolé pour le retard :-)
    Bonne année à tous.

    Je regarde à ça tout de suite ...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Enfait, je m'aperçois que je suis pas dans la bonne direction là..

    Je m'explique :

    J'ai un bouton Play qui lis mes WAV.
    pour le moment il lis "test.wav"

    Là il faudrait que je trouve la valeur de la collone "Path" de la ligne actuelle de la Grid ..

    Désolé, m'étais mal exprimé, j'espère que c'est plus clair :-)

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

Discussions similaires

  1. StringGrid sort
    Par clovis dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/10/2004, 21h46
  2. StringGrid, multiligne et word wrap
    Par Dajon dans le forum C++Builder
    Réponses: 7
    Dernier message: 17/09/2003, 17h15
  3. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57
  4. Multi lignes dans un StringGrids ?
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/11/2002, 23h15
  5. StringGrid et colonnes
    Par Delph dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/08/2002, 11h35

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