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 :

[Impression] d'une ligne.


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut [Impression] d'une ligne.
    j'ai cru déja avoir poster un message dans ce genre , mais je suis incapable de le retrouver : .

    Je cherche a imprimer "au fil de l'eau" un fichier text .

    Donc imprimer un resultat , et attendre le resultat suivant pour l'imprimer .. , sans que la page ne sorte de l'imprimante , et cela jusqu'a ce que determine qu'elle soit "pleine" .
    Quand j'utilise un BeginDoc et EndDoc , la page sort de l'imprimante !

    si quelqu'un a une solution , ou un endroit ou je pourrai trouver des info ..
    merci !
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    C'est quand tu as "rempli" ta page qu'il faut faire le EndDoc.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Mais c'est pas le but ! le but etant d'imprimer ' au fil de l'eau ' les resultats .
    Ils peuvent arriver toutes les 15 mn et et etre imprimé a ce moment là ! , et je ne veux pas sortir une page a chaques ligne envoyé a l'imprimante .

    bye
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut
    Si tu trouves quelque chose, n'oublie pas de le poster.
    Ca m'intéresse aussi ...

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  5. #5
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Pour ton message, merci le cache de Google.

    http://66.102.9.104/search?q=cache:Z...27eau%22&hl=fr

    J'avais mal compris le au fil de l'eau.

    Pour imprimer au fil de l'eau, je ne pesne pas qu'il y ait de solutions avec une imprimante "classique".
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Imprimer au fil de l'eau, c'est possible....
    Mais uniquement avec une imprimante matricielle ! Le code que j'ai trouvé sur UDDF (http://www.manualy.sk/uddf/pages/printer.htm#printer6), le fait très bien. Je met le code un peut plus loin...

    Sinon, le mieux, c'est de lancer une impression toutes les 50 lignes(par exemple). A chaque fois tu remplis dans un TStringList les lignes de la n° ((n-1)*50) à (n*50) que tu imprimes, n étant égal n=NTotal mod 50, NTotal étant le nombre total de lignes que tu as reçu. Le déclanchement de l'impression s'effectuant donc a chaque fois que n change.
    Voici l'algorithme :
    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
     
    Const NbreLignesParPage:=50;
    var Entree,Sortie:TstringList;
         N:integer;
         Ntotal:integer;
    begin
      Entree:=TStringList.create;
      Sortie:=TStringList.create;
      N:=0;
      While not Fin do recevoir(ligne:string);
      Entree.free;
      Sortie.free;
    end;
    ....
    procedure recevoir(ligne:string);
    var VieuxN,i:integer;
    begin
      VieuxN:=N;
      Entree.add(ligne);
      NTotal:=Entree.count+1;
      N:=NTotal mod NbreLignesParPage;
      if N<>VieuxN then
      begin
        //Remplir Sortie
        Sortie.clear;
        for i:=(VieuxN*NbreLignesParPage) to (N*NbreLignesParPage) do
           Sortie.add(Entree.Strings[i]);
        //Imprimer Sortie
        Imprime(Sortie);
      end;
    end;
    sinon voici le code que j'ai trouvé pour une imprimante matricielle :
    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
    var Myprinter : TRawPrinter;
        oldprinter : TPrinter;
    begin
     MyPrinter:=TRawPrinter.Create;
     oldprinter:=setprinter(MyPrinter);
     try
      if Printdialog1.execute then
      begin
        myprinter.startraw;
        myprinter.write('khsdhskhkshdksd');
        myprinter.writeln;
        myprinter.endraw;
      end
     finally
      setprinter(oldprinyter);
      myprinter.free;
     end
    end;
    et l'unité "qui fait tout" :
    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
    90
    91
    92
    93
    94
    95
    unit Rawprinter;
     
    interface
    uses printers,windows;
     
    type TRawprinter =class(TPrinter)
                      public
                        dc2 : HDC;
                        procedure startraw;
                        procedure endraw;
                        procedure write(const s : string);
                        procedure writeln;
                      end;
     
    implementation
    uses sysutils,forms;
     
    function AbortProc(Prn: HDC; Error: Integer): Bool; stdcall;
    begin
      Application.ProcessMessages;
      Result := not Printer.Aborted;
    end;
     
    type
      TPrinterDevice = class
        Driver, Device, Port: String;
        constructor Create(ADriver, ADevice, APort: PChar);
        function IsEqual(ADriver, ADevice, APort: PChar): Boolean;
      end;
     
    constructor TPrinterDevice.Create(ADriver, ADevice, APort: PChar);
    begin
      inherited Create;
      Driver := ADriver;
      Device := ADevice;
      Port := APort;
    end;
     
    function TPrinterDevice.IsEqual(ADriver, ADevice, APort: PChar): Boolean;
    begin
      Result := (Device = ADevice) and (Port = APort);
    end;
     
     
    procedure TRawprinter.startraw;
    var
      CTitle: array[0..31] of Char;
      CMode : Array[0..4] of char;
      DocInfo: TDocInfo;
      r : integer;
    begin
      StrPLCopy(CTitle, Title, SizeOf(CTitle) - 1);
      StrPCopy(CMode, 'RAW');
      FillChar(DocInfo, SizeOf(DocInfo), 0);
      with DocInfo do
      begin
        cbSize := SizeOf(DocInfo);
        lpszDocName := CTitle;
        lpszOutput := nil;
        lpszDatatype :=CMode;
      end;
      with TPrinterDevice(Printers.Objects[PrinterIndex]) do
      begin
        DC2 := CreateDC(PChar(Driver), PChar(Device), PChar(Port), nil);
      end;
      SetAbortProc(dc2, AbortProc);
      r:=StartDoc(dc2, DocInfo);
    end;
     
    procedure TRawprinter.endraw;
    var r : integer;
    begin
      r:=windows.enddoc(dc2);
    end;
     
    type passrec = packed record
                     l : word;
                     s : Array[0..255] of char;
                   end;
    var pass : Passrec;
    procedure TRawprinter.write(const s : string);
    begin
      pass.l:=length(s);
      strpcopy(pass.s,s);
      escape(dc2,PASSTHROUGH,0,@pass,nil);
    end;
     
    procedure TRawprinter.writeln;
    begin
      pass.l:=2;
      strpcopy(pass.s,#13#10);
      escape(dc2,PASSTHROUGH,0,@pass,nil);
    end;
     
    end.
    Bon courage !!!
    Bidouilleuse Delphi

  7. #7
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    Merci Waskol , c'etait le code que j'avais deja vu quelque part ici même , mais que je n'arrivais plus a retrouver.

    Par contre tu dit que çà ne marche que sur les matricielles ! là c'est un soucis pour moi !
    Ensuite j'imprime via un port USB , donc les matricielles de "matusalem".. sur Usb va falloir les inventer !

    merci quand meme je vais voir ce que je peux faire quand meme çà !

    bye !
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

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

Discussions similaires

  1. [WD16] Empécher impression d'une ligne du corps
    Par J0r_x dans le forum WinDev
    Réponses: 8
    Dernier message: 03/05/2011, 08h51
  2. possible de donner une ligne initiale d'impression
    Par guismoman33 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/02/2008, 16h10
  3. macro pour impression d'une ligne excel sous word
    Par schwoby dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2007, 12h02
  4. Réponses: 5
    Dernier message: 27/04/2006, 13h51

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