Fermer2
StoneWolfLe 07/07/2007 à 13:44
Bonjour tout le monde

Eh bien voila j'écris ce topic pour tous ceux qui veulent créer des boites de dialogues (comme celles du TIOS) sans avoir à taper 50 fois le même code...
#define USE_TI92PLUS          // Ne pas compiler pour  #define USE_V200              // Ti-89 (pour le moment)  #define SAVE_SCREEN  #define OPTIMIZE_ROM_CALLS  #define voir(expr) printf(#expr " = %d\n", expr)  #define voir_str(expr) printf(#expr " = %s\n", expr)    #include <tigcclib.h>  char *titre,*request[5],*text[5];    void dialogue(char *titre,char *text[5],char *request[5], int bt_1, int bt_2) {      int nb_text=0,nb_req=0,i=0,y=15,taille_max=0;        for(i=0;i<5;i++) {      if(strlen(text[i])) ++nb_text;   //Nombre de textes      taille_max=max(taille_max,strlen(text[i]));      if(strlen(request[i])) ++nb_req; //Nombre de requests      taille_max=max(taille_max,strlen(request[i]))    }    taille_max=max((6*taille_max),(4*strlen(titre)));    int taillex=taille_max+10,tailley=10*nb_text+12*nb_req+29;    //11 car 8 pour la taille du texte et 3 pour le decalage  vertical +29 pour les boutons            char buffer[105];  //100 pour 20*5 requests + 5 '\0'    char buffer2[21];    char buffer3[21];    char buffer4[21];    char buffer5[21];    char *buf=buffer;    char *buf2=buffer2;    char *buf3=buffer3;    char *buf4=buffer4;    char *buf5=buffer5;      int decalage_buffer=0;    if(nb_req)      taillex=max(taillex,200);    if(bt_1||bt_2)      taillex=max(taillex,35);    if(bt_1&&bt_2)      taillex=max(taillex,70);        //Pour la place occupee par les boutons s'il y en a    HANDLE h = DialogNewSimple (taillex,tailley);    DialogAddTitle (h,titre,bt_1,bt_2);    for(i=0;i<nb_text;i++,y+=10)      DialogAddText (h,3,y,text[i]);    for(i=0;i<nb_req;i++,y+=12,decalage_buffer+=20)      DialogAddRequest (h,3,y,request[i],decalage_buffer,20,30-strlen(request[i]));    DialogDo(h,CENTER,CENTER,buffer,NULL);      if(nb_req==0)      goto fin;    while(*buf2++=*buf++);          //Copie dans buffer2    if(nb_req<2)      goto fin;    buf+=(20-(strlen(buffer2)+1));  //Va au 3eme buffer    while(*buf3++=*buf++);          //Copie dans buffer3    if(nb_req<3)      goto fin;    buf+=(20-(strlen(buffer3)+1));  //Va au 4eme buffer    while(*buf4++=*buf++);          //Copie dans buffer4    if(nb_req<4)      goto fin;    buf+=(20-(strlen(buffer4)+1));  //Va au 5eme buffer    while(*buf5++=*buf++);          //Copie dans buffer5    if(nb_req<5)      goto fin;    fin:    HeapFree (h);  }    void _main(void)  {    int bt_1,bt_2;      titre="Creation de votre personnage - Page 1";    text[0]="Vous allez maintenant créer";    text[1]="votre personnage et choisir";    text[2]="ses aptitudes et caractéristiques.";    request[0]="Entrez votre nom:";    bt_1=BT_NONE;    bt_2=BT_OK;    dialogue(titre, text, request, bt_1, bt_2);  }
Comment l'utiliser: Il n'y a qu' à assigner des chaînes de caractères aux variables *text[5], *request[5] et *titre.

Les popups ne sont pas encore gérées, désolé(ça viendra..., faut juste que je relise un peu la documentation).