Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Débutant
Débutant Pour bien débuter avec Delphi
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/12/2012, 13h26   #1
Charly910
Membre chevronné
 
Avatar de Charly910
 
Homme Charly
Ingénieur TP
Inscription : décembre 2006
Messages : 582
Détails du profil
Informations personnelles :
Nom : Homme Charly
Localisation : France

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

Informations forums :
Inscription : décembre 2006
Messages : 582
Points : 664
Points : 664
Par défaut [XE2] Police en gras dans un StringGrid

Bonjour,

pour mettre en forme et en couleur les cellules de mon StringGrig, j'utilise la méthode DrawCell :

Code :
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
{ =============================================================== }
procedure TF_Princ.TNDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
{     Cadrage à gauche avec une marge }
Var
  ColorBar  : TColor ;
  SelTab    : TColor ;
  FondTab   : TColor ;
  EcrTab    : TColor ;
  EcrSelTab : TColor ;
  DecalTab  : Integer ;   { Nb de pixels de décalage à gauche du fond des cellules des String Grid }
 
begin
   ColorBar  := RGB(253, 224, 107) ;
   FondTab   := RGB(240, 251, 255) ;
   SelTab    := clSkyBlue ;
   EcrTab    := clBlack ;
   EcrSelTab := clWhite ;  
   DecalTab := 4 ;
 
     With Sender As TStringGrid Do With Canvas Do
  Begin
    { Sélection de la couleur de fond }
    If gdFixed in State
      Then Brush.Color := ColorBar
      Else If gdSelected In State
        Then Brush.Color := SelTab
        Else Brush.Color := FondTab ;
 
    { Dessin du fond }
    Rect.Left := Rect.Left - DecalTab ;
    FillRect(Rect);
 
    { Sélection de la couleur de texte }
    If gdSelected In State Then
      SetTextColor(Canvas.Handle, EcrSelTab )
    Else SetTextColor(Canvas.Handle, EcrTab );
 
    { Dessin du texte en utilisant la fonction API }
    DrawText(Canvas.Handle, PChar('  '+Cells[ACol,ARow]), -1, Rect ,
              DT_RIGHT or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE  );
  End;
 
end;
{ =============================================================== }
j'aimerais mettre le texte de la première ligne en gras. J'ai essayé de mettre avant le DrawText :

Code :
1
2
3
4
    If ARow = 0  Then
       Font.Style := [fsBold]
    Else
       Font.Style := [];
Mais cela ne fonctionne pas ? Sinon, j'ai regardé les API Windows, mais cela n'a pas l'air évident.

Quelqu'un sait il comment faire ?

Merci

A+

Charly
Charly910 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 13h51   #2
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 970
Points : 9 970
Salut
Code :
     With Sender As TStringGrid Do With Canvas Do
Serait-ce ces With qui causent problèmes d'interprétation ?

Personnellement j'évite les with multiples (et même parfois les with tout court) source d'erreur.

Et comme ça ?
Code :
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
procedure TF_Princ.TNDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
{     Cadrage à gauche avec une marge }
Var
  ColorBar  : TColor ;
  SelTab    : TColor ;
  FondTab   : TColor ;
  EcrTab    : TColor ;
  EcrSelTab : TColor ;
  DecalTab  : Integer ;   { Nb de pixels de décalage à gauche du fond des cellules des String Grid }
 
