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 :

Problème d'impression d'une Tform


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Points : 61
    Points
    61
    Par défaut Problème d'impression d'une Tform
    Bonjour,

    Je fais, dans mon application, l'impression d'un Tform par appui sur un bouton "Imprimer".

    J'ai sur cette Form des combobox. Lorsque je lance l'impression (ni plus ni moins qu'une capture d'écran), le texte de mes combobox ne s'imprime pas (combobox blanches).

    Quelqu'un peut il me dire d'où cela vient?

    Merci beaucoup.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Qu'utilise tu comme fonction d'impression ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form.PaintTo(Printers.Printer.Canvas, 0, 0);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Points : 61
    Points
    61
    Par défaut
    En fait je passe par un formimage :

    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
     
    procedure TForm1.Button13Click(Sender: TObject);
    var
      FormImage: TBitmap;
      AspectRatio: Single;
      OutputWidth, OutputHeight: Single;
    begin
      // Capture de l'image de la form
      FormImage := GetFormImage;
     
      // On définit l'orientation la mieux adaptée. Si c'est un carré, on choisit poLandscape
      Printer.Orientation := poLandscape;
      If FormImage.Height > FormImage.Width then Printer.Orientation := poPortrait;
     
      // Titre vu dans le gestionnaire d'impression
      Printer.Title := 'Impression de l''image de la form';
      // On veut qu'une feuille s'imprime
      Printer.Copies := 1;
     
      // Début du document
      Printer.BeginDoc;

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Points : 61
    Points
    61
    Par défaut
    Puis par un printer.canevas.strechdraw :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     // On dessine l'image de la form sur le canvas de l'imprimante
        Printer.Canvas.StretchDraw(Rect(0,0,Trunc(OutputWidth),Trunc(OutputHeight)),FormImage);
      finally
        // On démarre l'impression
        Printer.EndDoc;
        // On libère FormImage
        FormImage.Free;
      end;

  5. #5
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Est-ce qu'un TForm.Print ne suffit pas dans ton cas ?
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    GetFormImage appele PaintTo ... si non tes ComboBox c'est des composants standard ou des composants personnalisés ?

    Sinon nono a raison, Print qui utilise GetFormImage devrait simplifier !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    J'ai un peu le même souci.

    j'utilise Delphi7 sur XP.

    J'ai un RichEdit (écriture de différentes tailles et différentes couleurs sur fond noir), un label (où s'inscrit l'heure) et des panels de couleur sur un Form.
    Lorsque je fais un Form.GetFormImage, tout s'affiche sur mon image sauf le Texte contenu dans le RichEdit.
    Si je remplace le RichEdit par un memo classique, pas de souci pour le texte mais je n'ai pas la possibilité de "jouer" sur la police comme avec le RichEdit .

    Quelqu'un a t il une solution? Résoudre ce problème d'affichage ou utiliser un autre composant avec les mêmes fonctions que le RichEdit?

    Merci de vos réponses

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Le RichEdit est un composant bien spécial ... est-ce que le PaintTo du RichEdit fonctionne correctement pour commencer ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Non, même résultat avec le PainTo.

    je viens de trouver ce code
    http://www.developpez.net/forums/d73...ichedit-image/

    ça me remplit bien mon image avec le contenu du RichEdit (taille et couleur de la police) par contre, je perd le fond noir. Je vais essayer de creuser dans ce sens. Je suis preneur si vous avez d'autres solutions.

    Merci

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 427
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Breizh44, petit rappel à l'ordre, certains de tes posts sont sollutionnés et pourtant ne sont pas marqués comme résolut.

    @+,

    Cincap

  11. #11
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    tu utilise quoi pour faire Ton GetFormImage

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    procedure 
    ScreenShot(activeWindow: bool; destBitmap: TBitmap);
    var
      w, h: integer;
      DC: HDC;
      hWin: Cardinal;
      r: TRect;
    begin
      if activeWindow then
      begin
        hWin := GetForegroundWindow;
        dc := GetWindowDC(hWin);
        GetWindowRect(hWin, r);
        w := r.Right - r.Left;
        h := r.Bottom - r.Top;
      end
      else
      begin
        hWin := GetDesktopWindow;
        dc := GetDC(hWin);
        w := GetDeviceCaps(DC, HORZRES);
        h := GetDeviceCaps(DC, VERTRES);
      end;
     
      try
        destBitmap.Width := w;
        destBitmap.Height := h;
        BitBlt(destBitmap.Canvas.Handle,
          0,
          0,
          destBitmap.Width,
          destBitmap.Height,
          DC,
          0,
          0,
          SRCCOPY);
      finally
        ReleaseDC(hWin, DC);
      end;
    end;
    {------------------------------------------------------------------------------}
    procedure Tform.ImpressionEcran;
    var
      DesktopBitmap : TBitmap;
      Info: PBitmapInfo;
      InfoSize: DWord;
      Image: Pointer;
      ImageSize: DWORD;
      Bits: HBITMAP;
      DIBWidth, DIBHeight: Longint;
      PrintWidth, PrintHeight: Longint;
      LargPrn: longint;
      HautPrn: longint;
      Torientation : TPrinterOrientation;
     
    begin
      PrintScale := poPrintToFit;
      Torientation := Printer.Orientation ;
      Printer.Orientation := poLandscape;
      Printer.BeginDoc;
      DesktopBitmap := TBitmap.Create;
     
      try
        ScreenShot(true,DesktopBitmap);
        DesktopBitmap.Canvas.TextOut(5,10,'fait le : '+formatdatetime('yyyy/mm/dd',now));
        Canvas.Lock;
        try
          with Printer, Canvas do
          begin
            Bits := DesktopBitmap.Handle;
            GetDIBSizes(Bits, InfoSize, ImageSize);
            Info := AllocMem(InfoSize);
            try
              Image := AllocMem(ImageSize);
              try
                GetDIB(Bits, 0, Info^, Image^);
                with Info^.bmiHeader do
                begin
                  DIBWidth := biWidth;
                  DIBHeight := biHeight;
                end;
                case PrintScale of
                  poProportional:
                    begin
                      LargPrn := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
                      LargPrn := (LargPrn * 90) div 100;
                      PrintWidth := MulDiv(DIBWidth, LargPrn, PixelsPerInch);
                      hautPrn := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
                      hautPrn := (hautPrn * 90) div 100;
                      PrintHeight := MulDiv(DIBHeight, HautPrn, PixelsPerInch);
                    end;
                  poPrintToFit:
                    begin
                      PrintWidth := MulDiv(DIBWidth, PageHeight, DIBHeight);
                      if PrintWidth < PageWidth then
                        PrintHeight := PageHeight
                      else
                      begin
                        PrintWidth := PageWidth;
                        PrintHeight := MulDiv(DIBHeight, PageWidth, DIBWidth);
                      end;
                    end;
                else
                  PrintWidth := DIBWidth;
                  PrintHeight := DIBHeight;
                end;
                StretchDIBits(Canvas.Handle, 0, 0, PrintWidth, PrintHeight, 0, 0,
                  DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
              finally
                FreeMem(Image, ImageSize);
              end;
            finally
              FreeMem(Info, InfoSize);
            end;
          end;
        finally
          Canvas.Unlock;
          DesktopBitmap.Free;
        end;
      finally
        Printer.EndDoc;
        Printer.Orientation := Torientation;
      end;
    end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. Problème d'impression d'une feuille excel sous une condition
    Par rihab92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/04/2015, 13h03
  2. problème d'impression d'une page web et css
    Par sam01 dans le forum Webdesign & Ergonomie
    Réponses: 4
    Dernier message: 25/08/2006, 23h06
  3. Problème d'impression d'un pdf sous format d'une etiquette
    Par **jouly** dans le forum Périphériques
    Réponses: 2
    Dernier message: 04/04/2006, 13h18
  4. [QuickReport] Problème d'impression d'une Preview
    Par sillycoder dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/10/2005, 17h47
  5. Problèmes avec une TForm créée dynamiquement
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/03/2005, 11h55

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