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

Langage Delphi Discussion :

Problème d'impression de texte


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut Problème d'impression de texte
    Bonjour au Delphinautes,

    J'ai un Pb qui m'énerve beaucoup. En fait cela doit être simple mais comme vous le savez à force de s'entêter parfois on rame!!

    Lors de mon impression, si j'ai plus d'une page la deuxième s'imprime bien mais sans son contenu !!!

    Voici mon bout de Prog qui fait tout cela, si quelqu'un a une idée!

    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
    Procedure TForm5.Imprime(Sender: TObject;ligne_debut, ligne_fin, page, total_pages : integer); 
    var 
      r  : TRect; 
      i  : Integer; 
    begin 
    with Printer do 
        begin 
          r := Rect(0,0, Pagewidth, PageHeight); 
          BeginDoc; 
          Canvas.Brush.Style := bsClear; 
          Canvas.font.Size := 12; 
          Canvas.TextOut(1000,50 , 'LISTE des ARTICLES présents dans la base'); 
          if total_pages = 1 then 
          begin 
            Canvas.TextOut(50,100 , 'En date du'+ DateToStr(now)); 
            Canvas.TextOut(2550,100 , 'page 1/1'); 
            //ligne horizontale haut  n°2 
            Canvas.MoveTo(10,180); 
            Canvas.LineTo(3000,180); 
            Canvas.font.Size := 10; 
          for i := ligne_debut  to ligne_fin do 
            Canvas.TextOut(50,200 + (i *Canvas.TextHeight(RichEdit1.Lines.Strings[i])), 
                      RichEdit1.Lines.Strings[i]); 
          Canvas.Brush.Color := clBlack; 
          Canvas.FrameRect(r); 
          end 
          else 
            begin 
          Canvas.TextOut(50,100 , 'En date du :  '+ DateToStr(now)); 
          Canvas.TextOut(2550,100 ,' page '+ IntToStr(page) + '/' + IntToStr(total_pages)); 
          //ligne horizontale haut  n°2 
          Canvas.MoveTo(10,180); 
          Canvas.LineTo(3000,180); 
          Canvas.font.Size := 10; 
          for i := ligne_debut to ligne_fin do 
            Canvas.TextOut(50,200 + (i *Canvas.TextHeight(RichEdit1.Lines.Strings[i])), 
                      RichEdit1.Lines.Strings[i]); 
          Canvas.Brush.Color := clBlack; 
          Canvas.FrameRect(r); 
          end; 
          EndDoc; 
      end; 
    end; 
    {**********} 
    procedure TForm5.ImpListeClick(Sender: TObject); 
    var 
    nb_total_pages,page,first_line,last_line  : integer; 
    // impression de la liste des clients 
    begin 
    if  (PrintDialog1.Execute) and (RichEdit1.Lines.Count <> 0) then 
      begin 
          nb_total_pages := (RichEdit1.Lines.Count div 80) + 1; 
          page := 1; 
          first_line := 0; 
        while nb_total_pages > page do 
          begin 
          last_line := first_line + 80; 
          Imprime(Sender,first_line, last_line, page, nb_total_pages); 
          inc(page); 
          inc(first_line,80); 
          end; 
          last_line := RichEdit1.Lines.Count; // dernière page 
          Imprime(Sender,first_line, last_line, page, nb_total_pages); 
      end 
      else exit; 
    end; 
    {**********}

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104
    Par défaut
    Ton erreur est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas.TextOut(50,200 + (i *Canvas.TextHeight(RichEdit1.Lines.Strings[i])), RichEdit1.Lines.Strings[i]);
    Ce n'est pas i mais i-LigneDebut pour la position d'impression de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas.TextOut(50,200 + ((i-ligneDebut) *Canvas.TextHeight(RichEdit1.Lines.Strings[i])), RichEdit1.Lines.Strings[i]);
    Quelques remarques :
    - Tu vas avoir de gros soucis de portabilité d'une imprimante à l'autre car tu fixes toutes tes tailles en absolu.
    - Tu devrais regarder du coté de QuickReport pour faire des états sur imprimante plus facilement.

  3. #3
    Membre habitué
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Points : 171
    Points
    171
    Par défaut Pb impression
    Merci pour la solution, effectivement c'est maitenant évident.

    Pour tes conseils, je pense que tu as raison, mais je suis sous delphi2007 et j'ai a ma dispo uniquement Rave qui me pose quelques soucis d'utilisation pour l'impression en dehors des Bases de Données.

    J'ai regardé tous les forums, mais peu utilisent Rave.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    Salut,
    QuickReport est dispo pour delphi2007
    (en télechargement additionel sur le site de codegear)

    Sinon, je trouve que travailler directement sur un canvas pour imprimer procure plus de souplesse que QuickReport, qui pour moi n'a de véritable intérêt que pour générer des etats avec une base de données
    (comme rave apparement..)

    En raison de cela j'ai abandonné QuickReport et utilise maintenant essentiellement GMPrintsuite ( qui malheureusement n'est désormais plus maintenu par son auteur) car il permet d'utiliser les fonctions similaires à celles de Printer.Canvas mais en spéficiant des positions et des tailles en mm par exemple.

    Quelqu'un connait il un générateur d'état qui a un fonctionnement similaire à celui de GMPrintsuite ? (je ne connais que QuickReport et GMPrintsuite)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2007] Problème d'impression image+zone de texte
    Par Despey94 dans le forum Word
    Réponses: 3
    Dernier message: 17/04/2013, 13h04
  2. Problème d'impression: mon texte disparaît
    Par Olnejean dans le forum Word
    Réponses: 2
    Dernier message: 04/10/2011, 17h35
  3. Problème d'impression de texte verticalement
    Par m.nico dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/09/2007, 12h48
  4. Problème d'impression du texte
    Par tiyolx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/06/2007, 14h15
  5. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37

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