Rectangles pleins - [RESOLU]

Rectangles pleins - [RESOLU] - C++ - Programmation

Marsh Posté le 10-04-2005 à 11:18:59    

Salut tout le monde !!!
 
Désolé de vous poser des questions aussi ridicule mais je débute, et je n'ai pas trouvé de sujet abordant mon problème (il doit forcément en avoir au moins un mais on ne peut pas dire que je ne l'ai pas cherché).
 
Bon voilà mon problème : je veux tracer un rectangle plein. J'ai trouvé ces fonctions :  
void __fastcall Rectangle(0, 0, 25, 25);
void __fastcall Rectangle(FillRect Rect);
 
void FillRect(int x,int y,int w,int h,const Color& col);
 
DrawRect(400,10,100,50,Blue,3);
FillRect(Pixel(400,400),100,50,Green);
 
Mais voilà je sais pas comment les utiliser :lol: ! (un seul mot à dire : désolé)
Quelqu'un pourrait-il me donner un petit bout de programme pour que je sache comment faire, par exemple dessiner un rectangle tout vert dont deux sommets opposés sont (5;60) et (40;90).
 
MERCI D4AVANCE !!! :wahoo:


Message édité par Le Roi Newbie le 15-04-2005 à 17:42:54
Reply

Marsh Posté le 10-04-2005 à 11:18:59   

Reply

Marsh Posté le 10-04-2005 à 11:37:06    

Quel environnement, quelle bibliothèque ?
(MFC, X11, C++ Builder, wxWidgets, SDL, Graphics.h, ?)

Reply

Marsh Posté le 10-04-2005 à 11:50:28    

J'utilise C++ Builder.

Reply

Marsh Posté le 10-04-2005 à 11:51:48    

Le Roi Newbie a écrit :

J'utilise C++ Builder.


Donc VSL :o
TForm powa :)


---------------
Topic trottinette Xiaomi
Reply

Marsh Posté le 10-04-2005 à 11:58:33    

C'est très dur pour moi tout ça, je débute depuis le moi de janvier en programmation, et je dois faire un mini-projet informatique... mais voilà... je souffre !

Reply

Marsh Posté le 10-04-2005 à 12:27:12    

IUT?


---------------
Topic trottinette Xiaomi
Reply

Marsh Posté le 10-04-2005 à 12:40:24    

Non, ISAT (Nevers).

Reply

Marsh Posté le 10-04-2005 à 19:04:56    

Sinon personne ne pourrait me donner les deux lignes de programme dont j'ai besoin ?
 
En remerciant d'avance.

Reply

Marsh Posté le 11-04-2005 à 16:26:39    

ben si,
 
Canvas->Brush->Color=clGreen;
Canvas->FillRect(Rect(5,60,40+1,90+1));
 
l'aide est assez claire là dessus

Reply

Marsh Posté le 13-04-2005 à 13:14:37    

Merci merci merci !!!!

Reply

Marsh Posté le 13-04-2005 à 13:14:37   

Reply

Marsh Posté le 13-04-2005 à 14:58:37    


VCL [:aloy]


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 13-04-2005 à 15:40:01    

Et m**** !!!  
 
Ca va pas en fait : quand un objet image passe dessus, on revoit la partie d'image qui a été effacée (avec le rectangle blanc) car l'objet efface le rectangle et il réapparaît l'image en dessous.
On pourait pas mettre ce rectangle dessus mon image de fond (que je veux effacer partie par partie) et dessous l'image qui se déplace ???
Quelqu'un aurait-t-il une petite astuce pour moi ???
 
Merci de vous intéresser à mon problème.:)


Message édité par Le Roi Newbie le 13-04-2005 à 15:41:17
Reply

Marsh Posté le 13-04-2005 à 17:01:43    

En plus clair, je voudrais :  
- effacer une partie d'une image grâce à un rectangle blanc
- que mon objet qui se déplace passe par-dessus ce rectangle blanc sans l'effacer

Reply