begin
  ColorBar  := RGB(253, 224, 107) ;
  FondTab   := RGB(240, 251, 255) ;
  SelTab    := clSkyBlue ;
  EcrTab    := clBlack ;
  EcrSelTab := clWhite ;
  DecalTab := 4 ;
 
  With Sender As TStringGrid Do
  Begin
  { Sélection de la couleur de fond }
    If gdFixed in State Then
      Canvas.Brush.Color := ColorBar
    Else If gdSelected In State Then
      Canvas.Brush.Color := SelTab
    Else
      Canvas.Brush.Color := FondTab ;
 
    { Dessin du fond }
    Rect.Left := Rect.Left - DecalTab ;
    Canvas.FillRect(Rect);
 
    { Sélection de la couleur de texte }
    If gdSelected In State Then
      Canvas.Font.Color := EcrSelTab
    Else
      Canvas.Font.Color := EcrTab;
 
    if ARow = 0 then
      Canvas.Font.Style := [fsBold]
    else
      Canvas.Font.Style := [];
 
    { Dessin du texte en utilisant la fonction API }
    DrawText(Canvas.Handle, PChar('  ' + Cells[ACol, ARow]), -1, Rect ,
        DT_RIGHT or DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE  );
  End;
 
end;
@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 14h00   #3
Charly910
Membre chevronné
 
Avatar de Charly910
 
Homme Charly
Ingénieur TP
Inscription : décembre 2006
Messages : 582
Détails du profil
Informations personnelles :
Nom : Homme Charly
Localisation : France

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

Informations forums :
Inscription : décembre 2006
Messages : 582
Points : 664
Points : 664
Merci Claudius,

effectivement ça marche sans le double With (que j'avais pris sur un exemple )

Tu as raison, il vaut mieux éviter ces pratiques !

A+

Charly
Charly910 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 14h05   #4
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 970
Points : 9 970
Citation:
Envoyé par Charly910 Voir le message
Tu as raison, il vaut mieux éviter ces pratiques !
Il ne faut pas non plus s'interdire l'utilisation de with, mais rester conscient qu'il peut être source d'erreur.

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 14h31   #5
cincap
Membre émérite
 
Inscription : janvier 2006
Messages : 1 393
Détails du profil
Informations personnelles :
Âge : 60

Informations forums :
Inscription : janvier 2006
Messages : 1 393
Points : 890
Points : 890
Bonjour à toutes et à tous,

@ Cl@udius, petit oubli dans ton code si je peux me permettre

Code :
1
2
3
4
5
 if ARow = 0 then
      Canvas.Font.Style := [fsBold]
    else
      Canvas.Font.Style := [];
@+,

Cincap
cincap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 14h37   #6
Cl@udius
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 860
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 50
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 860
Points : 9 970
Points : 9 970
@cincap

Arrfff J'ai corrigé le code. Merci.

Voilà ce que c'est quand on utilise (temporairement) un autre langage.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 14h42   #7
tourlourou
Modérateur
 
Homme Yves Lemaire
Biologiste ; Progr(amateur)
Inscription : mars 2005
Messages : 1 680
Détails du profil
Informations personnelles :
Nom : Homme Yves Lemaire
Âge : 50
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Biologiste ; Progr(amateur)

Informations forums :
Inscription : mars 2005
Messages : 1 680
Points : 3 086
Points : 3 086
Code :
1
2
3
procedure TF_Princ.TNDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  With Sender As TStringGrid Do With Canvas Do
Je suppose que le Canvas retenu était celui de la fiche TF_Princ.

Pour garder le with, on pouvait pê utiliser :
Code :
  With Sender As TStringGrid, TStringGrid(Sender).Canvas Do
__________________
Delphi 5 Pro et Code Typhon 2.80 sous Win 7 64 bits - Code Typhon 2.70 / Ubuntu 12.04 64 bits
tourlourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 15h01   #8
Charly910
Membre chevronné
 
Avatar de Charly910
 
Homme Charly
Ingénieur TP
Inscription : décembre 2006
Messages : 582
Détails du profil
Informations personnelles :
Nom : Homme Charly
Localisation : France

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

Informations forums :
Inscription : décembre 2006
Messages : 582
Points : 664
Points : 664
Pour le :, j'avais rectifié directement

pour le Canvas, je pense que c'est plutôt celui du StringGrid (appelé TN : TerrainNaturel dans mon appli)

F_Princ c'est la Form qui contient le StringGrid

Merci à tous

Charly
Charly910 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h56.


 
 
 
 
Partenaires

Hébergement Web