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 :

Imprimer le texte sélectionné d'un TMemo


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut Imprimer le texte sélectionné d'un TMemo
    Bonjour à toutes et à tous,

    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
    60
     
     
    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
    89
     
     
    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

  2. #2
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    je ne vois pas dans ton code ou tu détermine le texte sélectionné
    je vais te proposer une solution bidouille mais qui fonction,
    Tu place un TRichEdit invisible dans ton projet et le code suivant fera le reste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     RichEdit1.Text := Memo1.SelText;
     RichEdit1.Print('MonDoc');
    end;
    pour le format d'impression (police, tailles.... )tu formate ton RichEdit

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut Merci l'ami, je vais essayer cette solution
    Bonsoir à toutes et à tous,

    @ aityahia, je vais essayer ta solution qui me parait plus logique compte tenu que je n'indiquai pas dans le code le texte sélectionné.

    Bonne programmation.

    @+,

    Cincap

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut Ok cela fonctionne
    Bonsoir à toutes et à tous,

    @ aityahia, j'ai essayé ta solution qui me parait plus logique compte tenu que je n'indiquai pas dans le code le texte sélectionné.

    Bonne programmation.

    @+,

    Cincap

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

Discussions similaires

  1. [WD-2010] Imprimer le texte sélectionné et les lignes d'entête d'un tableau
    Par modus57 dans le forum VBA Word
    Réponses: 6
    Dernier message: 09/08/2012, 15h22
  2. [ComboBox] retourner le texte sélectionné
    Par Husqvarna dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/11/2004, 17h09
  3. VB6] imprimer le texte afficher dans une picturebox
    Par Persons dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/08/2004, 11h15
  4. Imprimer fichier texte
    Par Freeze dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/11/2003, 11h37
  5. Recuperation du texte sélectionné
    Par jm barbou dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/11/2002, 08h13

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