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

 Delphi Discussion :

Faire un print d'un TMemo suivant critère


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 603
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 603
    Par défaut Faire un print d'un TMemo suivant critère
    Bonsoir à toutes et à tous,

    Avec cette procédure qui fonctionne, serait t'il possible de créer un critère sur le jour et la date et d'imprimer uniquement le texte en fonction de ce critère.

    Voici le code :

    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
     
    Procedure TFPrincipale.AddHistorique(Chaine : String);
    Const C10 : Char = #10;
          C13 : Char = #13;
    Var Fichier     : File Of Char;
        Ligne       : String;
        StrDateTime : String;
        Cpt         : Integer;
    Begin
         StrDateTime := ' Ce ' + Jour[DayOfWeek(Now)] + ',' + ' le ' + DateToStr(Now) + ' à ' + TimeToStr(Time);
     
         Ligne := StrDateTime + ' : ' + Chaine;
         MemoHistorique.Lines.Add(StrDateTime + ' : ' + Chaine);
     
         AssignFile(Fichier, chappli + 'Historique.txt');
         If FileExists(chappli + 'Historique.txt') Then Reset(Fichier)
                                         Else Rewrite(Fichier);
     
         Seek(Fichier, FileSize(Fichier));
         For Cpt := 1 To Length(Ligne) Do Write(Fichier, Ligne[Cpt]);
         Write(Fichier, C13, C10);
     
         CloseFile(Fichier);
    End;
    Et concernant le bouton "Print"

    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
     
     
    procedure TFPrincipale.FormShow(Sender: TObject);
    begin
    MemoHistorique.Lines.LoadFromFile(chappli + 'Historique.txt');
    end;
     
    procedure TFPrincipale.BprintjourClick(Sender: TObject);
    var
      pc,y,Lsize,nbl,nbl1,j,nc : integer;
      tab                      : array[0..6] of integer;
      marge                    : Word;
      Prtxt,TmpTxt             : String;
    begin
     
     if PrintDialog1.Execute then
     begin
      Marge:=500;                      // taille de la marge  (ici 500 pixels);
      Printer.Begindoc;
      with Printer.canvas do          //Avec Tprinter.Canvas
      begin
       font.name:='Arial';            // Defini la fonte a utiliser
       font.Size:=10;                  // Defini la taille de la fonte
       Refresh;                       // Mettre a jour le canvas
       lsize:=textheight('q/[]');     // lsize= Hauteur du texte
       pc:=TextWidth('W');            // Pc =Largeur Des Charactères
       nbl:=(printer.PageHeight div lsize)-2; // Nbl = Nombre de lignes par pages
       tab[0]:=pc*6;                  // Première tab=6 chars
       tab[1]:=pc*12;                 // 2eme tab=12 chars
       tab[2]:=Pc*18;                 // 3eme tab=18 chars
       nbl1:=0;
       for y:=0 to MemoHistorique.Lines.Count do //depuis le debut jusque la fin du mèmo
       begin
        prtxt:=MemoHistorique.Lines[y];          // Prendre la ligne ds le memo
        tmptxt:=prtxt;                  // la ligne temporaire est la ligne
        j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
                                        // demander a windows la taille de la ligne + les tabs
        While prtxt<>'' do              // tant que toute la ligne n'est pas imprimée
        begin
         nc:=0;                         // nombre de charactères dépassant la ligne
         while j > printer.PageWidth-(marge+marge) do 
         begin
          delete(prtxt,length(prtxt),1);              // enlever le dernier char
          j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
                                                      // remesurer la ligne
          inc(nc);                                    // incrémentè le nombre de charactères dépassant la ligne
         end;
         delete(Tmptxt,1,length(tmptxt)-nc);          // temptext devient le reste du texte
         tabbedtextout(handle,Marge,nbl1*lsize,
           pchar(Prtxt),length(Prtxt),
           2,tab,0);                      // écrire le texte sur le canvas de l'imprimante en respectant les tabs
         inc(nbl1);                       // + pour le nombre de lignes
         prtxt:=tmptxt;
         if (nbl1=nbl) then               // si le nombre de lignes = lignes dispo
         begin
          printer.newpage;                // créer une nouvelle page
          nbl1:=0;                        // commence a la ligne 0 de la page
         end;
        end;
       end;
       printer.enddoc;
      end;
     end;
     
    end;
    Cela fonctionne correctement, j'obtient naturellement tout le contenu du fichier "Historique.txt" mais si on pouvait imprimer que le texte dont la date correspond au critère ce serait un plus.

    Je ne sait pas si c'est faisable avec un Tmemo.

    En vous remerciant d'avance.

    @+,

    Cincap

  2. #2
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Bonjour,

    tu peux tester le contenu de MemoHistorique.Lines[y] dans ta boucle et ne faire le traitement que si tu as ce que tu veux dans la ligne. Regarde du côté des fonctions sur les chaines de caractères (copy, comparetext, ...)

    @++
    Dany

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 603
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 603
    Par défaut Ok merci pour la voie à suivre
    Bonjour à toutes et à tous,

    @ skywaukers, merci pour la voie à suivre concernant ce topic.

    @+,

    Cincap

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 603
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 603
    Par défaut Ok problème résolut
    Cordialement,

    @+,

    Cincap

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 603
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 603
    Par défaut Imprimer que le texte sélectionné !
    Bonjour à toutes et à tous,

    J'ai réouvert ce topic car il est concerné.

    Je pensais que pour imprimer le texte sélectionné en utilisant cette procédure :

    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
     
    procedure TFPrincipale.BprintjourClick(Sender: TObject);
    var
      pc,y,Lsize,nbl,nbl1,j,nc : integer;
      tab                      : array[0..6] of integer;
      marge                    : Word;
      Prtxt,TmpTxt             : String;
    begin
     
     if PrintDialog1.Execute then
     begin
      Marge:=500;                      // taille de la marge  (ici 500 pixels);
      Printer.Begindoc;
      with Printer.canvas do          //Avec Tprinter.Canvas
      begin
       font.name:='Arial';            // Defini la fonte a utiliser
       font.Size:=10;                  // Defini la taille de la fonte
       Refresh;                       // Mettre a jour le canvas
       lsize:=textheight('q/[]');     // lsize= Hauteur du texte
       pc:=TextWidth('W');            // Pc =Largeur Des Charactères
       nbl:=(printer.PageHeight div lsize)-2; // Nbl = Nombre de lignes par pages
       tab[0]:=pc*6;                  // Première tab=6 chars
       tab[1]:=pc*12;                 // 2eme tab=12 chars
       tab[2]:=Pc*18;                 // 3eme tab=18 chars
       nbl1:=0;
       for y:=0 to MemoHistorique.Lines.Count do //depuis le debut jusque la fin du mèmo
       begin
        prtxt:=MemoHistorique.Lines[y];          // Prendre la ligne ds le memo
        tmptxt:=prtxt;                  // la ligne temporaire est la ligne
        j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
                                        // demander a windows la taille de la ligne + les tabs
        While prtxt<>'' do              // tant que toute la ligne n'est pas imprimée
        begin
         nc:=0;                         // nombre de charactères dépassant la ligne
         while j > printer.PageWidth-(marge+marge) do 
         begin
          delete(prtxt,length(prtxt),1);              // enlever le dernier char
          j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
                                                      // remesurer la ligne
          inc(nc);                                    // incrémentè le nombre de charactères dépassant la ligne
         end;
         delete(Tmptxt,1,length(tmptxt)-nc);          // temptext devient le reste du texte
         tabbedtextout(handle,Marge,nbl1*lsize,
           pchar(Prtxt),length(Prtxt),
           2,tab,0);                      // écrire le texte sur le canvas de l'imprimante en respectant les tabs
         inc(nbl1);                       // + pour le nombre de lignes
         prtxt:=tmptxt;
         if (nbl1=nbl) then               // si le nombre de lignes = lignes dispo
         begin
          printer.newpage;                // créer une nouvelle page
          nbl1:=0;                        // commence a la ligne 0 de la page
         end;
        end;
       end;
       printer.enddoc;
      end;
     end;
     
    end;
    Il suffisait tout simplement mettre la propriété poselection à true de printdialog.

    Mais, tout le texte est imprimé même si je fait ceci :

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    procedure TFPrincipale.BprintjourClick(Sender: TObject);
    var
      I, Start, Stop: Integer;
      pc,y,Lsize,nbl,nbl1,j,nc : integer;
      tab                      : array[0..6] of integer;
      marge                    : Word;
      Prtxt,TmpTxt             : String;
    begin
    PrintDialog1.Options := [poPageNums, poSelection];
    PrintDialog1.FromPage := 1;
    PrintDialog1.MinPage := 1;
    PrintDialog1.ToPage := PageControl1.PageCount;
    PrintDialog1.MaxPage := PageControl1.PageCount;
     
    if PrintDialog1.Execute then
      begin
       { détermine l'ensemble que l'utilisateur souhaite imprimer }
        Marge:=500;
        Printer.Begindoc;
     
        with PrintDialog1 do
        begin
          if PrintRange = prAllPages then
     
            begin
            Start := MinPage - 1;
            Stop := MaxPage - 1;
          end
          else if PrintRange = prSelection then
          begin
            Start := PageControl1.ActivePage.PageIndex;
            Stop := Start;
            end
          else  { PrintRange = prPageNums }
          begin
            Start := FromPage - 1;
            Stop := ToPage - 1;
          end;
        end;
        { imprime les pages maintenant }
     
        with Printer.canvas do          //Avec Tprinter.Canvas
      begin
       font.name:='Arial';            // Defini la fonte a utiliser
       font.Size:=10;                  // Defini la taille de la fonte
       Refresh;                       // Mettrea a jour le canvas
       lsize:=textheight('q/[]');     // lsize= Hauteur du texte
       pc:=TextWidth('W');            // Pc =Largeur Des Charactères
       nbl:=(printer.PageHeight div lsize)-2; // Nbl = Nombre de lignes par pages
       tab[0]:=pc*6;                  // Première tab=6 chars
       tab[1]:=pc*12;                 // 2eme tab=12 chars
       tab[2]:=Pc*18;                 // 3eme tab=18 chars
       nbl1:=0;
       for y:=0 to memo1.Lines.Count do //depuis le debut jusque la fin du mèmo
       begin
        prtxt:=memo1.Lines[y];          // Prendre la ligne ds le memo
        tmptxt:=prtxt;                  // la ligne temporaire est la ligne
        j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
                                        // demander a windows la taille de la ligne + les tabs
        While prtxt<>'' do              // tant que toute la ligne n'est pas imprimèe
        begin
         nc:=0;                         // nombre de charactères dépassant la ligne
         while j > printer.PageWidth-(marge+marge) do // tant que la longeur du texte > la longeur de notre page
         begin
          delete(prtxt,length(prtxt),1);              // enlever le dernier char
          j:=GetTabbedTextExtent(handle,pchar(Prtxt),length(Prtxt),2,tab) and $ffff;
                                                      // remesurer la ligne
          inc(nc);                                    // incrémenter le nombre de charactères dépassant la ligne
         end;
         delete(Tmptxt,1,length(tmptxt)-nc);          // temptext devient le reste du texte
         tabbedtextout(handle,Marge,nbl1*lsize,
           pchar(Prtxt),length(Prtxt),
           2,tab,0);                      // ecrire le texte sur le canvas de l'imprimante en respectant les tabs
         inc(nbl1);                       // + pour le nombre de lignes
         prtxt:=tmptxt;
         if (nbl1=nbl) then               // si le nombre de lignes =lignes dispo
         begin
          printer.newpage;                // créer une nouvelle page
          nbl1:=0;                        // commence a la ligne 0 de la page
         end;
        end;
       end;
       printer.enddoc;
      end;
     end;
     
    end;
    Je dois me tromper quelque part dans ce code mais je ne vois pas ou.

    Si quelqu'un avait la gentillesse de m'aider.

    Merci d'avance,

    Cincap

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/01/2007, 09h17
  2. Bouton pour etat suivant critères
    Par lolo_bob2 dans le forum Access
    Réponses: 2
    Dernier message: 21/07/2006, 14h20
  3. Dessiner une ligne de DBGrid suivant critères
    Par nbutin dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/06/2006, 17h43
  4. [Etat] nombre de valeurs suivant critère
    Par bigounet dans le forum IHM
    Réponses: 4
    Dernier message: 01/03/2006, 11h47
  5. comment faire un "print ecran"
    Par sylvain_bos dans le forum DirectX
    Réponses: 7
    Dernier message: 26/05/2004, 09h30

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