IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Imprimer un canvas sous n'importe quelle imprimante [FAQ]


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut Imprimer un canvas sous n'importe quelle imprimante
    bonjour,

    voila mon code, je l'explique

    je parcoure une base de donné ( sous c++builder 6.0), je lis les données
    et je crée un cadre ( genre carte de visite ), avec titre etc...
    il ya des ecriture en verticale , des lignes horizontale et verticale pour la decoupe du cadre.

    l'exemple

    il ya deux cadre par ligne, sur n'importe quelle imprimante Hp sa fontionne tres bien, car j'ai programme les coordonnée dessus "xa,xb,ya,yb". mais pourquoi sur une autre imprimante les impressions ne sont plus les memes ?

    je dois faire des coordonnée pour chaque imprimante ou faire un module de test d'impression.
    Le passage a une autre page d'impression (page n°2) est automatique du a la taille des cadre que j'ai calculé. ici sous hp sur une page il ya 14 cadres , 2 par ligne


    voici le code :
    je peux le compresser mais c'est pour y voire plus claire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    void __fastcall TForm1::printClick(TObject *Sender)
    {
       int xa,xb,ya,yb,x,y,z;
       xb=20; yb=480; xa=200; ya=1070;
     
       AnsiString data;
     
       TPrinter *Canvas = Printer();
       Canvas->BeginDoc();
       Canvas->Title="CADRE";
     
       TRect TheRect,TheRect2;
       Canvas->Canvas->Brush->Style = bsSolid;
       Canvas->Canvas->Font->Size = 11;
       Canvas->Canvas->Font->Style = TFontStyles()<< fsBold;
     
       DBNavigator->BtnClick(nbFirst);   // debut de la bd
       int tot = Table->RecordCount;     //  nbr d'enregistrement
       tot = (tot / 2) + fmod(tot,2);       //  pair ou impaire , 2 cadre / ligne
       z=1;                                         
     
       for(y=1; y<=tot; y++ ,x=0)
      {
       for(x=1; x<=2 && z<=Table->RecordCount; x++)
       {
         Canvas->Canvas->Brush->Color = clWhite;
         TheRect = Rect(xa,xb,ya,yb);
         Canvas->Canvas->Font->Color = clBlue;
         Canvas->Canvas->TextRect(TheRect, xa+30, xb+30, "CADRE");
         Canvas->Canvas->Font->Color = clGreen;
         Canvas->Canvas->MoveTo ( xa, xb+90);  
         Canvas->Canvas->LineTo(ya,xb+90);
         Canvas->Canvas->Font->Color = clBlack;
     
         data = DBGrid->Fields[0]->Text;
         Canvas->Canvas->TextOut( xa+30, xb+120, "Login : " + data);
         data = DBGrid->Fields[1]->Text;
         Canvas->Canvas->TextOut( xa+30, xb+180, "Code  : " + data);
         data = DBGrid->Fields[3]->Text;
         Canvas->Canvas->TextOut( xa+30, xb+240, "Mode  : " + data);
     
        Canvas->Canvas->Brush->Color = clRed;
        Canvas->Canvas->FrameRect(TheRect);
     
        TheRect2 = Rect(xa-100,xb-10,ya+100,yb+10);
        Canvas->Canvas->Brush->Color = clBlue;
        Canvas->Canvas->FrameRect(TheRect2);
        Canvas->Canvas->Brush->Color = clWhite;
     
        LOGFONT lgfont;
     GetObject( Canvas->Canvas->Font->Handle, sizeof(LOGFONT),&lgfont);
        //Angle *10
        lgfont.lfEscapement = 900; lgfont.lfOrientation = 900;  
        lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
        Canvas->Canvas->Font->Handle = CreateFontIndirect(&lgfont);
        SetGraphicsMode(Canvas->Canvas->Handle, GM_ADVANCED);  
        data = z;
        Canvas->Canvas->TextOut( xa-75, xb+360, "Ticket Nr " + data);
        Canvas->Canvas->TextOut( ya+10, yb, DateTimeToStr(Now()));
     
      GetObject( Canvas->Canvas->Font->Handle, sizeof(LOGFONT), &lgfont);
        lgfont.lfEscapement = 0;  lgfont.lfOrientation = 0;
        lgfont.lfOutPrecision = OUT_TT_ONLY_PRECIS;
        Canvas->Canvas->Font->Handle = CreateFontIndirect(&lgfont);
        SetGraphicsMode(Canvas->Canvas->Handle, GM_ADVANCED);
     
        xa =  (x * ya) + 200;
        ya =  (x +  1) * ya;
        DBNavigator->BtnClick(nbNext);
        z++;
       }
     
        xb=20; yb=480; xa=200; ya=1070;
        xb =  (y * yb) + xb;
        yb =  (y +  1) * yb;
      }
     
     Canvas->EndDoc();
    }
    en resumé :

    comment imprimer un canvas ou un rectangle d'une certaine taille xa,xb,ya,yb ; et que lors d'une impression cette taille est respecté par l'imprimante sous n'importe quelle marque imprimante.

    merci d'avance
    @++

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 682
    Points
    10 682
    Billets dans le blog
    3
    Par défaut

    Je déplace vers le forum spécialisé.

  3. #3
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut
    salut,

    il se trouve ou , se forum spécialisé ?

    merci

  4. #4
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 042
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 042
    Points : 8 252
    Points
    8 252
    Par défaut
    il se trouve ou , se forum spécialisé ?
    ici (C++ Builder)
    ton post y a été déplacé.


    Les imprimante n'ont pas toutes la même résolution (pixels/pouce)
    Il ne faut donc pas calculer en pixel.

    Cet article devrait t'aider :
    http://alphomega.developpez.com/imprimer/
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

Discussions similaires

  1. Comment surcharger (hook) n'importe quelle API windows ?
    Par RazielReaver dans le forum API, COM et SDKs
    Réponses: 12
    Dernier message: 05/07/2020, 18h41
  2. imprimer un Canvas ou un Frame Tk sous Win32
    Par gurun dans le forum Tkinter
    Réponses: 8
    Dernier message: 21/11/2008, 17h09
  3. Réponses: 13
    Dernier message: 12/06/2006, 15h31
  4. [Tkinter] recuperer le contenu d'un canvas sous format image
    Par xavier-Pierre dans le forum Tkinter
    Réponses: 2
    Dernier message: 03/04/2006, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo