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 :

Comment effacer le dessin dans un Canvas ?


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Comment effacer le dessin dans un Canvas ?
    Bonjour,

    J'ai un projet à faire, qui est un jeu de rôle, dans lequel je dois faire une barre de progression lorsqu'on clique sur un icone de construction. Don j'ai créé une image, dans laquelle j'ai mis un btmp, et une succession de rectangles verts montrent l'avancement de la progression. Tout marche bien sauf que je n'ai pas trouver la technique pour suprimer ces rectangles, de manière à retrouver mon btmp sans aucun rectangles verts dessus. J'esprère que j'ai été à peu près clair!!

    Mon code est le suivant:

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, jpeg;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Image1: TImage;
        Button2: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
     
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
      nbre: integer;
      truc: boolean;
     
    implementation
     
    procedure delay(delai:Double);
    Var HeureDepart:TDateTime;
     
    begin
      HeureDepart:=now;
      Delai:=delai/24/60/60/1000; 
      repeat
        Application.ProcessMessages; 
      Until Now>HeureDepart+Delai;
    end;
     
    {$R *.dfm}
     
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    image1.Visible:=true;
    nbre:=0;
    image1.Canvas.Pen.Color:=clgreen;
    image1.Canvas.Brush.color:=clgreen;
    while (nbre<260) and (truc=false) do
        begin
          image1.Canvas.Rectangle(nbre,0,1,17);
          nbre:=nbre+1;
          delay(30);
        end;
    if nbre=260 then label1.Visible:=true;
    if (truc=true) then truc:=false;
    image1.Visible:=false;
     
     
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    truc:=true;
     
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    truc:=false;
    image1.Visible:=false;
    Label1.Visible:=false;
    end;
     
    end.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    1- Bienvenue
    2- Modifie ton Post pour ajouter les Balises [CODE] (via le # du menu)
    3- Effacer une image revient à remplir a la couleur de fond, un Rectangle ou FillRect devrait faire l'affaire
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut et Bienvenue sur Developpez.com,

    Je suppose que tu utilises le composant TImage ?

    Logiquement, lorsque l'on veut vider (entend par là tout supprimer) le contenu d'un TImage, on met à nil sa propriété Picture (apparemment c'est pas trop ce que tu souhaite faire ...)

    Si j'ai bien compris, tu as un TImage, sur lequel une image fait office d'arrière plan, et qui contient des carrés verts (créés par la suite). Ton but, c'est de vouloir garder l'image de fond intacte (restaurer l'état initial de ton bitmap), c'est bien ça ?

    EDIT : Posts croisés

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    dois faire une barre de progression lorsqu'on clique sur un icone de construction. Don j'ai créé une image, dans laquelle j'ai mis un btmp, et une succession de rectangles verts montrent l'avancement de la progression. Tout marche bien sauf que je n'ai pas trouver la technique pour suprimer ces rectangles, de manière à retrouver mon btmp sans aucun rectangles vert dessus
    ... à ta place, au-lieu de dessiner tes rectangles verts directement dans le canvas de l'image j'aurais tout simplement superposé plusieurs TPanels de couleur verte par-dessus l'image en faisant varier leur Width de 0 à la largeur de progression et hop, avec Width=0 tu retouve ton bmp sans aucun rectangle vert.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Alors oui ero-sennin c'est bien ca que je veux faire.
    Mais par contre pour utiliser des Tpanels ca va etre un peu l'horreur étant donné que je remplie ma barre de progr pixel par pixel. Donc c'est des tous petits rectangles qui s'enchainent et j'aimerais simplement tout gommer quoi pour recommencer et retrouver mon image en dessous

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    a oui j'ai compris l'histoire du panel j'avais pas bien capter au début j'vais essayer comme ca merci bien je vous tiens au courant

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Alors la panel ca marche pas mal du tout. Le seul petit soucils, qui je pense est facilement réglable, c'est que y'a toujours affiché "panel1" au fur et a mesure que la barre avance. Donc comment faire pour ne pas afficher le nom du panel sur celui ci svp? Après j'vous embete plus jusqu'à la prochaine fois =D

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Je m'auto répond pour la troisieme fois, mais c'est bon j'ai trouvé c'était tout con en fait! merci bien

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Finalement, tu gère cela avec un Panel ?
    C'est une méthode, mais en général lorsque l'on développe un Jeu, pour avoir de beau graphisme, on dessine tout à la main dans une image tampon, en général c'est un thread qui déssine, il switch le tampon avec un autre, envoie un message au thread VCL qui lit le tampon et ainsi de suite, ...


    J'ignore le résultat que tu souhaite obtenir, mais la solution bidouille a base de composant, cela risque d'être très lent
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Alors en fait mon projet c'est pas créer le jeu en entier c'est juste l'interface. L'histoire du panel marche assez bien et me suffit, mais si tu veux m'expliquer la méthode que tu dis je veux bien.

    et tant qu'on y est... j'ai delphi 7 sous vista, et en fait je n'ai pas accès à l'aide de delphi car il me dit que vista ne prend pas en charge cette aide blabla. Donc si tu avais une solution pour ce petit soucil également ce serait nickel!

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par RoM_CoOl Voir le message
    et tant qu'on y est... j'ai delphi 7 sous vista, et en fait je n'ai pas accès à l'aide de delphi car il me dit que vista ne prend pas en charge cette aide blabla. Donc si tu avais une solution pour ce petit soucil également ce serait nickel!
    Jette un coup d'œil chez MS.

    @+

  12. #12
    GO
    GO est déconnecté
    Membre régulier Avatar de GO
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Points : 92
    Points
    92
    Par défaut
    Si tu avais utilisé un TPaintBox, il aurait fallu le rafraichir en faisant un Repaint puis en rechargeant ton Bitmap avec la methode Assign.
    A+

Discussions similaires

  1. Comment effacer le buffer dans TCOMPORT
    Par hitmman dans le forum C++Builder
    Réponses: 0
    Dernier message: 13/07/2008, 15h53
  2. Comment effacer le curseur dans un formulaire ?
    Par vandrie dans le forum IHM
    Réponses: 1
    Dernier message: 01/07/2008, 17h44
  3. [CVS] comment effacer un tag dans eclipse
    Par Galevsky dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 27/06/2008, 14h05
  4. comment effacer une ligne dans un GtktextBuffer
    Par coax81 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 25/06/2007, 16h01
  5. Comment effacer une photo dans un répertoire
    Par le69 dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2006, 08h48

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