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 :

Dessin envoyé vers une imprimante


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut Dessin envoyé vers une imprimante
    Bonjour,

    avec la fonction Polygon, je dessine un polygone rempli d'un motif à l'écran chargé depuis un bmp - tout se passe bien - le dessin est correct

    je fais la même chose vers une imprimante PDF, mais la dans le fichier PDF le fond du polygone reste blanc

    j'ai essayé plein de choses sans succès (propriété du bmp transparent, changement de brosse, ...)

    Pourtant, avec la fonction Draw mon Bmp s'affiche bien dans les deux cas.

    Voici mon code :

    dessin du polygone :

    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
    { =============================================================== }
    procedure TF_Princ.Dessine(Canvas1 : TCanvas ; LDess , HDess : Integer);
    { Affiche le dessin sur un canvas }
    Var
       bmp       : tBitMap;
    begin
       Canvas1.Pen.Color   := clBlack ;
       Canvas1.brush.Color := clWhite ;
       Canvas1.brush.Style := bsSolid ;
    //    Affichage du fond blanc pour effacer un dessin précédent
       Canvas1.Rectangle( 0,0, LDess, HDess) ;
     
    //   recupération d'un motif depuis un fichier Bmp
       bmp := tBitMap.create;
       bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'motif1.bmp');
     
    //   Dessin du Bmp par Draw : fonctionne à l'écran et aussi sur imprimante PDF
       Canvas1.Draw(200,200,bmp);
     
    //   Remplissage d'un polygone par le motif du Bmp
    //   Fonctionne à l'écran mais pas sur imprimante PDF
    //      (le fond du polygone est blanc)
     
       Canvas1.brush.Bitmap :=bmp;
       Canvas1.Polygon([Point(10, 10), Point(60, 280), Point(230, 30), Point(540, 720)]);
     
    // Libération des objets
       Canvas1.brush.Bitmap := Nil ;
       bmp.free;
    end;
    { =============================================================== }
    affichage à l'écran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    { =============================================================== }
    procedure TF_Princ.Btn_DessinClick(Sender: TObject);
    { Dessine à l'écran }
    Var
       LDess, HDess : Integer ;
    begin
       Panel_Dessin.Update ;
       Plan.Update ;
       LDess := Plan.Width ;
       HDess := Plan.Height;
       Dessine(Plan.Canvas , LDess, Hdess) ;
    end;
    { =============================================================== }
    envoi vers l'imprimante :

    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
    { =============================================================== }
    procedure TF_Princ.Btn_ImprimerClick(Sender: TObject);
    {  Impression du dessin }
    var
       HDess, LDess   : Integer ;
    begin
       Printer.Orientation := poLandscape;
       if PrintDialog1.Execute then
         begin
           with Printer do
              begin
                BeginDoc;
                LDess := Printer.PageHeight ;
                HDess := Printer.PageWidth  ;
                Dessine(Printer.Canvas, HDess, LDess) ;
                EndDoc;
              end;
         end;
    end;
    { =============================================================== }
    Savez vous pourquoi cela ne fonctionne pas dans le PDF ?

    Merci par avance

    Charly

  2. #2
    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
    En fait si, je pense que ça a du fonctionner dans ton pdf, mais...

    Mais le dessin se retrouve tellement petit (minuscule, tout rikiki) dans ton pdf, qu'il est impossible de le voir.

    Pourquoi ? parce que la résolution de ton PDF doit être démesurément gigantesque (c'est une histoire de dpi de l'imprimante) par rapport à la taille de ton dessin.


    Donc au lieu d'un simple
    Canvas1.Draw(200,200,bmp);

    Il va falloir que tu utilise la fonction Stretchdraw à la place.
    Profites en aussi pour vérifier les valeurs que tu récupères dans HDess et LDess, ça te donnera très surement l'explication et tu t'apercevras que la taille de l'affichage sur l'imprimante est surement beaucoup plus grande que la résolution de ton écran.

    Je suis carréent sure que c'est ça, parce que c'est un piège très classique dans lequel tout le monde tombe un jour.
    Bidouilleuse Delphi

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Oui, merci

    j'y avais un peu pensé et je zoomais dans le PDF qui reste à fonc blanc


    mais je vais essayer de faire un StrechDraw pour voir

    par contre, quand j'imprime directement à l'imprimante à jet d'encre cela fonctionne (mais la résolution est surement plus faible que dans le PDF)

    je teste cela ce soir

    Cordialement

    Charly

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    @ LadyWasky

    J'ai essayé de faire un StrechDraw, mais je patauge ...

    Mon code me renvoie une grosse erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       ARect := Rect(0,0, HDess,LDess) ;
       Canvas1.StretchDraw(Arect,Canvas1.Polygon([Point(10, 10), Point(60, 280), Point(230, 30), Point(540, 720)]); );
    Peux tu m'aider à faire mon StrechDraw ?

    merci

    Charly

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Canvas.Polygon est une méthode et non une fonction qui pourrait alimenter le 2° paramètre de Canvas.StrechDraw.

    Utilise un Bitmap temporaire, nécessaire pour StretchDraw qui attend un TGraphic.

    @+ Claudius

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Merci Claudius

    j'ai essayé, mais rien ne s'affiche (ni à l'écran ni dans le PDF) sauf le résultat de Canvas1.Draw(200,200,bmp) qui affiche bien motif1.bmp en fond du carré 200 x 200

    Voici mon 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    { =============================================================== }
    procedure TF_Princ.Dessine(Canvas1 : TCanvas ; LDess , HDess : Integer);
     
    { Affiche le dessin sur un canvas }
    Var
       bmp       : tBitMap;
       ARect     : TRect ;
       bmp2      : TBitmap ;
    begin
       Canvas1.Pen.Color   := clBlack ;
       Canvas1.brush.Color := clWhite ;
       Canvas1.brush.Style := bsSolid ;
    //    Affichage du fond blanc pour effacer un dessin précédent
       Canvas1.Rectangle( 0,0, LDess, HDess) ;
     
    //   recupération d'un motif depuis un fichier Bmp
       bmp := tBitMap.create;
       bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'motif1.bmp');
     
    //   Dessin du Bmp par Draw : fonctionne à l'écran et aussi sur imprimante PDF
       Canvas1.Draw(200,200,bmp);
     
    //   Remplissage d'un polygone par le motif du Bmp
    //   Fonctionne à l'écran mais pas sur imprimante PDF
    //      (le fond du polygone est blanc)
       Canvas1.brush.Bitmap :=bmp;
    //   BitMap provisoire pour StrechDraw
       bmp2 := TBitmap.create ;
       bmp2.Canvas.brush.Color := ClWhite ;
       bmp2.Canvas.pen.Color := ClBlack ;
       bmp2.Canvas.brush.Bitmap :=bmp ;
       bmp2.Canvas.Polygon([Point(10, 10), Point(60, 280), Point(230, 30), Point(540, 720)]) ;
       ARect := Rect(0,0, HDess,LDess) ;
       Canvas1.StretchDraw(Arect,bmp2 );
    // Libération des objets
       Canvas1.brush.Bitmap := Nil ;
       bmp2.free;
       bmp.free;
     
    end;
    { =============================================================== }
    J'ai du oublier quelque chose ?

    Charly

Discussions similaires

  1. Envoyer une impression vers une imprimante réseau sous DOS
    Par atasekpo dans le forum Administration
    Réponses: 3
    Dernier message: 28/06/2010, 15h58
  2. Envoyer vers une ancre de la page suite à un post
    Par dacid dans le forum ASP.NET
    Réponses: 12
    Dernier message: 13/11/2009, 16h42
  3. copier une font truetype vers une imprimante
    Par walid_kerkoub dans le forum Périphériques
    Réponses: 3
    Dernier message: 02/01/2009, 23h38
  4. imprimer direct vers une imprimante
    Par tomguiss dans le forum C++Builder
    Réponses: 0
    Dernier message: 27/11/2007, 17h09
  5. [BO XI] -Envoyer vers une messagerie electronique
    Par li974 dans le forum Administration-Migration
    Réponses: 7
    Dernier message: 29/08/2007, 17h31

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