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 :

Canvas et Boutons


Sujet :

Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut Canvas et Boutons
    A l'intérieur d'un cadre, je fais dessiner divers éléments, comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    canvas.Draw(x,y,de);  //de:TBitmap
    canvas.line(xa,ya,xb,yb);
    Puis pour une action sans lien avec le dessin, en cliquant sur un "bouton" genre "Calcul" ou "Tirage", tout ce qui a été dessiné avec Canvas s'efface.
    Il en est de même si la "Form" est redimensionnée (minimisée ou agrandie). J'ai mis une procedure "rafraichir" dans "Formresize", ou 'Formchangebounds", sans succès.

    J'aimerais éviter le "bouton" "Rafraîchir" qui redessine ce qui a disparu.
    Quelle solution?

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    le canvas est un moyen de dessiner, il n'a pas de mémoire propre...donc soit tu places ta procédure de dessin dans un évènement OnPaint (TPaintBox, Tform...) afin que le dessin soit actualisé à chaque fois que nécessaire, soit tu utilises le Canvas d'un TBitmap (Image1.Picture.Bitmap par exemple) qui lui va conserver l'image dessiner en mémoire et pourra la restituer sans avoir à redessiner les éléments sur OnPaint.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut complement
    J'ai 3 boutons : Calcul, Modifier, Valider.
    Placements, déplacements des motifs se déroulent comme prévu et l'accès aux 3 boutons est comme suit:
    (1) Calcul.enabled:=true; Modifier.enabled:=false; Valider.enabled:=false;

    En cliquant sur Calcul, l'état des accès devient :
    (2) Calcul.enabled:=false; Modifier.enabled:=true; Valider.enabled:=true;

    et c'est là que les "canvas" disparaissent!

    L'astuce que j'ai trouvée : laisser les boutons.enabled:=true dès le début, mais pour ne laisser l'accès qu'à ceux désirés, j'envoie hors de la "Form" les indésirables:
    ainsi (1) devient Calcul.top:=50;Modifier.top:=700;Valider.top:=700; // si 700 est hors de vision

    en cliquant sur Calcul, des actions sur les canvas et calculs s'effectuent et
    (2) devient Calcul.top:=700;Modifier.top:=50;Valider.top:=50;

    Ce n'est pas très orthodoxe car si on "allonge" la Form à plus de 700, on découvre la supercherie!!

  4. #4
    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
    bonjour,

    Si tes 3 boutons sont sur la même Canvas que ton dessin, à chaque modification d'aspect de ta form (passage des boutons à "Enables" ou déplacement de tes boutons ou de la form...), la form va se redessiner, et comme t'a dit Paul le Canvas n'est pas mémoriser, ton dessin est perdu.
    Tu dois dessiner dans un autre Canvas par exemple dans celui d'une image.


    Je te joint un exemple ci dessous :

    tu dois l'associer a une form avec : Trois bouton (BtModifier, BtCalcul, BtValise) et un Timage (image1)
    et les événements décrit dans le 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
    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
    93
    94
    95
    96
    97
    98
    99
    100
    unit Unit9;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
     
    type
      TForm9 = class(TForm)
        BtCalcul: TButton;
        BtModifie: TButton;
        BtValid: TButton;
        Image1: TImage;
        procedure BtCalculClick(Sender: TObject);
        Procedure CreateBitmap;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure BtValidClick(Sender: TObject);
        procedure BtModifieClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form9: TForm9;
      aBMP: TBitmap;
     
    implementation
     
    {$R *.dfm}
     
    Procedure Tform9.CreateBitmap;
    Begin
      Image1.Width:=160;
      Image1.Height :=160;
      aBMP := TBitmap.Create;
      aBMP.Width := Image1.Width;
      aBMP.Height := Image1.Height;
      Image1.Picture.Assign(aBMP);
    End;
     
     
    procedure TForm9.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       aBMP.Free;
    end;
     
    procedure TForm9.FormCreate(Sender: TObject);
    begin
       CreateBitmap;
       BtCalcul.Enabled:=True;
       Btmodifie.Enabled:=false;
       BtValid.Enabled:=false;
     
    end;
     
    // Modifie le bitmap
    procedure TForm9.BtModifieClick(Sender: TObject);
    begin
       Image1.Picture.Bitmap.Canvas.FillRect(Rect(40,40,120,120));
       BtCalcul.Enabled:=False;
       Btmodifie.Enabled:=true;
       BtValid.Enabled:=True;
    end;
     
    // efface l'image
    procedure TForm9.BtValidClick(Sender: TObject);
    begin
       Image1.Picture.Bitmap.Canvas.FillRect(Rect(0,0,160,160));
       BtCalcul.Enabled:=True;
       Btmodifie.Enabled:=false;
       BtValid.Enabled:=false;
    end;
     
     
    // dessinne une image
    procedure TForm9.BtCalculClick(Sender: TObject);
    var
      i: Integer;
    begin
        with Image1.Picture.Bitmap.Canvas.Pen do
        begin
             Color:=Clred;
             Width:=5;
        end;
     
        for i := 0 to 5 do
        begin
             Image1.Picture.Bitmap.Canvas.Rectangle(10+(i*10),10+(i*10),150-(i*10),150-(i*10));
        end;
     
        BtCalcul.Enabled:=false;
        Btmodifie.Enabled:=true;
        BtValid.Enabled:=true;
    end;
     
    end.
    Bonne continuation !
    Bye et bon code...

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut a suivre
    Merci pour les conseils, je ferai des essais.
    Pour plus de détails, c'est pour un "Scrabble" réalisé pendant le confinement.
    Voici 2 copies d'écran pour "imaginer" la tâche.
    Le confinement s'achève, et les heures de programmation vont se réduire, santé à tous !
    Images attachées Images attachées   

  6. #6
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    Citation Envoyé par chrisguinchard Voir le message
    Merci pour les conseils, je ferai des essais.
    Pour plus de détails, c'est pour un "Scrabble" réalisé pendant le confinement.
    Voici 2 copies d'écran pour "imaginer" la tâche.
    Le confinement s'achève, et les heures de programmation vont se réduire, santé à tous !
    C'est déjà pas mal ficelé ma fois.. (D'après ce que vois)
    Ce serai bien que tu aille au bout... et que tu le mette en Opensource... Je pense qu'il aura des amateurs... !!!!

  7. #7
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Juste pour info, je crois que le scrabble n'est pas libre de droit.

  8. #8
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut marque déposée
    Aïe !
    Sacrebleu, je vais l'appeler Scrabeule...
    Merci des conseils!

  9. #9
    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
    bonjour,

    Sympa ton graphisme...

    Par contre est ce ou sera t il : multi-joueur et une mono-joueur (contre l'ordinateur). Si oui pour le mono-joueur, as tu fais l'algo pour la génération des mots en fonction des lettres ...?

    A+
    Bye et bon code...

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

  10. #10
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut les idées de projets ne manquent pas
    Citation Envoyé par petitcoucou31 Voir le message
    bonjour,

    Sympa ton graphisme...

    Par contre est ce ou sera t il : multi-joueur et une mono-joueur (contre l'ordinateur). Si oui pour le mono-joueur, as tu fais l'algo pour la génération des mots en fonction des lettres ...?

    A+
    Au départ pour 2 joueurs, mais sur le même ordi, pas commode de jouer à 2.
    Comme j'étais seul (à m'y intéresser), c'est resté un "solitaire".

    Je l'ai envoyé à une personne à 600 km, et la bonne idée serait de jouer à 2 à distance, à tour de rôle : le même sac de jetons, les 2 plateaux identiques actualisés à chaque tour... Problème de communication, mais je n'ai pas encore osé mettre la cervelle en route !!

    Pour jouer contre l'ordi,, l'algorithme de construction de mots, mais surtout de vérification d'appartenance au lexique, les conjugaisons, les mots au pluriel, les adjectifs au masculin, féminin, singulier, pluriel... voilà un défit qui a le mérite de dégourdir les méninges!

    Comme tu vois, j'ai le temps d'imaginer des problèmes, mais pas toujours les bonnes méthodes et maîtrise des outils pour les résoudre

    merci pour l'intérêt que tu portes à ces élucubrations

  11. #11
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut autre version
    Citation Envoyé par petitcoucou31 Voir le message
    bonjour,

    Sympa ton graphisme...

    Par contre est ce ou sera t il : multi-joueur et une mono-joueur (contre l'ordinateur). Si oui pour le mono-joueur, as tu fais l'algo pour la génération des mots en fonction des lettres ...?

    A+
    J'ai aussi fabriqué une version espagnole : il y a 4 lettres supplémentaires en espagnol.
    Dans le jeu d'Espagne, par contre il n'y a ni K, ni W. Mais en Amérique latine, K et W sont inclus.
    Alors je n'ai fait qu'ajouter les 4 nouvelles lettres.

    Si tu es intéressé, je peux te passer ce "SCRABEULE"
    Images attachées Images attachées  

  12. #12
    Membre confirmé Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 323
    Points : 484
    Points
    484
    Par défaut
    Félicitations !
    Si le moteur est de la même trempe que l'interface, ça mérite effectivement d'aller jusqu'au bout.
    Attention toutefois aux licences d'exploitation ...
    Windows 10 / Delphi Tokyo
    "Les choses ne changent pas. Change ta façon de les voir, cela suffit" Lao Tseu

  13. #13
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut compris
    Citation Envoyé par Paul TOTH Voir le message
    le canvas est un moyen de dessiner, il n'a pas de mémoire propre...donc soit tu places ta procédure de dessin dans un évènement OnPaint (TPaintBox, Tform...) afin que le dessin soit actualisé à chaque fois que nécessaire, soit tu utilises le Canvas d'un TBitmap (Image1.Picture.Bitmap par exemple) qui lui va conserver l'image dessiner en mémoire et pourra la restituer sans avoir à redessiner les éléments sur OnPaint.
    Merci, les essais sont convaincants.
    j'ai compris aussi le jeu des coordonnées : soit dans le repère de la "Form", soit dans le repère au sein de "Image".
    Exemples :
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.ligneClick(Sender: TObject);//lignes  dans une Timage
    var
      i: word;
      xa,ya,xb,yb : word; //coordonnées : (0,0) étant le coin haut gauche de Image2
    // Image2.Picture.Bitmap.canvas.line(xa,ya,xb,yb);
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.RayeClick(Sender: TObject); //lignes  dans un Tshape
    var
      i: word;
      xa,ya,xb,yb : word;//coordonnées : (0,0) étant le coin haut gauche de Form1   
    //canvas.line(xa,ya,xb,yb);
    Et maintenant au boulot!!
    Merci beaucoup!

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Avec quelle version de Delphi cela a t-il été réalisé ?

    En VCL, je pense que si j'avais pensé à écrire ce genre de programme je serai parti sur un TStringGrid pour le plateau pour éviter un max de calcul de position

    Je vois déjà ce qui pourrait être fait avec une version FMX et quelque styles perso ...
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  15. #15
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut version
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Avec quelle version de Delphi cela a t-il été réalisé ?

    En VCL, je pense que si j'avais pensé à écrire ce genre de programme je serai parti sur un TStringGrid pour le plateau pour éviter un max de calcul de position

    Je vois déjà ce qui pourrait être fait avec une version FMX et quelque styles perso ...
    Je l'ai écrit avec "Lazarus".
    Mon parcours en programmation : Fortran, Algool (en fac, 1970) puis Basic, LSE (1983) puis Pascal, Turbo Pascal puis Delphi, VisualBasic (à partir de 2001).
    Il y a peu, j'ai recyclé un laptop que j'aimais bien mais qui était obsolète pour l'actualisation des versions Windows : j'ai remplacé le HD par un SSD, et j'ai mis Linux comme OS. Et en farfouillant je suis tombé sur Lazarus qui ressemble à Delphi, et qui peut compiler le même code source sous Linux, Windows ou MacOs.
    Comme j'ai d'autres laptops sous windows, j'ai commencé à m'y mettre...

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Ok, Lazarus un équivalent D7 Unicode, depuis les "lignes" ont beaucoup changées !
    Posté dans ce forum cela laissait à penser qu'il s'agissait d'une version Delphi (le forum Lazarus étant ici)

    Les dernières versions de Delphi 10.3 et maintenant 10.4 permettent de cibler Windows mais aussi Android, OSX et IOS pour peu d'avoir un mac, Linux (version Delphi entreprise) et, avec un même code et un même EDI (32 bits windows) de compiler pour ces plateformes pour peu d'écrire des programmes FMX et non VCL. D'où mes réflexions sur les styles persos (disons, à la louche, un équivalent de skins).
    Il n'empêche ma réflexion sur l'utilisation de TStringGrid pour le plateau tient la route (exemple dans ce programme "confinement", mes grilles de LOTO de la FDJ sont des TStringGrid, a contrario des Grilles de Bingo ou de Loto "Familial" construites d'une autre manière (utilisation d'un composant TGridPanelLayout sans équivalent, à ma connaissance dans Lazarus)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  17. #17
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    je serai parti sur un TStringGrid pour le plateau pour éviter un max de calcul de position ....
    Pour les calculs de positions, voilà le genre de procédures utilisées :

    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
    procedure Tplateau.place_lettre(i, co, li: word);
    var x,y,xo,yo : word;
       de:TBitmap;   //met la lettre No i sur la case (co,li) dans le "cadre"
    begin
       if (li<>0) and (co<>0) then
       begin
       de:=TBitmap.create;
       de.setsize(l,l); // l : taille du jeto, lxl 
       xo:=cadre.left+ec;  // ec : épaisseur de bordure du cadre
       yo:=cadre.top+ec;
       x:=xo+(l+el)*(li-1);y:=yo+(l+el)*(co-1);// el : épaisseur des lignes de la grille
       de:=lettre[i];
       canvas.Draw(x,y,de);
       end;
    end;
    Autre cas : un cadre contenant des cellules, calcul des (x,y), à partir des (i,j) ou inverse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //calcul des coordonnées (x,y) du centre de la cellule (i,j)
    procedure TForm1.convijxy(i, j: word; var x, y: word);
    begin                   
      x:=(i-1)*2*R+R+cadrex;   // taiile de la cellule RxR
      y:=(j-1)*2*R+R+cadrey;
    end;
     
    //détermine la cellule (i,j) correspondant aux coordonnées (x,y) du centre de la cellule
    procedure TForm1.convxyij(x, y: word; var i, j: word);
    begin                   
      i:=1+trunc((x-cadrex)/(2*R));
      j:=1+trunc((y-cadrey)/(2*R));
    end;
    Autre calcul: j'ai une liste de 1 à AxB éléments.
    Où les placer dans un tableau de A colonnes et B lignes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // détermine la cellule (i,j) du tableau AxB où placer l'élément n
    procedure oumettre(n : word; var i,j :word);
    begin
     j:=1+trunc(n/B);
     i:=1+ n mod A;
    end;
    A plus...

  18. #18
    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
    bonjour

    En ce qui concerne quelques idées, je serai passé par une matrice de composant "Timage", et une collection de bitmap, un pour chaques lettres, cases vides... et à positionner directement dans les Timages. Cela pour ne redessiner que les portions nécessaires du plateau.

    De souvenir, Il me semble qu'un dessin dans le "Canvas" d'une cellule d'un TstringGrid redessine toutes les cellules visibls à l'écran donc tout le plateau a chaque fois, mais bon nous sommes dans un cas ou le temps n'est pas crucial.

    A++
    Bye et bon code...

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

  19. #19
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Une autre vision des choses. Cliquer sur une case pour déplacer la terre

    Nom : Annotation 2020-06-08 192607.png
Affichages : 1827
Taille : 148,7 Ko
    Sources :
    Fichiers attachés Fichiers attachés

  20. #20
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2018
    Messages : 18
    Points : 2
    Points
    2
    Par défaut Génial
    Citation Envoyé par ALWEBER Voir le message
    Une autre vision des choses. Cliquer sur une case pour déplacer la terre

    Nom : Annotation 2020-06-08 192607.png
Affichages : 1827
Taille : 148,7 Ko
    Sources :
    Je suis resté bouche bée! Je n'avais pas mis le nez dans la programmation depuis des années, et pas suivi l'actualisation des outils Delphi.
    Si seulement j'avais eu à ma disposition ce que je vois dans "Damier3D1.pas", il y a ....20 ans!!!
    Pour la petite histoire :

    J'ai fait travailler des élèves sur la représentation plane d'objets 3D avec le casse tête "Cube SOMA".
    LEUR DEFIT : trouver un maximum de constructions différents.
    MON DEFIT : bâtir un programme qui détermine toutes les solutions.
    J'ai élaboré cela avec Turbo Pascal, et la présentation des solutions n'était pas géniale.

    Mais un collègue m'a fait découvrir Delphi, alors j'ai refait cette présentation sous Delphi...
    Le cube tourne sur lui-même, car on ne peut voir que 3 faces à la fois!
    Il me reste la version compilée, si quelqu'un est intéressé par le code, je fouillerai dans mes archives pour retrouver le code.

    Pour SergioMaster qui semble préoccupé par les calculs de positions, je vais joindre les calculs de coordonnées de rotation d'un solide 3D et le passage aux coordonnées pour la représentation plane d'un solide 3D.

    NB : j'avance dans les modifications du SCRABEULE, merci vous avez été d'une grande aide!
    Images attachées Images attachées   
    Images attachées Images attachées
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Faire des Boutons canvas
    Par passicon dans le forum Java ME
    Réponses: 1
    Dernier message: 23/04/2010, 13h09
  2. Afficher gif sur canva avec bouton
    Par NightK dans le forum GUI
    Réponses: 7
    Dernier message: 23/04/2010, 01h45
  3. Afficher une élément dans un Canvas après un clic sur un bouton
    Par D-Day dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 28/02/2010, 19h39
  4. Faire un lien bouton vers un canvas
    Par ljuboja78 dans le forum Flex
    Réponses: 1
    Dernier message: 18/03/2009, 12h19
  5. [C#][XAML] bouton fermer pour canvas
    Par matb33 dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 18/07/2007, 13h57

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