1

bonjour,

voici un extrait de mon menu lance via un MainMenu(); dans le _main() :

short MainMenu()
{
char d[]="TITRE";
short int err_code = 0;
HANDLE FirstMenu;

FirstMenu = PopupNew (d, 0);
PopupAddText (FirstMenu, 0, "Parameters", 1);
PopupAddText (FirstMenu, -1, "Calendar", 2);
PopupAddText (FirstMenu, 0, "Ephemeris", 3);
PopupAddText (FirstMenu, 0, "Graphic View", 4);
PopupAddText (FirstMenu, -1, "Exit", 6);
PopupAddText (FirstMenu, 1, "Time", 10);
PopupAddText (FirstMenu, 1, "Location", 11);
PopupAddText (FirstMenu, 1, "Tools", 12);
PopupAddText (FirstMenu, 1, "New Object", 13);
PopupAddText (FirstMenu, 1, "Edit Object", 14);

.../...

while(err_code != -1)
{
err_code = PopupDo(FirstMenu, CENTER, CENTER, 0); // catch menu level
switch (err_code)
{
// Parameters menu
case 10:
if((err_code = EdTime(ptime)) != 0)
ErrMsg(MSG_ERR, err_code);
break;
case 11:
if((err_code = EdPlace(pplace)) != 0)
ErrMsg(MSG_ERR, err_code);
break;
case 12:
if((err_code = EdParam(pparam)) != 0)
ErrMsg(MSG_ERR, err_code);
break;
// Calendar menu
case 2:
if((err_code = Calend(ptime, pplace)) != 0)
ErrMsg(MSG_INFO, MSG_NIMP);
break;
// Ephemeris menu
case 30:
if((err_code = DrawingPosObj(SUN, ptime, pplace, pparam)) != 0)
ErrMsg(MSG_INFO, MSG_NIMP);
break;
case 31:
if((err_code = DrawingPosObj(MOON, ptime, pplace, pparam)) != 0)
ErrMsg(MSG_INFO, MSG_NIMP);
break;
case 32:
if((err_code = DrawingPosObj(MERCURY, ptime, pplace, pparam)) != 0)
ErrMsg(MSG_INFO, MSG_NIMP);
break;
case 33:
if((err_code = DrawingPosObj(VENUS, ptime, pplace, pparam)) != 0)
ErrMsg(MSG_INFO, MSG_NIMP);
break;
.../...

// EXIT menu
case 6:
HeapFree(FirstMenu);
err_code = -1; // exit(0);
break;
}
}
return(err_code);
}

voila, ca marche bien SAUF si l'utilisateur ETEINT la calculatrice via une 2nd ON alors que l'on a pas quite le programme. La ca se met en boucle infinie.... Comment faire ? Je n'ai pas envie d'alourdir mon code via un disable des touche 2nd et DIAM etc...
Comment faite vous dans vos programme ?
Le but est bien entendu de reafficher le menu principal en sortie des fonctions eventuellement appelee, SAUF si demande de fin de prog.

Amicalement,
Wolf
Astronome Amateur
Programmeur quand il fait pas bo !

2

3

Fais un GKeyFlush après ton PopupDo.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Le INT_VEC_ON_KEY_PRESS ?! j'sais pas le desactive sad
Mais ne peut t'on pas faire "boucler" un menu sans ce pb ?
Astronome Amateur
Programmeur quand il fait pas bo !

5

M e r c i Kevin !
ca fait une heure que je me prenais la tronche wink
Astronome Amateur
Programmeur quand il fait pas bo !

6

7

Je ne parlais que du menu wink
Ma premiere release devrait etre operationnelle ds 2 ans tongue
Astronome Amateur
Programmeur quand il fait pas bo !

8

eh bien c'est rapide, ça!
Certains ont des programmes prévus pour 2056 grin
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

9

2056 ? j'en connais pas ? tu peut citer tes sources ?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

10

enfin, en même temps, c'est une façon de parler, et pas vraiment important... et sans trop de rapport avec le sujet...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

11

Pour revenir ds le sujet justement, voici un autre probleme :

Comment gerer 2 menus deroulant dans une meme dialbox ?

// ---- CODE

char *buffer = NULL;

HANDLE Popup = H_NULL;
HANDLE HMount = H_NULL;
HANDLE HProto = H_NULL;

if ((buffer = (char *)calloc(8,sizeof(char))) == NULL)
return(MSG_MEM);
else if ((Popup = DialogNewSimple (157, 85)) == H_NULL)
{
free(buffer);
return(MSG_MEM);
}

if( (RFchParam(pparam)) ) // take old values if ficht already exist
{
sprintf(buffer,"%-3hu%-3hu",pparam->GRS_Ref,pparam->Zoom);
buffer[2] = 0;
buffer[5] = 0;
}
DialogAddTitle (Popup, "Config", BT_OK, BT_CANCEL);
DialogAddRequest (Popup, 5, 15, "GRS Ref. :", 0, 2, 3);
DialogAddRequest (Popup, 5, 27, "Zoom Factor :", 3, 2, 3);
if( (HMount = PopupNew(NULL, 0)) != H_NULL )
{
PopupAddText( HMount, -1, "Equ", 1);
PopupAddText( HMount, -1, "Altaz", 2);
DialogAddPulldown(Popup, 5, 39, "Mount :", HMount, 0);
}
if( (HProto = PopupNew(NULL, 0)) != H_NULL )
{
PopupAddText( HProto, -1, "Not Connected", 1);
PopupAddText( HProto, -1, "LX-200", 2);
PopupAddText( HProto, -1, "Ascom", 3);
DialogAddPulldown(Popup, 5, 52, "Protol :", HProto, 0);
}
if (DialogDo (Popup, CENTER, CENTER, buffer, pparam->PullDownBuffer) == KEY_ENTER)
{
pparam->GRS_Ref = atoi(buffer);
pparam->Zoom = atoi(buffer+3);
}
HeapFree (HMount);
HeapFree (HProto);
HeapFree (Popup);
free(buffer);
return(FchParam(pparam));

/--- FIN CODE

Ma variable PullDonwBuffer est definie comme un tableau dans une structure declaree ds mon .H
Le soucis est que DialodDo n'utilise que le premier rang de ce tableau, du coup mes 2 listes ont toujours le meme resultat sad
Comment indiquer le niveau du buffer ?

Amicalement,
Wolf
Astronome Amateur
Programmeur quand il fait pas bo !

12

Ou la... Laissez tomber j'ai les yeux qui se croisent sad
m'en vais faire dodo moi tongue

->
DialogAddPulldown(Popup, 5, 39, "Mount :", HMount, 0);
DialogAddPulldown(Popup, 5, 52, "Protol :", HProto, 1);

Fo pas abuser du copier/coller wink

A+
Astronome Amateur
Programmeur quand il fait pas bo !