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...
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).