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 :

Dessiner une carte


Sujet :

Langage Delphi

  1. #1
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut Dessiner une carte
    Bonjour,
    je fait un jeu de carte (blackjack) en delphi, et donc j'utilise les cartes de windows grace à la DLL Cards.dll.
    Mais comme je débute en Delphi je ne m'y connais pas trop alors je souhaite afficher le tirage, bon j'ai deja afficher sur la forme mais cela ne m'aide pas parceque lors du prochain tirage je doit effacer ce que j'ai déja dessiner ce qui est impossible.
    Sinon la composante PaintBox devrait suffit mais je ne sais pas comment l'utiliser, à ce qu'il parrait il y'a une certaine méthode pour dire à windows: "bloque je vais dessiner" ensuite aprés avoir fini " debloque" . Je ne vois pas bien ce qu'il faut faire.
    une idée?
    Merçi d'avance
    Compil your life guy!
    The Aures Project

  2. #2
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    je précise juste qu'il y'a une fonction spécifique qui me permet d'afficher les cartes la voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function cdtDraw(DC:HDC; X,Y,Card,Typ:Integer; Color:TColor):Integer;
    Compil your life guy!
    The Aures Project

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    La propriété Canvas d'une Form et d'un TPaintBox doit être painte dans l'évènement OnPaint de chacun... Lorsque tu veux effecer puis redessiner, il suffit d faire un appel à Invalidate... Attention: ne pas appeler Invalidate dans OnPaint, cela créerait une récursivité infinie (Onvalidate appelle Paint)...
    Bon dev'
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    euh merci pour la réponse mais je n'ai pas bien saisie ce que je dois faire.
    j'ai fait un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cdtdraw(PaintBox.Canvas.handle,20,120,2,1,clWhite);
    , déja ca ne marche pas, mais comment doit-je utiliser le onpaint exactement.
    Merci
    Compil your life guy!
    The Aures Project

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Dans le Onpaint:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.Form1Paint(Sender: TObject);
    begin
      cdtdraw(Canvas.handle,20,120,2,1,clWhite);
    end;
    Si tu veux une TPaintBox, mets ce code dans son OnPaint et remplace Canvas par PaintBox.Canvas...
    Bon Dev'
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  6. #6
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    ouaips c'est ce que j'ai fait mais lolllll, enfait il ne me dessine rien justement mais c'est logique parceque l'affichage commence quand je clique sur un boutton qui, appel une procedure que j'ai faite et c'est elle qui lance l'affichage normalement. Et tu pourrai m'éclairer à propo de invalidate?
    merci bcp
    edit:
    je vais essayer d'être unpeu plus précis, c'est quoi qui provoque l'evenement OnPaint enfait?
    là j'ai fait l'evenement comme en haut, ensuite je doit effectuer la tache(dessiner la carte) aprés àvoir cliquer sur un boutton, je suis pomé lol
    Compil your life guy!
    The Aures Project

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Goundy
    je vais essayer d'être unpeu plus précis, c'est quoi qui provoque l'evenement OnPaint enfait?
    C'est Windows
    En gros, quand un composant a besoin d'être redessiné, Windows envoie le message WM_Paint à la form et aux composants... Donc, quand ton compo réapparait alors qu'il était caché par une autre fiche, il est redessiné...
    Dans ton OnPaint, il faut faire des conditions pour savoir l'état de ton jeu... En gros, il vaut mieux avoir des tableaux ou des variables dans lesquels tu changes les valeurs lorsque l'utilisateur joue, tu appelles ensuite Invalidate... Et dans OnPaint, tu te sers de tes tableaux pour tout afficher...
    exemple:
    Tu as 6 cartes
    Tu fais un tableau qui contient une variable représentant les 6 cartes...
    Lorsque le joueur modifie une carte, tu modifies la valeur du tableau et tu appelles Invalidate...
    Dans OnPaint, tu te sers directement des valeurs du tableau pour dessiner toutes les cartes...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  8. #8
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    humm moui j'ai +/- saisie en gros, mais ce que j'ai fais ne fonctionne pas j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TBlackJack.PBPaint(Sender: TObject);
    begin
    PB.invalidate;
    cdtdraw(PB.Canvas.handle,20,120,2,1,clWhite);
    end;
    mais ca ne m'affiche rien, en plus quand je met invalidate mon interface bug :s elle est déformé, des bouttons non visibles, defaults par tout, c'est zarb :/
    merci encore, mais sincerement je n'arrive pas à utiliser ceci correctement
    Compil your life guy!
    The Aures Project

  9. #9
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Je t'ai dit de surtout pas mettre Invalidate dans un Onpaint...
    C'est lorsque tu apportes des modifications dans ton affichage et que tu dois redessiner qu'il faut l'appeler
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  10. #10
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Un tit bout de code , pour comprendre le paint des composant !

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        Button1: TButton;
        Button2: TButton;
        Timer1: TTimer;
        procedure PaintBox1Paint(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    Var Couleur:array[1..4] of Tcolor;
        listeCouleur:TStringList;
     
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    var L,H : integer;
    begin
        L:=PaintBox1.Width div 2;
        H:=PaintBox1.Height div 2;
        with PaintBox1.canvas do
        begin
            brush.color:=Couleur[1];
            rectangle(0,0,L,H);
            brush.color:=Couleur[2];
            rectangle(0,H,L,H*2);
            brush.color:=Couleur[3];
            rectangle(L,H,L*2,H*2);
            brush.color:=Couleur[4];
            rectangle(L,0,L*2,H);
        end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         listeCouleur.Insert(0,listeCouleur.Strings[3]);
         listeCouleur.Delete(4);
         Couleur[1]:=strtoint(listeCouleur.Strings[0]);
         Couleur[2]:=strtoint(listeCouleur.Strings[1]);
         Couleur[3]:=strtoint(listeCouleur.Strings[2]);
         Couleur[4]:=strtoint(listeCouleur.Strings[3]);
         paintbox1.Invalidate;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        listeCouleur:=TStringList.Create;
        listeCouleur.add(inttostr(clred));
        listeCouleur.add(inttostr(clyellow));
        listeCouleur.add(inttostr(cllime));
        listeCouleur.add(inttostr(clblue));
        paintbox1.Invalidate;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
        Button1Click(nil);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
         Timer1.Enabled:=not(Timer1.Enabled);
    end;
     
    end.
    bye bon black jack
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  11. #11
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    ah oui pedro pour le invalidate mdr je me suis rendu compte qu'il ne fallait pas l'utiliser dans onPaint en me reveillant ce matin, merci à toi et à toi aussi p'titcoucou mais ce que j'ai fait ne fonctionne pas, voilà à peu prés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TBlackJack.Play();
    begin
    pos:=10;
    arrptr:=arrptr-1;
    //traitement...
    PB.Invalidate;
    end;
     
    procedure TBlackJack.PBPaint(Sender: TObject);
    begin
    cdtdraw(PB.Canvas.handle,20,120,2,1,clWhite);//fonction de Cards.dll qui dessine une carte
    end;
    Rien ne se dessine dans ma paintBox...
    Merci
    Compil your life guy!
    The Aures Project

  12. #12
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    resalut ,
    As tu essayer de mettre autre chose dans ton OnPaint ( un rectangle ) a la place de ta fonction , pour essayer de voir ce qui ne marche pas ?
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  13. #13
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Ps: si tu me donne le code d'appel de ta Dll ou se trouve les cartes
    pour que je puisse utiliser ta function "CdtDraw..." je regarderai ce qui se passe ..
    bye.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  14. #14
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function cdtAnimate(DC:HDC;Card,X,Y,Etat:Integer):Integer; StdCall; external 'CARDS.DLL';
    function cdtDraw(DC:HDC; X,Y,Card,Typ:Integer; Color:TColor):Integer; StdCall; external 'CARDS.DLL';
    function cdtDrawExt(DC:HDC; X,Y,CardWidth,CardHeight,Card,Typ:Integer; Color:TColor):integer; StdCall; external 'CARDS.DLL';
    function cdtInit(var Width,Height:Integer):Integer; StdCall; external 'CARDS.DLL';
    function cdtTerm:Integer; StdCall; external 'CARDS.DLL';
    Voilà
    Compil your life guy!
    The Aures Project

  15. #15
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    euh j'ai réussi a afficher mais il me l'affiche dés le début avant même que je ne clique sur mon boutton ...
    Compil your life guy!
    The Aures Project

  16. #16
    Membre du Club

    Inscrit en
    Décembre 2004
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 52
    Points : 63
    Points
    63
    Par défaut
    J'ai trouvé ca :

    http://delphipage.free.fr/cards.html

    Ca peut t'intéresser

  17. #17
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    merci mais ca ne m'aide pas beaucoup je connais déja et c'est de là que j'ai su comment utiliser cards.dll le problème que j'ai maintenant c'est comment afficher et effacer tout simplement.
    Compil your life guy!
    The Aures Project

  18. #18
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    Bon c'est régler, en remplaçant PB.Invalidate par PB.Refresh ca va à merveille
    Compil your life guy!
    The Aures Project

  19. #19
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Ah tiens c'est bizarre ça... Normalement Invalidate devrait marcher...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  20. #20
    Membre averti Avatar de Goundy
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    605
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 605
    Points : 386
    Points
    386
    Par défaut
    justement maintenant invalidate marche sans soucis :/, c'est trop bizzare moi
    rholalalalaaa lol.
    Aller merci a tout le monde
    Compil your life guy!
    The Aures Project

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

Discussions similaires

  1. Créer une carte de France avec les dessins de formes libres
    Par Arkham46 dans le forum Microsoft Office
    Réponses: 41
    Dernier message: 26/10/2019, 01h24
  2. Dessiner un itinéraire sur une carte
    Par noussa_nouha dans le forum Android
    Réponses: 7
    Dernier message: 19/04/2012, 00h54
  3. Dessiner une "carte"
    Par superxor dans le forum C#
    Réponses: 4
    Dernier message: 28/10/2010, 14h31
  4. Dessiner une carte
    Par jouclar dans le forum Général Python
    Réponses: 5
    Dernier message: 10/04/2010, 16h31

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