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

Lazarus Pascal Discussion :

Imprimer le contenu d'une Form : ça imprime sous Windows, mais pas sous Linux [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Imprimer le contenu d'une Form : ça imprime sous Windows, mais pas sous Linux
    Bonjour à toutes et à tous,

    Voici un petit programme dont le but est d'imprimer le contenu d'un TForm.

    • Vous placez un composant PrinterSetupDialog sur le Form (pour avoir une imprimante réelle)
    • Vous placez un bouton sur la Form,
    • Dans son événement Click, vous placez le code ci-dessous :

    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
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs,
      StdCtrls, Printers;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Imprimer: TButton;
        PrinterSetupDialog1: TPrinterSetupDialog;
        procedure ImprimerClick(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.ImprimerClick(Sender: TObject);
    begin
      Printer.BeginDoc;
      with Printer.Canvas do
      begin
        CopyMode:= cmSrcCopy;
        CopyRect(Rect(30, 30, 600, 600), GetFormImage.Canvas, Rect(0, 0, Width, Height));
        Brush.Style:= bsClear;
        Pen.Width:= 3;
        Rectangle(0, 0, 200, 50);    {Tracé d'un rectangle}
      end;
      printer.EndDoc;
    end;
     
    end.
    • Sous Windows, le contenu de la form est imprimé ainsi que le rectangle(0, 0, 200, 50) qui lui, est tracé directement sur le canvas du Printer.
    • Sous Linux, seul le rectangle est imprimé.

    Comment faites-vous pour imprimer le contenu d'une Form sous Linux ?

    Merci de votre aide.

    Pierre

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Yop !
    Citation Envoyé par ChPr Voir le message
    Comment faites-vous pour imprimer le contenu d'une Form sous Linux ?
    En lisant cette discussion, peut-être ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... En lisant cette discussion, peut-être ?
    Je me suis basé sur cette discussion pour arriver à imprimer sous Windows, mais cette solution ne fonctionne malheureusement pas sous Lazarus.

    Je me demande bien ce qu'il faut faire. J'ai l'impression que c'est l'instruction Printer.Canvas.CopyRect(...) qui ne fonctionne pas.

    A ceux qui ont réussi ...

    Cordialement.

    Pierre

  4. #4
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par ChPr Voir le message
    ... Je me demande bien ce qu'il faut faire. J'ai l'impression que c'est l'instruction Printer.Canvas.CopyRect(...) qui ne fonctionne pas. ...
    Bon, ben ,je crois que cette dernière intuition était la bonne. J'ai simplement remplacé dans le code l'instruction CopyRect par StretchDraw et ... ça marche sans problème sous Linux et sous Windows.

    Dans le code que je donnais au début de cette discussion et en donnant des bonnes valeurs de dimensions, avec "k" le rapport de nombre de pixels par inch de l'écran et de l'imprimante, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        StretchDraw(Rect(0, 0, k*GetFormImage.Width, k*GetFormImage.Height), GetFormImage);
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        CopyRect(Rect(0, 0, k*GetFormImage.Width, k*GetFormImage.Height), GetFormImage), GetFormImage.Canvas, Rect(0, 0, GetFormImage.Width, GetFormImage.Height), GetFormImage));
    Cordialement.

    Pierre

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

Discussions similaires

  1. [LibreOffice][Tableur] Une macro qui fonctionne sous Linux mais pas sous windows
    Par ludox62 dans le forum OpenOffice & LibreOffice
    Réponses: 3
    Dernier message: 07/01/2014, 21h26
  2. Imprimer le contenu d'une form
    Par olibara dans le forum C#
    Réponses: 7
    Dernier message: 18/05/2008, 21h04
  3. Réponses: 1
    Dernier message: 24/01/2008, 12h11
  4. FORM fonctionne sous IE mais pas sous Firefox
    Par baudogu dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/09/2007, 16h50
  5. Réponses: 1
    Dernier message: 13/04/2006, 12h21

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