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 :

Afficher des images sur une grille


Sujet :

Composants VCL Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    juillet 2003
    Messages
    879
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2003
    Messages : 879
    Points : 325
    Points
    325
    Par défaut Afficher des images sur une grille
    salut à tous

    j'essais de faire un pti jeux qui se joue à 2 sur un quadrillage : les adversaires choisissent soit les points soit les croix

    c'est une sorte de puissance 4

    enfin c'est aps important pour ce que je vous demande

    donc j'ai fais un quadrillage sur un TpaintBox (un ami m'a conseillé)

    et je trouve qu'il est assez réussit :p

    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 TForm1.PaintBox1Paint(Sender: TObject);
    var
    x, y, i : integer;
     
    begin
    x := 700;
    y := 25;
    PaintBox1.Canvas.Brush.Color := clblack;
    PaintBox1.Canvas.Pen.Color := clblack;
     
    for i := 0 to 50 do
    begin
    PaintBox1.Canvas.MoveTo(0,y);
    PaintBox1.Canvas.LineTo(1200,y);
     
    PaintBox1.Canvas.MoveTo(y,1200);
    PaintBox1.Canvas.LineTo(y,0);
     
    y := 25 + y;
     
    end;
    j'ai un bitman qui représente un point et un autre qui représente une croix

    donc je veux savoir comment faire en sorte qu'au click de souris on puisse "ajouter" les points et les croix sur la grille

    le prog sera biensur sur 2 pc différents (donc client / server à envisager) mais pour le moment je préfère le réaliser en local pour apprendre; donc j'utiliserai un radiobouton pour choisir quoi afficher (point ou croix)

    pour info les points et croix ne doivent pas s'afficher n'importe où : uniquement sur les coins des carrés; donc : un carré peut contenir 4 points/croix vu qu'il a 4 coins

    je vous remercie d'avance poru l'aide

  2. #2
    Membre actif Avatar de declencher
    Inscrit en
    mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Bonjour,

    Pour avoir rencontré un problème similaire, c'est à dire réagir à un clique dans un TPaintBox en fonction de la localisation de ce clique, je te conseillerai de déclarer un type contenant la position X, Y de chaque case, et un entier indiquant son statut (ou un autre type record). Les statuts seraient croix, rond et vide. Ensuite tu déclares un tableau avec autant d'enregistrement que de case dans ta grille. Puis tu initialises le tableau.

    Dans l'évènement OnClick de la TPaintBox, tu contrôles la position du clique de la souris afin de trouver la case de la grille qui est cliquée, puis tu réagis en fonction de l'état (ajouter une croix si vide, ...)

    Bonne continuation.

  3. #3
    Débutant
    Profil pro
    Inscrit en
    juillet 2003
    Messages
    879
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2003
    Messages : 879
    Points : 325
    Points
    325
    Par défaut
    j'ai pas trop compris ton explication donc avec l'aide d'un ami je fais :

    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
     
    procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
    x1, y1 : integer;
     
    begin
    p := tbitmap.create;
    c := tbitmap.Create;
    p.LoadFromFile('point.bmp');
    c.LoadFromFile('croix.bmp');
     
    x1 := 700;
    y1 := 25;
     
    PaintBox1.Canvas.CopyRect(rect (x, y, x+64, y+64), p.Canvas, rect (0, 0, 64, 64));
     
    p.Free;
    c.Free;
    end;
    pour le moment ça affiche que les points, donc suffit de faire pareil pour les croix; mais voilà, je bute sur 2 choses :

    1/ je n'ai pas compris ce que je dois mettre exactement dans le 1er et 3ème paramètre du CopyRect, ce que vous voyez plus haut c'est pas jolie, c'est une copie de code se trouavnt sur un autre programme qui n'a rien à avoir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PaintBox1.Canvas.CopyRect(QUOI_METTRE, p.Canvas, QUOI_METTRE);
    les QUOI_METTRE c'est ce que je n'ai pas compris

    le code fonctionne, le point s'affiche mais il y a un prob : il ne s'affiche pas EXACTEMENT où le curseur a clicker, il y a un pti décalage

    2/ comment faire pour que les points/croix ne s'affichent UNIQUEMENT sur les coins des cases ? (car dans le code plus haut on peux les affichier n'importe où et c'est très laid)

    pour info, j'ai réussis à déterminer au click dans un Tedit le n° de la ligne et le n° de la colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x1 := 700;
    y1 := 25;
    edit1.text:= inttostr(floor(X/y1))+ ' et ' + inttostr(floor(Y/y1));
    peut être que je dois l'utiliser ?

  4. #4
    Membre actif Avatar de declencher
    Inscrit en
    mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Pour ta première question, regarde dans l'aide, sinon sur le forum. Y'a rien de sorcier.

    Pour ta deuxième question concernant le contrôle de la localisation de tes croix, je ne peux que te renvoyer à mon explication, où je te parle de tableau contenant les positions "autorisées" de tes croix.

    Si tu n'as pas compris une chose dans mon explication, n'hésite pas à me dire quoi.

Discussions similaires

  1. afficher des images dans une listebox
    Par soforan dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 07/04/2008, 20h11
  2. Réponses: 1
    Dernier message: 01/04/2008, 19h31
  3. Réponses: 13
    Dernier message: 28/01/2008, 10h27
  4. Aligner des images sur une même ligne
    Par cdevl32 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 08/10/2007, 04h13
  5. [Débutant] Charger et afficher des images les unes apres les autres
    Par kharon dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/03/2007, 09h51

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