[c][rtf] exemple de tableau en rtf (pour richedit)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 672 fois - Téléchargée 18 fois

Contenu du snippet

Vue qu'il y a beaucoup de demande, pour faire des tableaux et que ce n'est pas très compliqué ^^, je vous met une fonction pour ajouter un tableau de 2 colonnes.

pour un tableau de 4 lignes et trois colonnes avec une marge inter cellule le code RTF serais :
pour plus amples infos voir spécifications RTF ou ce site : http://www.biblioscape.com/rtf15_spec.htm

{
\rtf
\trowd\
\trgaph70
\cellx2200
\cellx4400
\cellx6600
\intbl
toto0 \cell tutu \cell titi \cell
\row
toto1 \cell tutu \cell titi \cell
\row
toto2 \cell tutu \cell titi \cell
\row
toto3 \cell tutu \cell titi \cell
\row
}

Source / Exemple :


# //------------------------------------------------------------------------------
# // Projet : Exemple source RichEdit
# // Auteur : Hanteville Nicolas
# // Date de modification : 26/12/2008
# // Description : procédure de création de tableau de 2 colonne sur une seule ligne
# //               sans formatage de texte dans un RichEdit
# //------------------------------------------------------------------------------ 

void RichEditAjouterTableau(HWND HRichEdit,char* cel1,unsigned int tailleCel1,char* cel2,unsigned int tailleCel2)
{
  //création de la chaine
  char tbuffer[4096];
  unsigned short tailleTxt;

  tailleTxt = strlen(cel1) + strlen(cel2);
  
  //mode automatique de gestion de la taille des colonnes
  if (tailleCel1 == 0)
  {
    tailleCel1 = strlen(cel1) * 100 + 200;
  }  
  if (tailleCel2 == 0)
  {  
    tailleCel2 = strlen(cel2)* 100 + 200;
  }

  //création de la chaine 
  snprintf(tbuffer,4096,"{\\rtf\\trowd\\trgaph70\\cellx%d\\cellx%d\\intbl %s \\cell %s \\cell \\row}",tailleCel1,tailleCel1+tailleCel2,cel1,cel2);
  
  //init du format du texte (pour éviter de garder le format antérieur dans le tableau)
  // cette partie peut aussi servir à ajouter de la couleur, gras italique, etc..
  CHARFORMAT2 Format; //format du texte d'un richedit
  CHARRANGE Selection; //sélection

  ZeroMemory(&Format, sizeof(CHARFORMAT2));
  Format.cbSize = sizeof(CHARFORMAT2);
  Format.dwMask = CFM_COLOR|CFM_CHARSET|CFM_UNDERLINE|CFM_ITALIC|CFM_BOLD|CFM_SIZE;
  Format.crTextColor = 0;
  Format.dwEffects = 0;
  Format.yHeight = 200;
  
  //récupération de la taille du texte contenu, on ajoute le texte après
  GETTEXTLENGTHEX TxtLenfth;
  TxtLenfth.codepage=CP_ACP;
  TxtLenfth.flags=GTL_NUMCHARS;
  unsigned int pos= SendMessage(HRichEdit,EM_GETTEXTLENGTHEX,(WPARAM)&TxtLenfth,0);

  Selection.cpMin = pos;
  Selection.cpMax = pos+tailleTxt ; //attention ici il devrais 
                                    // y avoir la taille réel du texte
                                    // sans le formatage RTF

  //mise en place de la zone de sélection
  SendMessage(HRichEdit, EM_EXSETSEL, 0, (LPARAM) &Selection); 

  //format du text
  SendMessage(HRichEdit, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &Format);

  //écriture du texte dans le rich edit
  SendMessage(HRichEdit, EM_REPLACESEL,(WPARAM)0,(LPARAM)tbuffer); 
}

Conclusion :


Si vous avez des remarques ^^

J'espère que ce code viendra en aide aux désireux :p

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.