Marsh Posté le 13-04-2005 à 17:13:38    

Le Roi Newbie a écrit :

que mon objet qui se déplace passe par-dessus ce rectangle blanc sans l'effacer


ce qui signifie:

Citation :

que mon objet qui se déplace par-dessus ce rectangle blanc le cache sans le cacher


Quand ton objet qui est par dessus bouge, redessine le rectangle blanc avant de redessiner ton objet.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 13-04-2005 à 17:25:56    

En fait j'aimerais ne pas avoir à sauvegarder le nombre de rectangles qui ont été affichés ainsi que leurs coordonnées.
J'aimerais aussi ne pas avoir à retracer tous les rectangles pour ne pas faire ramer mon programme (surtout pour la régularité de la vitesse de l'objet).
 
En fait l'idéal serait de tracer une seule fois chaque rectangle et de pouvoir passer par dessus (oui oui très exigeant).
 
Merci de votre aide. :)

Reply

Marsh Posté le 13-04-2005 à 17:50:38    

Y'a pas de mystères, si tu redessines pas tes rectangles personne ne le fera.
Ce que tu peux faire, c'est dessiner tes rectangles dans un bitmap en mémoire, et dessiner ce bitmap puis ton objet déplaçable. Ainsi tu n'as pas à redessiner tes rectangles.
Autre possibilité : ton objet qui cache les rectangles sauvegarde la partie du dessin qu'il efface et la restaure ensuite.
Mais le bitmap offscreen me parrait meilleur. D'ailleurs, si tu ne redessines pas les rectangles, comment tu fais pour les affichers lorsque la fenêtre a besoin d'être redessinée ? (minimise/restore)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 13-04-2005 à 19:53:36    

En effet, je viens d'essseyer minimise/restore et les rectangles disparraissent effectivement (là je me demande à quoi sa sert de les avoir fait tracer s'ils ne sont même pas conservés, il doit y avoir une notion qui m'échappe comme beaucoup d'ailleurs mais vous m'excuserez car je débute :) ).
 
Etant données les trajectoires de mon objet (qui rebondit), je pencherai plutôt pour la première solution.
 
Bon je pense avoir compris et je vais esseyer, je vous donne les résultats de mes ô grands talents de programmeur en herbe (oui oui c'est la canicule, il y a plus d'herbe).
 
GRAND MERCI !!!    ;)

Reply

Marsh Posté le 14-04-2005 à 23:19:07    

Devinez quoi ?  
Ben ce qui devait arriver arriva...
...
je suis ENCORE planté.
 
Ca commence vraiment à m'énerver, j'y suis presque, j'ai plus que ça et c'est quasiment fini, en tout cas je sais comment je finirai le reste. Mais je suis bloqué sur cet effacement de partie d'image... gggggrrrrrrr mes nerfs flanchent !!!
Pis j'ai vraiment du mal avec l'aide, je comprends pas grand chose de ce qu'elle veut me dire. Elle a beau m'expliquer tout ce qu'elle veut je reste bloqué devant l'écran.
 
