probleme à l'édition d'un TStringGrid

probleme à l'édition d'un TStringGrid - C++ - Programmation

Marsh Posté le 05-05-2006 à 10:27:26    

bonjour, j'ai un problème avec un TStringGrid, en effet a son edition, je n'arrive pas à limiter la longueur du code à un caractère, et de plus lorsque j'utilise la variable Key, le prog plante.. Help SVP...
 
Ci-joint une partie de mon code :

Code :
  1. void __fastcall TForm4::StringGrid1KeyPress(TObject *Sender, char &Key)
  2. {
  3.    int Key2;
  4.    Key2=Key;
  5.    int selec[2];
  6.    selec[1]=Form4->StringGrid1->Row;
  7.    selec[2]=Form4->StringGrid1->Col;
  8.    if((Key<30 && Key>40 )&& Key!='\b') Key=NULL; //n'accepte que les 0, les 1 et la touche effacer
  9.    if (Form4->StringGrid1->Cells[selec[2]][selec[1]]==' ') StringGrid1->Cells[selec[2]][selec[1]]=Key;


D'avance merci, Gouarf
 
[édité]
Voila mon nouveau Code, mais j'ai toujours mon probleme de limitation à un caractère, et si je vire les lignes (int Key2; Key2=Key) mon programme plante, je ne comprend vraiment pas.. Je ne me sert même pas de Key2. Pour le &Key, je sais pas trop le compilateur l'a posé, on dirait un pointeur.
 
Et maintenant j'aimerai savoir comment colorier une seule case de la Grille.
 
reD'avance merci !


Message édité par gouarf le 05-05-2006 à 16:58:18
Reply

Marsh Posté le 05-05-2006 à 10:27:26   

Reply

Marsh Posté le 05-05-2006 à 15:29:25    

SVP !! Quelqu'un peut m'aider, au moins pour Key ?
Merci.

Reply

Marsh Posté le 05-05-2006 à 15:44:46    

c'est quoi ton "&" dans la signature de la méthode ?
 
met des balises [ code ] stp.

Reply

Marsh Posté le 05-05-2006 à 17:07:50    

J'ai édité mon premier message, à mon avis mon compilateur merde un peu.

Reply

Marsh Posté le 05-05-2006 à 17:51:16    

Tu es sûr du test
if ((Key<30 && Key>40 )&& Key!='\b') ????
 
Comment peux-tu avoir à la fois Key < 30 et Key > 40 ????

Reply

Marsh Posté le 05-05-2006 à 18:01:47    

Trap D a écrit :

Tu es sûr du test
if ((Key<30 && Key>40 )&& Key!='\b') ????
 
Comment peux-tu avoir à la fois Key < 30 et Key > 40 ????


Effectivement  je viens de changer le code, maintenant c'est :
 

Code :
  1. void __fastcall TForm4::StringGrid1KeyPress(TObject *Sender, char &Key)
  2. {
  3. int Key2;
  4. Key2=Key;
  5. int selec[2];
  6. selec[1]=Form4->StringGrid1->Row;
  7. selec[2]=Form4->StringGrid1->Col;
  8. if ( Key > 49 && Key < 58 ) {
  9. if (Form4->StringGrid1->Cells[selec[2]][selec[1]]==' ') StringGrid1->Cells[selec[2]][selec[1]]=Key;
  10. }
  11. /*if ( Key = VK_RETURN ) {
  12. StringGrid1->Cells[selec[2]][selec[1]]=' ';
  13. } */
  14. }


 
Mais les trois dernière ligne ne fonctionnent pas, ou empeche de fonctionnner les trois précédentes quand elles sont enlevées du commentaire..

Reply

Marsh Posté le 05-05-2006 à 21:15:04    

gouarf a écrit :

Effectivement  je viens de changer le code, maintenant c'est :
 

Code :
  1. void __fastcall TForm4::StringGrid1KeyPress(TObject *Sender, char &Key)
  2. {
  3. int Key2;
  4. Key2=Key;
  5. int selec[2];
  6. selec[1]=Form4->StringGrid1->Row;
  7. selec[2]=Form4->StringGrid1->Col;
  8. if ( Key > 49 && Key < 58 ) {
  9. if (Form4->StringGrid1->Cells[selec[2]][selec[1]]==' ') StringGrid1->Cells[selec[2]][selec[1]]=Key;
  10. }
  11. /*if ( Key = VK_RETURN ) {
  12. StringGrid1->Cells[selec[2]][selec[1]]=' ';
  13. } */
  14. }


 
Mais les trois dernière ligne ne fonctionnent pas, ou empeche de fonctionnner les trois précédentes quand elles sont enlevées du commentaire..


Evidemment, fais attention au test, c'est  

Code :
  1. if ( Key == VK_RETURN ) {
  2. StringGrid1->Cells[selec[2]][selec[1]]=" ";

A mon avis c'est " " et non pas ' ' mais je peux me tromper !

Reply

Marsh Posté le 05-05-2006 à 22:53:23    

Merci !

Reply

Marsh Posté le 05-05-2006 à 23:15:00    

    Pour colorier une case, le plus simple est d'utiliser l'événement OnDrawCell et de remplir le rectangle « Rect » du canevas

Code :
  1. StringGrid1->Canvas->FillRect(Rect);

par exemple.

Reply

Marsh Posté le 06-05-2006 à 13:29:01    

Je regarde ca, merci du tuyau
[édité]
J'ai un probleme, ca ne marche pas, il me dit : Type mismatch in parameter 'Rect' (wanted 'const TRect &', got 'TRect(int,int,int,int)')
Je cherche...


Message édité par gouarf le 06-05-2006 à 13:44:16
Reply

Marsh Posté le 06-05-2006 à 13:29:01   

Reply

Marsh Posté le 06-05-2006 à 15:30:17    

C'est bon, j'ai trouvé ! ca marche bien, merci beaucoup !

Reply

Sujets relatifs:

Leave a Replay

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