Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Rafraichir écran en C
Pokallan Hors ligne Membre Points: 30 Défis: 0 Message

Rafraichir écran en C

Posté le 08/06/2017 15:09

Bonjour, je cherche une fonction qui me permettrait de rafraichir l'écran à l'appui d'une touche de la calculette pour rafraichir le programme.
Ce que je désire c'est que dès que j'appuie sur une touche, il affiche du nouveau texte sur la même page en rafraichissant l'écran.
Merci d'avance pour ceux qui prendront de leur temps


Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

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.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

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 :
void afficher_texte(void)
{
    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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pokallan Hors ligne Membre Points: 30 Défis: 0 Message

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:
case 1:
    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
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

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.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pokallan Hors ligne Membre Points: 30 Défis: 0 Message

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!

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 111 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