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 :

Wingdings 2 dans une StringGrid


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Par défaut Wingdings 2 dans une StringGrid
    Bonsoir à tous,

    J'utilise la police wingdings 2 pour afficher une case à cocher dans une stringgrid, cependant, je rencontre un problème d'affichage.
    Exemple:
    Quand je clique sur la ligne 3 par exemple pour afficher la case cocher et ensuite sur la ligne 4, il n'y a pas de problème. Ensuite, je clique de nouveau sur la ligne 3 et il m'affiche la case non coché, mais il le fait aussi sur la ligne 4.
    Voici le code sous Delphi 2009
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, Grids;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        StringGrid1: TStringGrid;
        procedure FormCreate(Sender: TObject);
        procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure StringGrid1Click(Sender: TObject);
      private
        { Déclarations privées }
        iACol: integer;
        iARow: integer;
      public
        { Déclarations publiques }
        Value: String;
      end;
     
    const
      sCheckOff = '0';
      sCheckOn  = 'R';
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i: integer;
    begin
      for i := StringGrid1.FixedRows to StringGrid1.RowCount -1 do
      begin
        Value:= sCheckOff;
      end;
    end;
     
    procedure TForm1.StringGrid1Click(Sender: TObject);
    begin
      iACol:= TStringGrid(StringGrid1).Col;
      iARow:= TStringGrid(StringGrid1).Row;
     
      Value:= sCheckOff;
      if StringGrid1.Cells[iACol, iARow] = sCheckOff then
        Value:= sCheckOn;
    end;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if ACol = 1 then
      begin
        with TStringGrid(Sender), Canvas do
        begin
          Font.Name:= 'Wingdings 2';
          Font.Size:= 15;
     
          Cells[iACol, iARow]:= Value;
     
          TextOut(Rect.Left +25, Rect.Top +1, Value);
        end;
      end;
    end;
     
    end.
    Quelqu'un pourrait-il éclairer ma lanterne ?
    Jeankiki

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 964
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 964
    Par défaut
    Il faut écrire directement dans la cellule.
    Comme fait actuellement, tu ne peux garantir que Value ait la valeur de la cellule devant être repeinte.

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Bonjour,

    Dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with TStringGrid(Sender), Canvas do
        begin
          Font.Name:= 'Wingdings 2';
          Font.Size:= 15;
     
          Cells[iACol, iARow]:= Value;
     
          TextOut(Rect.Left +25, Rect.Top +1, Value);
        end;
    ... il manque déjà Font.Charset:=SYMBOL_CHARSET;
    ... pour le reste faut voir.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Par défaut
    Gilbert :
    La ligne Font.Charset:=SYMBOL_CHARSET; est elle vraiment nécessaire?

    Andnotor :
    Faut il redessinner la cellule à chaque fois dans le OnClick avec un TextOut ?

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 964
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 964
    Par défaut
    Non, non !
    Ecrire dans la cellule entraînera obligatoirement une repeinture, donc un appel à OnDrawItem .

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Bonjour,

    Gilbert :
    La ligne Font.Charset:=SYMBOL_CHARSET; est elle vraiment nécessaire?
    ... En tous cas elle m'a été nécessaire pour pouvoir afficher correctement des Wingdings dans un RichEdit.
    ... mais rien n'empêche d'essayer avec et sans dans ton StringGrid ça côute au grand max une seule instruction de plus ou de moins.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. Editer ou non une cellule dans une stringGrid ?
    Par jamah dans le forum Composants VCL
    Réponses: 3
    Dernier message: 31/03/2006, 18h52
  2. Securiser une cellulle dans une stringGrid .
    Par jamah dans le forum Composants VCL
    Réponses: 2
    Dernier message: 25/01/2006, 16h38
  3. lire les indexes dans une stringGrid
    Par zidenne dans le forum Composants VCL
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  4. Insérer des lignes dans une StringGrid
    Par da_latifa dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/09/2005, 13h45
  5. Ne rentrer que des chiffes dans une stringgrid
    Par rvzip64 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/08/2005, 12h06

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