Tout ce que j'ai réussi à faire c'est ça (s'il vous plaît corrigez moi si je me suis déjà trompé ici):
 
 Graphics::TBitmap *Bitmap;
 Bitmap = new Graphics::TBitmap;
(pour créer mon bitmap sous le nom de Bitmap, c'est où qu'on met la taille du bitmap ???)
 
Canvas->Brush->Color=clWhite;
Canvas->FillRect(Rect(xx,yy,xx+50,yy+50));
(je voulais mettre Bitmap à la place de Canvas mais c'est pas bon car "symbole 'Bitmap' non défini" )
 
M'énerve, j'y arrive pas.
Bon je vais encore passer quelques heures dans l'aide en espérant recevoir la Révélation (une chose est sûre : c'est pas moi l'Elu).
 
J'espère qu'il y des gens très courageux ("des" je crois que c'est déjà un peu optimiste) et très patients qui pourront m'aider, et qui auront d'ailleurs eut le courage de me supporter jusqu'ici (ma mère m'a tout le temps dit que je suis chiant... bon on est d'accord là dessus)
 
Merci de votre aide.

Reply

Marsh Posté le 14-04-2005 à 23:20:49    

Ah oui j'ai ça aussi :
Canvas->Draw(0,0,Bitmap); (yes yes yes !!!)

Reply

Marsh Posté le 15-04-2005 à 12:12:32    

Quelqu'un pourrait-il m'aider j'ai presque réussi mais je ne comprends pas un petit truc :
 
J'ai mis ça dans mon __fastcall TForm1 :
 Graphics::TBitmap* Bitmap1 = new Graphics::TBitmap();
 Bitmap1 = new Graphics::TBitmap;
 Bitmap1->Width=800;
 Bitmap1->Height=400;
 
Et puis ceci dans un autre événement :
 Bitmap1->Canvas->Brush->Color=clWhite;
 Bitmap1->Canvas->FillRect(Rect(xx,yy,xx+50,yy+50));
 Canvas->Draw(50,50,Bitmap1);
Mais dans cet événement on me dit "Symbole 'Bitmap1' non défini".
 
Est-ce dû au fait que j'ai fait un copier-coller de cette ligne :  Graphics::TBitmap* Bitmap1 = new Graphics::TBitmap(); ?
 
Merci de s'intéresser à mon problème. :) :) :)
 

Reply

Marsh Posté le 15-04-2005 à 14:39:13    

Code :
  1. Graphics::TBitmap* Bitmap1 = new Graphics::TBitmap();
  2. Bitmap1 = new Graphics::TBitmap;


essaye de comprendre ce que tu écris...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-04-2005 à 15:19:17    

Ben le problème est que je n'ai encore pas eu assez de cours pour savoir ce que ces deux lignes signifient exactement (je me lance tout seul dans les bitmaps).
En fait ce sont deux façons différentes que j'ai trouvé sur internet afin de créer mon Bitmap1. Pour moi une de ces deux lignes suffirait pour le créer, mais il semble que non.
En fait c'est surtout le therme avec "::" qui me pose problème. Je n'arrive pas à créer le Bitmap1.

Reply

Marsh Posté le 15-04-2005 à 15:58:06    

En fait voilà un exemple, imagine un "module" Bidule qui définie un objet Obj,pour accédé à l'objet obj tu peux faire  
Bidule::Obj ainsi tu évite tout confusion possible quand à l'origine de ton objet.
Si tu ne comprend pas les deux lignes e te conseilel de revoir ce qu'est un pointeur.

Reply

Marsh Posté le 15-04-2005 à 16:48:35    

Ces 2 lignes ne sont pas bien méchantes en elles-même, c'est juste qu'on se demande si tu comprends quelque chose ;)
En gros tu as écris ça:

Code :
  1. int toto = 10;
  2. toto = 5; // a quoi sert le = 10 ?


Bitmap1 c'est une variable comme les autres. Si tu dois l'utiliser à plusieurs endroits ben faut faire en sorte qu'elle soit accessible en plusieurs endroits...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-04-2005 à 17:08:25    

En fait je jouait avec "//" pour voir si au moins une des deux lignes me donnait un bon résultat.
 
Mais vous me donner une super idée, je crois avoir compris mon erreur (que j'avais d'ailleurs déjà esseyé de corriger mais j'ai mal procéder).
 
Je rends compte du résultat.

Reply

Marsh Posté le 15-04-2005 à 17:48:01    

Merci HelloWorld, c'est toi qui a trouvé mon problème : "faut faire en sorte qu'elle soit accessible en plusieurs endroits..." et moi qui cherchait à modifier une des deux premières lignes.
 
C'est primitif comme erreur mais c'est ça. Le pire est que j'y avais pensé et que j'avais esseyé de modifier mais je m'était trompé d'évènement.
 
TRES GRAND MERCI POUR TA PATIENCE. :) :) :)
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed