Posté le 08/06/2017 15:09
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 164 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 08/06/2017 15:15 | #
N'hésite pas à regarder les fonctions du SDK (dans les pdf qui sont dans le zip, que tu dois normalement avoir) et MonochromeLib (logiciels -> snippets).
Dans ton cas ce serait Bdisp_AllClr_DDVram ou ML_clear_vram.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 08/06/2017 15:22 | #
Ce n'est pas très compliqué. Il y a plusieurs fonctions qui peuvent t'intéresser :
- Bdisp_AllClr_VRAM() efface la mémoire vidéo (vram), une zone de mémoire dans laquelle on fait les dessins ;
- Bdisp_PutDisp_DD() affiche les contenus de la mémoire vidéo à l'écran ;
- GetKey() appelle Bdisp_PutDisp_DD() puis attend que l'utilisateur appuie sur une touche, et stocke le numéro de cette touche dans une variable.
La raison pour laquelle la mémoire vidéo existe est qu'on peut, grâce à elle, effectuer plein d'opérations de dessin dans la mémoire et n'afficher que le résultat final une fois que le dessin est terminé. Cette technique est connue sous le nom de double buffering et est utilisée par tout le monde, tout le temps.
Tu peux noter que GetKey() rafraîchit l'écran pour toi, ce qui te simplifie la vie. Voici un exemple de code pour afficher des pages de texte, en attendant un appui de touche entre chaque page, et qui s'arrête si l'on appuie sur EXIT :
{
unsigned int key;
Bdisp_AllClr_VRAM();
PrintXY(1, 1, (const unsigned char *)"Page 1", 0);
GetKey(&key);
if(key == KEY_CTRL_EXIT) return;
Bdisp_AllClr_VRAM();
PrintXY(1, 1, (const unsigned char *)"Page 2", 0);
GetKey(&key);
if(key == KEY_CTRL_EXIT) return;
Bdisp_AllClr_VRAM();
PrintXY(1, 1, (const unsigned char *)"Page 3", 0);
GetKey(&key);
}
Comme tu peux le voir, c'est pas très difficile, et c'est répétitif. Un bon programme ferait tout ça de manière plus dynamique et paramétrable, mais déjà c'est une base.
Citer : Posté le 08/06/2017 15:32 | #
En faite, je vais essayer de m'expliquer, voici la partie de mon code qui nous interesse:
PrintMini(4,14,"Degres en Radians:",1);
PrintMini(4,22,"Degres ? =",1);
if(!IsKeyDown(KEY_CTRL_RIGHT))
{
EI_init();
my_string = EI_input_string(21, (const char*)".0123456789");
}
break;
case 2:
PrintMini(4,14,"Radians en degres:",1);
PrintMini(4,22,"Radians ? =",1);
if(!IsKeyDown(KEY_CTRL_RIGHT)||!IsKeyDown(KEY_CTRL_LEFT))
{
EI_init();
my_string = EI_input_string(21, (const char*)".0123456789");
}
break;
En gros, je voudrais qu'il me demande d'inscrire des caractères si je n'appuie pas sur le bouton de droite, par contre si j'appuie, le programme passe à la page suivante, mais je n'y arrive pas, c'est pour ça que je voulais parler de rafraichissement
Citer : Posté le 08/06/2017 15:39 | #
Le problème de IsKeyDown() est que cette fonction agit immédiatement, regarde si la touche est pressée, et s'arrête tout de suite. C'est pas une fonction très intéressante pour beaucoup de raisons, et dans un programme qui n'est pas « en temps réel » (comme un jeu), elle est assez inappropriée.
Une méthode plus fiable serait d'utiliser GetKey() (que j'ai décrite plus haut) de la manière suivante :
- Si l'utilisateur appuie sur la flèche droite, la saisie de la valeur n'est pas effectuée ;
- Si l'utilisateur appuie sur une autre touche (par défaut), la saisie de la valeur démarre.
Seulement, ça ne correspond pas bien au principe de la commande Basic ? que tu voulais utiliser. Peut-être le plus simple est-il d'accepter une entrée vide (ie l'utilisateur n'écrit rien et valide tout de suite avec EXE) : cela reproduit le même comportement mais avec la touche EXE et non flèche droite. Cela étant dit, avec IsKeyDown() tu ne pourras pas obtenir un comportement bien défini dans toutes les situations.
Dernière note, ton programme a l'air d'avoir beaucoup de niveaux d'indentation ; tu gagnerais peut-être à le séparer en fonctions.
Citer : Posté le 08/06/2017 15:47 | #
Je pense que je vais pas réfléchir plus, je vais laisser comme j'avais fait à la base, il n'y aura plus qu'à faire EXE, merci quand même!