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

Langage Delphi Discussion :

Utilisation du TDrawGrid


Sujet :

Langage Delphi

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1
    Par défaut Utilisation du TDrawGrid
    Bonjour,

    Je ne suis pas très calé en programmation , et en réalisant un programme que je dois rendre dans 2 semaines. ça fait 2 semaines que je suis bloqué.
    Je réalise en fait un simulateur de guerre(c'est un grand mot pour ce que je veux faire), et j'ai utilisé un TDrawGrid pour que l'utilisateur puisse suivre l'évolution de la bataille (plus ou moins).

    Le problème, c'est que je ne sais pas utiliser cet outil, et je n'ai aucune idée de comment placer une image sur le TDrawGrid, ni comment la déplacer, et aussi comment faire pour avoir 2 images dans la même case(situation ou 2 unités se rencontrent).

    Le fait est que je devrai gérer 200 images en même temps, et qu'elles seront sur un TDrawGrid de 10 x 10 (2 images par case).


    PS: je réalise le programme sous Lazarus, qui est pareil que delphi je pense. Et j'utilise le langage Pascal

    Merci de me répondre le plus vite possible. Je suis trop en retard pour rendre le projet...

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 921
    Par défaut
    Pourquoi ne pas passer par un Canevas, c'est plus simple à gérer.

    Sinon télécharge l'aide de Delphi car tout y est très bien expliqué

  3. #3
    Membre éclairé

    Inscrit en
    Novembre 2002
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 813
    Par défaut
    salut,

    voila un bout de code exemple qui peut te mettre sur la voie, dans cet exemple j'utilise un TstringGrid pour avoir les fonctionnalités des chaines sur le tableau.

    le principe est de créer un tableau de Bitmap, avec autant de bitmap que d'images que tu veux utiliser et tu charge ton tableau de bitmap avec tes images.dans l'exemple je crée juste des rectangles de couleur.

    pour afficher l'image dans ta cellule il suffit de rentrer son code dans la cellule correspondante.Puisque tu as deux images par cellule, il y a aussi deux codes par cellule.

    Donc le but est de gérer directement les codes des images dans les cellules du TstringGrid et les images remplaceront les codes. en fait ces codes ne sont que l'indice de ton tableau de bitmap..

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids;
     
    type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        procedure FormShow(Sender: TObject);
        procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    var Timg:array[0..9] of tbitmap;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
        // creation du tableau de bitmap .. la taille est fonction du nombre
        // d'image differente a afficher
        for i:=0 to 9 do Timg[i]:=Tbitmap.Create;
    end;
     
    procedure TForm1.FormShow(Sender: TObject);
    const Tc:array[0..9] of Tcolor=(clwhite,clYellow,clLime,clGreen,clBlue,clred,clmaroon,Clgray,claqua,clTeal);
    var c,l,i: integer ;
    begin
        // ici je dessine les rectangles de couleur dans mes bitmaps (les images)
        for i:=0 to 9 do
        begin
            Timg[i].Width:=12;
            Timg[i].Height:=24;
            Timg[i].canvas.brush.color:=Tc[i];
            Timg[i].canvas.Pen.color:=Tc[i];
            Timg[i].Canvas.Rectangle(0,0,Timg[i].Width,Timg[i].Height);
        end;
     
        // initalisation du tableau avec le bitmap n°0 tout blanc
        for c:=0 to 9 do
          for l:=0 to 9 do StringGrid1.Cells[C,L]:='0000';
    end;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var img1:string[2];
        img2:string[2];
        Codeimg1:integer;
        Codeimg2:integer;
    begin
        with StringGrid1.canvas do
        begin
            // n'affiche l'image que si le code correct (2x2 caracteres)
            if length(StringGrid1.cells[Acol,Arow])=4 then
            begin
                // recupere le code pour image les deux 1er caracteres l'image1 et les deux derniers l'image 2
                img1:=StringGrid1.cells[Acol,Arow][1]+StringGrid1.cells[Acol,Arow][2];
                img2:=StringGrid1.cells[Acol,Arow][3]+StringGrid1.cells[Acol,Arow][4];
                if Not TryStrToInt(img1,Codeimg1) then Codeimg1:=0;
                if Not TryStrToInt(img2,Codeimg2) then Codeimg2:=0;
     
                // affiche l'image en fonction du code, ce code est en fait l'emplacement dans le tableau de bitmap
                Draw(Rect.Left,Rect.top,Timg[Codeimg1]);
                Draw(Rect.Left+12,Rect.top,Timg[Codeimg2]);
           end;
        end;
    end;
     
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var i:integer;
    begin
        // destruction du tableau de bitmap quand je quitte
        for i:=0 to 9 do Timg[i].free;
    end;
     
    end.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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