Impression d'un editbox en plusieurs pages

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 349 fois - Téléchargée 28 fois

Contenu du snippet

J'ai rajouté à ce code (récupéré sur ce site) une petite partie qui permet surtout de faire une fonction simple d'impression d'un editbox.

Le + important: Il est capable de remplacé les '\n' par des saut à la lignes et changer de pages toutes les 65 lignes affiché.

Biensur il est modifiable façilement pour pouvoir imprimer n'importe quel char* voir n'importe quel fichier façilement.

Source / Exemple :


void ImprimeEditBox()
{
    char *LeText = NULL;
    LeText = new char[(GetWindowTextLength(EditHandle) + 2)];
    int TextLen;
//    TextLen = GetWindowTextLength(EditHandle);
    TextLen = GetWindowText(EditHandle, LeText, (GetWindowTextLength(EditHandle) + 1));

//    MessageBox (NULL, , "IMPRIMANTE", MB_OK);
    MessageBox (NULL, LeText, "IMPRIMANTE", MB_OK);
	PRINTDLG	pd;
	DOCINFO		di;
	char*		szMessage;

	memset (&pd, 0, sizeof(PRINTDLG));
	memset (&di, 0, sizeof(DOCINFO));

	di.cbSize = sizeof(DOCINFO);
	di.lpszDocName = "Test";

	pd.lStructSize = sizeof(PRINTDLG);
	pd.Flags = PD_PAGENUMS | PD_RETURNDC;
	pd.nFromPage = 1;
	pd.nToPage = 1;
	pd.nMinPage = 1;
	pd.nMaxPage = 1;
	szMessage = 0;

	if (PrintDlg (&pd))
	{
		if (pd.hDC)
		{
			if (StartDoc (pd.hDC, &di) != SP_ERROR)
			{
              // Va contenir le texte du EditBox
              char *LeText = NULL;
              // Va contenir le nombres de caractères dans le EditBox
              int TextLen = 0;
              // Récupère le nombres de caractères dans le EditBox
              TextLen = GetWindowTextLength(EditHandle);
              // S'il n'est pas vide
              if (TextLen)
              {
                // Alloue de la mémoire pour stocker le texte
                LeText = new char[(TextLen + 2)];
                // Récupère le texte
                TextLen = GetWindowText(EditHandle, LeText, (TextLen + 1));
                char LignePrint[100];
//                int i =0;
                int Index1 = 0;
                int Index2 = 2;
                int Exit = 0;
                if (TextLen > 0)
                {
                  for (int i=0;i < TextLen;i++)
                  {
                    LignePrint[Index1] =  LeText[i];
                    if (LeText[i] == '\n')
                    {
                      Index2 ++;
                      LignePrint[Index1] = '\0';
                      TextOut (pd.hDC,100, Index2*100, LignePrint, strlen(LignePrint));
                      Index1 = 0;
                    }
                    else Index1 ++;
                    if (Index2 == 60)
                    {
                  	   EndPage (pd.hDC);
                       EndDoc (pd.hDC);
                       StartDoc (pd.hDC, &di);
                       Index2 = 2;
                    }
                  }/**/
                  Index2 ++;
                  LignePrint[Index1] = '\0';
                  TextOut (pd.hDC,100, Index2*100, LignePrint, strlen(LignePrint));
               	  EndPage (pd.hDC);
                  EndDoc (pd.hDC);
                  szMessage = "IMPRESSION OK";
                }
                else MessageBox (NULL, "Ne peut pas imprimer du vide", "IMPRIMANTE", MB_OK);
              }
			}
			else
			{
				szMessage = "ERREUR Type 1";
			}
		}
		else
		{
			szMessage = "ERREUR Type 2.";
		}
	}
	else
	{
		szMessage = "Impression annulé par l'utilisateur";
	}
	if (szMessage)
	{
		MessageBox (NULL, szMessage, "IMPRIMANTE", MB_OK);
	}
	return;
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
37
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
13 avril 2006

A ce moment la peux tu me dire ou et comment il faut que je modifie le code?

merci de ton attention
Messages postés
25
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
17 novembre 2003

Non je pense que cela n'as rien a voir, la je ne gère que l'impression de texte, pour une image il faut faire autrement.
Messages postés
37
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
13 avril 2006

slu
je suis en 2e annee et le cours de Vc++ est en 3e annee du coup je connais le c++ mais pas Vc++

question:
est ce que je peux inserer ton code dans une IHM pour imprimer des courbes (images)?

Merci d'avance
Messages postés
25
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
17 novembre 2003

je ne gère que les retours à la ligne, pas les tabulations.
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
question:
tu gères bien les saut de page (\n)
mais qu'en est'il des sauts de tabulation ?
Afficher les 8 commentaires

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.