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

Composants VCL Delphi Discussion :

Impression TStringGrid en respectant les couleurs du TStringGrid ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Par défaut Impression TStringGrid en respectant les couleurs du TStringGrid ?
    Bonjour

    J'ai un soucis, peut-être pourriez-vous trouver une solution à mon problème...

    J'ai un TStringGrid avec comme attributs de caractère dans chaque colonne :
    - colonne 0 : caractère gras et noir
    - colonne 1 : caractère normal et bleu
    - colonne 2 : caractère normal et vert
    - colonne 3 : caractère normal et rouge

    A l'écran mon StringGrid fonctionne parfaitement.

    Je dois imprimer ce tableau en respectant les attributs de caractère dans les colonnes imprimer... mais je ne sais pas faire pour imprimer de cette façon


    Je sais imprimer mon StringGrid, mais pour l'instant il est en noir et blanc avec le code suivant :

    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
    // ============================================================================
    // Fonction échelle définissant les dimensions physiques du tableau imprimé
    // ============================================================================
    Function Echelle(R : integer; rapport : real) : integer;
    begin
       Echelle := round(R * rapport);
    end;
     
     
     
    // ============================================================================
    // Procédure d'impression du tableau
    // ============================================================================
    procedure PrintGrid(SGrid: TStringGrid ; RF,CF: integer);
    var
       Nucol        : Integer;
       TR           : TRect;
       LargeurCol   : array[0..25] of integer;
       PosCol       : array[0..25] of integer;
       Nbligne      : integer;
       Pscale       : integer;
       PosLigne     : Integer;
       HauteurLigne : nteger;
       PosDepart    : integer;
       rapport      : real;
       SautLigne    : Integer;
       margeGauche,
       I            : integer;
     
    begin
        margeGauche := 10;
        rapport := 4;     // définit le facteur d'échelle du tableau
     
        // Calculer position et taille colonne en fonction de la destination
        For Nucol := 0 to sGrid.Colcount - 1 do
            LargeurCol[Nucol] := sGrid.ColWidths[Nucol]; // taille colonne
     
        PosCol[0] := margeGauche;
        For Nucol := 1 to sGrid.Colcount - 1 do
            PosCol[Nucol] := PosCol[Nucol - 1] + sGrid.ColWidths[Nucol-1] - 1; // position des colonnes
     
        For Nucol := 0 to sGrid.Colcount - 1 do         // adapte le stringGrid à la destinatinon
           begin
                LargeurCol[Nucol] := Echelle(LargeurCol[Nucol], rapport);
                posCol[Nucol] := Echelle(posCol[Nucol], rapport);
           end;
     
        For I := 1 to sGrid.Rowcount - 1 do
            Sgrid.RowHeights[i] := Sgrid.RowHeights[i] + 2;
     
        // Impression
        printer.BeginDoc ;
        with printer.canvas do
        begin
           // Imprimer le titre, puis le tableau
     
           // D'abord le titre
           Pen.Color := clBlack;
           Font.Name := 'Arial';
           Brush.Color := clwhite;
           SautLigne := Sgrid.RowHeights[1];
           Font.Height := -(Echelle(Sgrid.RowHeights[1] div 2, rapport));
           PosDepart := SautLigne;
           Font.Style := [fsBold, fsUnderline];
           TextOut(Echelle(margeGauche * 2, rapport), Echelle(PosDepart, rapport), 'Titre');
     
           // Puis le tableau
           Font.Style := [];
           PosLigne := PosDepart + SautLigne;
           Pscale := PosLigne;
           HauteurLigne := Pscale + Sgrid.RowHeights[1] + 1;
     
           For Nbligne := 0 to  sGrid.RowCount - 1 do        // imprime le tableau ligne par ligne
           begin
                For Nucol := 0 to sGrid.ColCount - 1 do
                begin
                     TR := Rect(PosCol[Nucol], Echelle(PosLigne, rapport), PosCol[Nucol] + LargeurCol[Nucol], Echelle(HauteurLigne, rapport));
                     TextRect(TR,PosCol[Nucol] + Echelle(4, rapport), Echelle(PosLigne, rapport) + Echelle(2, rapport), sGrid.Cells[Nucol,NbLigne]);
                     FrameRect(TR);
                end;
                PosLigne := HauteurLigne - 1;
                HauteurLigne := PosLigne + Sgrid.RowHeights[Nbligne + 1];
           end;
        end;
        Printer.EndDoc ;
        For I:=0 to sGrid.Rowcount - 1 do
            Sgrid.RowHeights[i] := Sgrid.RowHeights[i] - 2;
    end;
    Auriez-vous une solution pour imprimer le StringGrid avec les bonnes couleurs ?
    Ou bien auriez-vous une procédure permettant d'imprimer un StringGrid de cette façon ?

    Je suis bien embêté à ce stade du développement de mon programme...

    Cordialement,
    Jean-Pierre

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 512
    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 512
    Par défaut
    Bonjour,

    il faut que tu modifies la couleur de la police dans ta boucle sur Nucol :


    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
                For Nucol := 0 to sGrid.ColCount - 1 do
                begin
                     Case Nucol of
                       0 : Begin
                              printer.canvas.Font.Color := clBlack ;
                              printer.canvas.Font.Style := [fsBold];
                           End ;
                       1 : Begin
                              printer.canvas.Font.Color := clBlue;
                              printer.canvas.Font.Style := [];
                           End ;
                       2 : Begin
                              printer.canvas.Font.Color := clGreen ;
                              printer.canvas.Font.Style := [];
                           End ;
                       3 : Begin
                              printer.canvas.Font.Color := clRed ;
                              printer.canvas.Font.Style := [];
                           End ;
                      End ;
                     TR := Rect(PosCol[Nucol], Echelle(PosLigne, rapport), PosCol[Nucol] + LargeurCol[Nucol], Echelle(HauteurLigne, rapport));
                     TextRect(TR,PosCol[Nucol] + Echelle(4, rapport), Echelle(PosLigne, rapport) + Echelle(2, rapport), sGrid.Cells[Nucol,NbLigne]);
                     FrameRect(TR);
                end;
    A+

    Charly

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Par défaut
    Merci Charly, cela fonctionne impeccable

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

Discussions similaires

  1. TStringGrid : récuperer entre les séparateurs
    Par dekalima dans le forum C++Builder
    Réponses: 17
    Dernier message: 19/01/2011, 16h09
  2. TStringGrid: Comment récuperer la couleur d'une cellule ?
    Par ddubois dans le forum Composants VCL
    Réponses: 1
    Dernier message: 12/05/2008, 18h07
  3. [TStringGrid] Comment enfoncer les entêtes ?
    Par secretman dans le forum Composants VCL
    Réponses: 3
    Dernier message: 30/04/2008, 19h06
  4. Pour les spécialistes de TStringGrid
    Par Freud44 dans le forum C++Builder
    Réponses: 7
    Dernier message: 12/12/2007, 12h27
  5. TStringGrid: comment sélectionner les cellules à dessiner?
    Par OutOfRange dans le forum Composants VCL
    Réponses: 9
    Dernier message: 25/09/2005, 15h17

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