probleme pour imprimer

probleme pour imprimer - Programmation

Marsh Posté le 27-03-2002 à 13:57:05    

voila, g ce code fournit avec dev-c++ :
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
 
 
 
int main ()
{
     
 PRINTDLG pd;
 DOCINFO  di;
 char*  szMessage;
    char        txt[1024];
    LPSIZE        taille;
 
     
     
        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)
   {
                 
 
    StartPage (pd.hDC);
 
                 
 
    TextOut (pd.hDC, 0, 0, "Hello, printer!", 15);
                 
 
    EndPage (pd.hDC);
 
    EndDoc (pd.hDC);
 
    szMessage = "Printed.";
   }
   else
   {
    szMessage = "Could not start document.";
   }
  }
  else
  {
   szMessage = "Could not create device context.";
  }
 }
 else
 {
  szMessage = "Canceled or printer could not be setup.";
 }
 
 if (szMessage)
 {
  MessageBox (NULL, szMessage, "Print Test", MB_OK);
 }
 
 return 0;
}
 
 
Mais à la place de : TextOut (pd.hDC, 0, 0, "Hello, printer!", 15);
je voudrait pouvoir mettre ce ke je veut a la place de "Hello, printer", ou plutot un fichier, merci de votre aide


---------------
Ma maman disait toujours: "la vie c'est comme une boite de chocolat, et si tu touche à mes chocolats, t'es mort !!!"
Reply

Marsh Posté le 27-03-2002 à 13:57:05   

Reply

Marsh Posté le 27-03-2002 à 14:03:04    

Normalement, on peut mettre TOUT ce qu'on veut, et qui utilise le pd.HDC (tracé de traits, texte divers et variés, etc..).  
 
Si on a du code qui trace à l'écran, si on prend le pd.HDC à la place, ça sort sur le printer au lieu de l'écran (c'est comme ça que je fais :D). Ca évite d'avoir du code spécifique. Faut juste voir les dimensions du papier (différent de l'écran, fonction du pilote, options, ..), sinon, risque de déborder.

Reply

Marsh Posté le 27-03-2002 à 14:25:31    

[Des trucs à faire au labo]...
 
Une fonction très utile pour connaître les caractéristiques de l'imprimante courante: GetDeviceCaps()
 
    GetDeviceCaps(pd.hDC, HORZRES); donne la résolution horizontale
    GetDeviceCaps(pd.hDC, VERTRES);  
    GetDeviceCaps(pd.hDC, LOGPIXELSY;
    GetDeviceCaps(pd.hDC, BITSPIXEL);
    HautPage = GetDeviceCaps(pd.hDC, VERTSIZE); Taille hauteur
    LargPage = GetDeviceCaps(pd.hDC, HORZSIZE); Taille largeur
 
Si le prog écrit sur une feuille, si on paramètre les coordonnées, passer de la feuille à l'imprimante est direct.
 
Si c'est pour lister un fichier, faut tenir compte de la taille des caractères pour demander saut de page (EndPage (pd.hDC);) quand page pleine.

Reply

Marsh Posté le 27-03-2002 à 15:26:51    

en fait, je maitrise pas grand chose en c. Mon probleme est le suivant : un utilisateur creer un fichier, et je veux qu'il puise imprimer ce fichier sans avoir a allé dessus, j'avais fait un truc tres moche : system("print nom_fichier" );  mais ca marche pas sur des imprimantes rezo. Je comprend pas tout au code que j'ai indiquer je veux juste pouvoir l'integrer dans mon source, je voudrait seulement savoir si c'est possible de remplacer TextOut par une autre commande qui prendre le nom de mon fichier comme parametre d'entrée.
 
Merci quand meme carbon_14, ca fait toujours plaisir de trouver des reponses, en esperant que tu puisse avoir une reponse "simple" a mon probleme (bah oui, j'ai des problemes de comprehension desolé  :heink:


---------------
Ma maman disait toujours: "la vie c'est comme une boite de chocolat, et si tu touche à mes chocolats, t'es mort !!!"
Reply

Marsh Posté le 27-03-2002 à 16:54:39    

up  :bounce:


---------------
Ma maman disait toujours: "la vie c'est comme une boite de chocolat, et si tu touche à mes chocolats, t'es mort !!!"
Reply

Marsh Posté le 28-03-2002 à 08:37:26    

ya vraiment personne ki peut m'aider, c important de pouvoir imprimer pour mon programme  :cry:


---------------
Ma maman disait toujours: "la vie c'est comme une boite de chocolat, et si tu touche à mes chocolats, t'es mort !!!"
Reply

Marsh Posté le 28-03-2002 à 10:33:25    

Le fichier, c'est du texte pur ? Pas trop grand pour Notepad ? On doit pouvoir (faut que je fasse des tests) faire un shell sur Notepad.exe -p nomfich ou qq chose analogue (j'espère, je délire peut-être :(). Ca devrait sortir sur l'imprimante courante tel que ça serait si on l'avait chargé puis demandé "imprime".
 
Ce devrait être l'équivalent de "Imprimer" du gestionnaire de fichier (bouton droit). Je teste dès que manip finalisée.

Reply

Marsh Posté le 28-03-2002 à 11:15:03    

J'ai regardé dans l'explorateur de fichiers, les TXT sont associés à NOTEPAD par  
C:\WINNT\system32\NOTEPAD.EXE /p pour l'impression.
 
Je viens d'essayer sur imprimante réseau (ss Win NT4) la commande
C:\WINNT\system32\NOTEPAD.EXE /p e:\test.txt, et c'est sorti avec les défauts de NOTEPAD (lignes trop longues coupées, police par défaut, ..).
 
Faudrait créer une chaîne de caractères avec "" autour du nom de fichier s'il comporte des espaces et faire un shell.
 
Sinon, si l'imprimante réseau est définie comme lpt2 virtuel (c'est bon sous Win 3.11, sous les autres, je sait pas trop), on peut (pouvait) aussi faire copy NomCompletFich LPT2: (mais des fois pb d'éjection de dernière page :o) ou type NomCompletFich > LPT2
 
Il me semble que sous Win9x et suite, on peut définir jusqu'à 9 LPT (dont 8 (ou 7 si on a LPT2 installé physiquement) virtuels).

Reply

Marsh Posté le 28-03-2002 à 13:24:16    

Excellent, merci de tout coeur carbon_14 j'arrive a faire ce que je veux faire, t'es génial. En fait je créé un fichier BAT que j'execute a la fin de mon prog, comme ca je peux mettre le nom de mon fichier dedans,  encore merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed