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 :

Utiliser un TProgressBar dans une cellule d'un TStringGrid ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Utiliser un TProgressBar dans une cellule d'un TStringGrid ?
    Bonjour,

    Je souhaiterai utiliser un TProgressBar dans une cellule d'un TStringGrid, est-ce possible ?

    Si oui, comment dois-je faire ?

    Merci par avance,
    ZiP

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut

    c'est possible en effet, inspire toi de cette entrée de la
    Comment afficher un DBMemo pour la saisie d'une cellule d'un DBGrid ?

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    J'ai essayé votre code, il marche mais ne correspond pas exactement à ce que je souhaitais réaliser.
    J'ai bien la ProgressBar qui s'affiche mais uniquement sur la ligne sélectionnée.

    Le but de ma démarche est en fait de faire un petit gestionnaire de téléchargements où la première colonne de ma StringGrid est une ProgressBar qui affiche l'avancement du téléchargement.

    Comment puis-je faire pour que la ProgressBar soit systématiquement affiché sur la premiere colonne de ma StringGrid ?

    Merci,
    ZiP

  4. #4
    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
    Il suffit de dessiner dans le Canvas de la Grille ... en plus tu pourras mettre des couleurs, tient j'ai fait ce code pour un outil de recherche, cela incluait une colonne qui contenait une statistique de pertinance en couleur ... c'est pour un TDBGrid.DrawDataCell, mais tu remplace par TStringGrid.OnDrawCell, ...

    Voir Image

    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
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    procedure TFrmEasySearchSejourModule.DBGridSearchSejourDrawDataCell(
      Sender: TObject; const Rect: TRect; Field: TField;
      State: TGridDrawState);
     
      // Fonctione Interne -------------------------------------------------------
      function GetPourcentColor(Pourcent: Integer): TColor;
      begin
           case Pourcent of // BVR
                0..9   : Result := $0000FF;// ClRed;
                10..19 : Result := $0033FF;
                20..29 : Result := $0066FF;
                30..39 : Result := $0099FF;
                40..49 : Result := $00CCFF;
                50..59 : Result := $00FFFF;// ClYellow
                60..69 : Result := $00FFCC;
                70..79 : Result := $00FF99;
                80..89 : Result := $00FF66;
                90..99 : Result := $00FF33;
                100    : Result := $00FF00;// ClLime;
                else     Result := $FF0000;// ClBlue;
           end;
      end;
      // Fonctione Interne -------------------------------------------------------
      function InvertColor(AColor: TColor): TColor;
      type
        TRVBColor = record
          case integer of
          1: (
             cR, cV, cB, cS: Byte;
             );
          2: (
             Color: TColor;
             );
        end;
      var
         RVBResult: TRVBColor;
      begin
           RVBResult.Color := AColor;
           RVBResult.cR := $FF - RVBResult.cR;
           RVBResult.cV := $FF - RVBResult.cV;
           RVBResult.cB := $FF - RVBResult.cB;
           Result := RVBResult.Color;
      end;
     
    var
       CopyRect, RectEnVar: TRect;
       ADrawString: String;
       TextBmp: TBitmap;
       x, y: Integer;
    begin
        if Assigned(Field) then begin
           if Field.FieldName = GRID_FIELD_NAME[egfInterventionPrevueRealisee] then begin
              // Efface la Zone
              DBGridSearchSejour.Canvas.Brush.Color := clWindow;
              DBGridSearchSejour.Canvas.FillRect(Rect);
              if not Field.IsNull then begin
                 if Field.AsInteger > 0 then begin
                    DBGridSearchSejour.Canvas.Brush.Color := GetPourcentColor(Field.AsInteger);
                    CopyRect := Rect;
     
                    CopyRect.Right := CopyRect.Left + Round((CopyRect.Right - CopyRect.Left) * Field.AsInteger / 100);
                    DBGridSearchSejour.Canvas.FillRect(CopyRect);
     
                    CopyRect := Rect;
                    ADrawString :=  Field.AsString +' %';
     
                    TextBmp := TBitmap.Create();
                    try
                       TextBmp.Width := Rect.Right - Rect.Left;
                       TextBmp.Height := Rect.Bottom - Rect.Top;
                       RectEnVar := Types.Rect(0, 2, TextBmp.Width, TextBmp.Height-2);
     
                       TextBmp.Canvas.Font.Color := clBlack;
     
                       Windows.DrawText(TextBmp.Canvas.Handle,
                                        PChar(ADrawString),
                                        Length(ADrawString),
                                        RectEnVar,
                                        DT_CENTER+DT_VCENTER);
     
                       for x := 0 to TextBmp.Width-1 do begin
                           for y := 0 to TextBmp.Height-1 do begin
                               if TextBmp.Canvas.Pixels[x, y] = clBlack then begin
                                  TextBmp.Canvas.Pixels[x, y] := InvertColor(DBGridSearchSejour.Canvas.Pixels[Rect.Left+x, Rect.Top+y]);
                               end else begin
                                   TextBmp.Canvas.Pixels[x, y] := DBGridSearchSejour.Canvas.Pixels[Rect.Left+x, Rect.Top+y];
                               end;
                           end;
                       end;
     
                       Windows.BitBlt(DBGridSearchSejour.Canvas.Handle,
                                      Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top,
                                      TextBmp.Canvas.Handle,
                                      0, 0,
                                      SRCCOPY);
                    finally
                            TextBmp.Free();
                    end;
                 end;
              end;
           end;
        end;
    end;
    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

  5. #5
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    J'ai trouvé ça :
    http://delphi.about.com/library/weekly/aa053105a.htm

    Le seul problème c'est que lorsque l'on déplace la scrollbar de la ListView, les ProgressBar ne se déplacent pas.

    Je vais essayer d'améliorer cette partie...

    ZiP

  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
    Normalement, la propriété Parent devrait faire que cela forme un seul ensemble ...
    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 averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Je viens de vérifier, la propriété Parent est correctement renseignée.

    Merci,
    ZiP

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/03/2010, 09h58
  2. Réponses: 19
    Dernier message: 09/06/2009, 12h07
  3. [Projet d'amélioration]Ecrire dans une cellule en utilisant un micro
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/09/2008, 11h43
  4. Réponses: 2
    Dernier message: 05/07/2008, 09h54
  5. Utiliser le contenu d'une cellule dans un if
    Par bablight dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/08/2007, 15h02

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