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 :

utilisation de TStringGrid


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut utilisation de TStringGrid
    bonjour a tous les developpeurs

    je suis un etudiant en 1ere année dans une ecole d'informatique et j'ai commencé delphi que cette année donc j'espere que vous serez indulgent si je ne comprend pas tout
    j'ai plusieurs questions a vous posez par rapport au TStringGrid mais je vais y aller par etape afin que ce soit clair pour vous et pour moi.

    le but principal est de faire un editeur de map et j'ai donc utilisé la composante TStringGrid pour gèrer mes cases.

    pour l'instant j'arrive a faire en sorte de remplir une case d'une certaine couleur (en fonction si on a choisi herbe,eau,desert ou roche) en cliquant dessus (j'ai pas mal lutter mais j'y suis arrivé ).
    j'arrive aussi a faire un fichier de sortie qui lorsqu'on enregistre la Map ecrit dans un fichier text les differents parametres de la map qui seront lue par le moteur graphique.
    c'est de la forme:

    Cases
    10
    eau
    0 0
    eau
    0 1
    eau
    0 2
    eau
    0 3
    ...
    ...
    ...

    maintenant mon probleme est que je n'arrive pas a charger convenablement une map

    voici mon 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    procedure TForm1.chargerClick(Sender: TObject);
    var
      Map : TextFile;
      NomMap,parse: string;
      nb_cases,x,y : integer;
    begin
    if OpenDialog.execute then
        NomMap := OpenDialog.FileName;
        AssignFile(Map, NomMap);
        Reset(Map);
        Readln(Map);
        Readln(Map, nb_cases);
     
         if nb_cases=petite then
         begin
          SG.ColCount:=petite;
          SG.RowCount:=petite;
          MAXCOL:=petite;
          MAXROW:=petite;
         end
         else
         if nb_cases=moyenne then
         begin
          SG.ColCount:=moyenne;
          SG.RowCount:=moyenne;
          MAXCOL:=moyenne;
          MAXROW:=moyenne;
         end
         else
         if nb_cases=grande then
         begin
          SG.ColCount:=grande;
          SG.RowCount:=grande;
          MAXCOL:=grande;
          MAXROW:=grande;
         end;
     
     
     while (not EOF(Map)) do
        begin
          Readln(Map, parse);
          Readln(Map,x,y);
          if parse='herbe' then sg.Cells[x,y]:=inttostr (clgreen);
          if parse='eau' then sg.Cells[x,y]:= inttostr (clteal);
          if parse='desert' then sg.cells[x,y]:=inttostr(clmaroon);
          if parse='pierre' then sg.Cells[x,y]:=inttostr(clsilver);
        end;
      CloseFile(Map);

    donc le chargement des couleurs se passe parfaitement par contre le petit problème est dans le chargement du nombre de col et de row.

    il n'y a pas du tout de modification du TStringGgrid au niveau des col et des row.
    j'arrive a modifié dans une procedure buttonclick avec le choix de petite,moyenne ou grande a l'aide d'une checkbox mais j'aimerai bien aussi que le chargement d'une map permette la modification du nombre de collone et de row.

    voila pour la 1ere question,j'espere que vous pourrez m'aidez

    si quelqu'un a un peu de temps a me consacrer ,il peut me contacter en MP pour que l'on se rejoigne sur msn ou autre et je pourrai lui montrer mes sources afin de mieux comprendre.

    desolé pour le code non indenté mais j'ai encore un peu de mal avec l'indentation ^^

    Merci a tous d'avance.

    xavier

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Ta question n'est pas claire (du moins pour moi).
    Ton pb est t'il que tu n'arrives pas à créer dynamiquement le nbre de colonnes et lignes d'une tStringGrid quand tu charges ton fichier ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    oui desolé du language pas tres clair mais je ne savais pas comment expliqué mon problème.

    donc oui je voudrais pouvoir créer dynamiquement le nombre de ligne et colonne qui est inscrit dans mon fichier dans la TStringGrid.

    comme je l'ai dit,j'arrive avec une procedure toute simple d'un buttonclick de mon bouton ok en ayant selectionner auparavant la taille choisie.

    Mais là lors du chargement de la Map ca ne veut rien faire

    merci de m'aider philnext

  4. #4
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Je ne suis pas un spécialiste du tstringgrid mais j'aurais fait un truc style :
    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
     
    while (not EOF(Map)) do
        begin
     
          Readln(Map, parse);
          Readln(Map,x,y);
     
          if x >sg.RowCount then sg.RowCount := x;  //nbre de lignes
          if y >sg.ColCount then sg.ColCount := y;     //nbre de colonnes
     
          if parse='herbe' then sg.Cells[x,y]:=inttostr (clgreen);
          if parse='eau' then sg.Cells[x,y]:= inttostr (clteal);
          if parse='desert' then sg.cells[x,y]:=inttostr(clmaroon);
          if parse='pierre' then sg.Cells[x,y]:=inttostr(clsilver);
        end;
    je n'ai pas testé mais c'est l'idée...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    oui cela marche tres bien cette methode

    Merci beaucoups

    donc pour la 2eme questions :

    dans mon editeur de map, quand je clique sur la souris dans la zone du TStringGrid cela affiche la couleur choisi tel que cela:

    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
    procedure TForm1.SGMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var r, c : longint;
     
    begin
      if not (ssleft in Shift) then
        exit;
      SG.mousetocell (x, y, c, r);
      if not(c in [0..MAXCOL]) or not(r in [0..MAXROW]) then
        exit;
      if (c = c0) and (r = r0) then
        exit;
      c0 := c;
      r0 := r;
      SG.col := c;
      SG.row := r;
      if H.Checked=true then
      SG.cells[SG.col, SG.row] := inttostr (clgreen)
      else
      if d.Checked=true then
      SG.cells[SG.col, SG.row] := inttostr (clmaroon)
      else
      if E.Checked=true then
      SG.cells[SG.col, SG.row] := inttostr (clTeal)
      else
      if Roc.Checked=true then
      SG.cells[SG.col, SG.row] := inttostr (clsilver)
      else
      if gom.checked=true then
      sg.cells[SG.Col,sg.Row]:= inttostr (clwhite)
    end;
    le code n'est pas du tout optimisé,c'est moche et il y a certainement des trucs qui servent a rien.

    enfin bref ce que je voudrais c'est loader des images a la place des couleurs car c'est vraiment moche un editeur de map avec des les couleurs

    j'ai lu dans le FAQ le loadage d'une image mais ca marche pas avec moi donc je suppose qu'il y a autre chose pour y arriver.

    merci a tous

  6. #6
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Je ne suis pas sûr d'avoir compris mais tu veux que chaque cellule de ta tStringrid soit une image d'herbe si c'est de l'herbe...ect ?

    Dans ce cas il faut travailler sur le canvas de ta tstringGrid.
    Une bonne explication, même si elle ne correspond pas à ta demande est dans la FAQ ici : http://www.developpez.com/delphi/faq...lulestringgrid

Discussions similaires

  1. Utilisation d'un TStringGrid dans une DLL
    Par KlausGunther dans le forum Composants VCL
    Réponses: 22
    Dernier message: 31/03/2015, 10h18
  2. Réponses: 2
    Dernier message: 23/11/2010, 20h48
  3. [Borland C++] Utilisation de TStringGrid
    Par lux12 dans le forum C++Builder
    Réponses: 11
    Dernier message: 05/11/2010, 14h18
  4. [Lazarus] Utilisation de TStringGrid
    Par Marco88 dans le forum Lazarus
    Réponses: 3
    Dernier message: 27/04/2009, 19h19
  5. Utiliser un TProgressBar dans une cellule d'un TStringGrid ?
    Par [ZiP] dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/06/2008, 09h09

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