1

Bonjour,

J'ai commencé par codé des petits programmes pour ma TI 89 en Ti-Basic. Ayant quelques connaissances en C, je me suis mis à coder en C pour ma TI.
Mon problème est que je ne vois pas comment créer un menu, y a-t-il des fonctions déjà présentent dans la ROM (genre toolbar pour TI-Basic) ou alors faut-il programmer le menu à la main ?

Merci smile

2

Tu peux effectivement créer une toolbar / un menu (c'est la même structure de données) dynamiquement ou statiquement.
Regarde la documentation de menus.h smile
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

3

Merci,
Je me suis un peu renseigné sur menus.h, effectivement c'est ce que je cherche smile
Par contre je ne comprends pas certains points. Reprenons l'exemple de la doc:

void _main(void)
{
HANDLE menu_handle = MenuNew (2, 240, 18);
DynMenuAdd (menu_handle, 0, "First", 1, DMF_TEXT | DMF_TOP_SUB);
DynMenuAdd (menu_handle, 1, "Subitem 1.1", 5, DMF_TEXT | DMF_CHILD_SUB);
DynMenuAdd (menu_handle, 5, "Subitem 1.1.1", 8, DMF_TEXT | DMF_CHILD_SUB);
DynMenuAdd (menu_handle, 5, "Subitem 1.1.2", 9, DMF_TEXT | DMF_CHILD);
DynMenuAdd (menu_handle, 8, "Subitem 1.1.1.1", 10, DMF_TEXT | DMF_CHILD);
DynMenuAdd (menu_handle, 1, "Subitem 1.2", 6, DMF_TEXT | DMF_CHILD);
DynMenuAdd (menu_handle, 0, "Second", 2, DMF_TEXT | DMF_TOP_SUB);
DynMenuAdd (menu_handle, 2, "Subitem 2.1", 7, DMF_TEXT | DMF_CHILD);
DynMenuAdd (menu_handle, -1, "Third", 3, DMF_TEXT | DMF_TOP);
DynMenuAdd (menu_handle, -1, "Fourth", 4, DMF_TEXT | DMF_TOP);
HANDLE exec_handle = MenuBegin (NULL, 0, 0, MBF_HMENU, menu_handle);
short result;
do {
result = MenuKey (exec_handle, ngetchx ());
} while (result == M_NOTMENUKEY);
MenuEnd (exec_handle);
MenuUpdate ();
push_shortint (result);
}

En gros, ce code crée un menu, attends l'appuie d'une touche du menu que l'on stock dans la variable result. Puis on met à jour le menu. C'est bien ça ?
Ma question est donc: comment exécuter des instructions selon l'élément du menu choisis ? Je sais que pour quitter il faut un ID négatif, mais comment exécuter des instructions selon l'ID.
Plus particulièrement je voudrais récupérer le nom de l'élément du menu sélectionné dans une chaîne ou encore mieux dans la zone de saisie du texte (un peu comme les menus personnalisé en TI BASIC).

J'ai déjà essayé les (if result == ... mais sans succès sad

Merci d'avance smile

4

La derniere instruction avant de retourner au programme appellant ie :
push_shortint (result);

depose sur la pile( ESTACK ) l'entier 'resultat.

Tu a remarques que cette fonction ne retourne rien puisqu'elle est déclaré 'void'. Par contre l'instruction 'push_shortint' depose un resultat sur la Pile(ESTACK); ce qui permet de retourner un resultat( c'est la technique pour creer des fonctions TI-Basic).

Pour un utilisation en C elle doit etre déclaré 'int' et tu doit remplacé la derniere ligne par :
return result;