class ggstextboxsafe:public widget { public: short X,Y,H,W;//coordonnes de la textbox unsigned int linetodraw;//nbdeligne a afficher unsigned int linelenght;//taille de la ligne en charactere short linestart;//ligne ou commencer l affichage. char *texte;//chaine de charactere initiale char **buffertexttransform;//chaine de charactere coupe avec les tokens " " "." short bufferlinenb;//nombre de ligne dans le buffer char **buffertextfit;//buffer a afficher avec decoupage des chaine en fonction la place des fenetres widget *parent; short taillesave; char espacement; char handle; short ymouse;//variable pour le parcour d une textbox int backgroundcolor; int textcolor; int barcolor; int scrollercolor; CALLBCK redrawprocess(); CALLBCK ggswidgetcallbck(); CALLBCK ggsmouseproc(); short counter; //void getcoord(int x,int y,int x1,int y1); ggstextboxsafe(const char *inputtext,short xcoord,short ycoord,short w,short h,widget *gparent,char cespacement=9); ggstextboxsafe(const char *inputtext,short xcoord,short ycoord,short w,short h,widget *gparent,int cbackgroundcolor,int ctextcolor,int cbarcolor,int cscrollercolor,char cespacement=9); ~ggstextboxsafe(); }; ggstextboxsafe::ggstextboxsafe(const char *inputtext,short xcoord,short ycoord,short w,short h,widget *gparent,int cbackgroundcolor,int ctextcolor,int cbarcolor,int cscrollercolor,char cespacement) { bool exception=false;//booleen pour gerer les exceptions o cas ou les chaine sont impossibles a couper this->backgroundcolor=cbackgroundcolor; taillesave=0; barcolor=cbarcolor; textcolor=ctextcolor; scrollercolor=cscrollercolor; this->ymouse=0; this->espacement=cespacement; this->handle=0; this->parent=gparent; this->parent->addwidget(this); short charcounter=0; texte=new char[strlen(inputtext)+1];//creation d une chaine de taille inputtext strcpy(texte,inputtext );//copi de la chaine inputtext dans la chaine cree X=xcoord;//copie des coordonnees Y=ycoord; W=w; H=h; this->linetodraw=float(H-16)/this->espacement; bufferlinenb=0; linelenght=float(strlen(texte))/(text_length(font,this->texte)/float(W-16)+1);//calcul de la taille moyenne d une ligne. char *ptr=texte;//mise en place de pointeur sur la premier charactere de la chaine. bufferlinenb=0;//utilisation de cette variable pour compter les chaine crees ptr=texte;//mise en place de pointeur sur la premier charactere de la chaine. charcounter=0; while (*ptr!='\0')//creation de chaine de charactere de la taille des ligne tokenisees { charcounter++;//ajout de un dans le compteur de charactere if (charcounter>=linelenght)//si le compteur de charactere et plus gran ou egal au nb de charactere par ligne { if(*ptr=='.' || *ptr=='!' || *ptr==' ' || *ptr=='?')//on test si il y a des token apres lequel on peut couper { //buffertexttransform[bufferlinenb]=new char[charcounter+1]; bufferlinenb++; charcounter=0; } else//sinon on repart en arriere pour trouver un espace dans lequel couper. { while(*ptr!=' ' && *ptr!='.' && *ptr!='?' && exception!= true) { ptr--; charcounter--; if(charcounter<=0){charcounter=linelenght;ptr=ptr+linelenght;exception=true;} } ptr++; //buffertexttransform[bufferlinenb]=new char[charcounter+1]; bufferlinenb++; charcounter=1; } } if(*ptr=='\n') { //buffertexttransform[bufferlinenb]=new char[charcounter+1]; bufferlinenb++; charcounter=0; } ptr++; } if(charcounter!=0) { // buffertexttransform[bufferlinenb]=new char[charcounter+1]; bufferlinenb++; charcounter=0; }//fin du comptage de ligne.... exception=false; //buffertexttransform=new char*[bufferlinenb+1];//creationd un tableau de pointeur pour les lignes avec 1 en plus o cas ou char counter n est pas vide lorsque l on rencontre NULL //for (int i=0;i=linelenght)//si le compteur de charactere et plus gran ou egal au nb de charactere par ligne { if(*ptr=='.' || *ptr=='!' || *ptr==' ' || *ptr=='?')//on test si il y a des token apres lequel on peut couper { //buffertexttransform[bufferlinenb]=new char[charcounter+1]; array[bufferlinenb]=charcounter; bufferlinenb++; charcounter=0; } else//sinon on repart en arriere pour trouver un espace dans lequel couper. { while(*ptr!=' ' && *ptr!='.' && *ptr!='?' && exception!= true) { ptr--; charcounter--; if(charcounter<=0){charcounter=linelenght;ptr=ptr+linelenght;exception=true;} } ptr++; //buffertexttransform[bufferlinenb]=new char[charcounter+1]; array[bufferlinenb]=charcounter; bufferlinenb++; charcounter=1; } } if(*ptr=='\n') { //buffertexttransform[bufferlinenb]=new char[charcounter+1]; array[bufferlinenb]=charcounter; bufferlinenb++; charcounter=0; } ptr++; } if(charcounter!=0) { // buffertexttransform[bufferlinenb]=new char[charcounter+1]; array[bufferlinenb]=charcounter; bufferlinenb++; charcounter=0; }//fin de creation de lignes.... buffertexttransform=new char*[bufferlinenb+1];//creationd un tableau de pointeur pour les lignes avec 1 en plus o cas ou char counter n est pas vide lorsque l on rencontre NULL buffertextfit=new char*[bufferlinenb+1]; for (int i=0;i<bufferlinenb+1;i++){ buffertexttransform[i]=new char[linelenght+1]; buffertextfit[i]=new char[linelenght+1]; } ptr=texte;//copie des ligne tokenise dans le tableau et ajout de NULL pour les terminer unsigned int counter=0; for (int t=0;t<bufferlinenb;t++) { for (int u=0;u<array[t];u++) { counter++; buffertexttransform[t][u]=*ptr; if(counter<strlen(inputtext)+1)ptr++; if(buffertexttransform[t][u]=='\n') buffertexttransform[t][u]='\0'; } // if(buffertexttransform[t][u]=='\n') // buffertexttransform[t][u]='\0'; buffertexttransform[t][u]='\0'; } for ( int r=0;r<bufferlinenb;r++)//tranformation a effectuer si il s agit de text charge depuis fichier. { for (int f=0;f<linelenght;f++) { if(buffertexttransform[r][f]==13)buffertexttransform[r][f]='\0'; } } linestart=0; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionchar machaine[] = "kjvhjkWcbn,sqbdfkhbW,xc ²,n;wxbcJKHdf cN"; char manouvellechaine[64]; char *c = machaine; char *d = manouvellechaine; int i, max = 10; while(1) { for (i = 0; i < max; i++) { *d++ = *c; if(!*c) goto end; c++; } *d++ = '\n'; } end: //...