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 :

[TListView] Comment connaître la largeur d'une colonne ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut [TListView] Comment connaître la largeur d'une colonne ?
    Bonjour,

    Est il possible de connaitre en direct lors d'un redimensionement la taille d'une colonne d'une listview ?

    Car en faite je veux intégrer des progressbars dans les listviews ...
    et j'aimerai qu'elles suivent en direct le redimensionement...

    Voila mon code :


    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
    procedure TForm1.FormCreate(Sender: TObject);
    var itm: tlistitem;
      i: integer;
      pb: TProgressBar;
      r: TRect;
    begin
     
      for i := 0 to 6 do begin
        itm := threads.Items.Add;
        itm.Caption := inttostr(i);
        itm.ImageIndex := 0;
        itm.SubItems.Add(timetostr(now) + ' : En attente ...');
        itm.SubItems.Add('');
        randomize();
        itm.SubItems.Add('0 Ko/sec');
     
     
        r := threads.Items[i].DisplayRect(drBounds);
     
        pb := TProgressBar.Create(Self);
        pb.Parent := threads;
     
        pb.Position := Random(pb.Max);
     
        threads.Items[i].Data := pb;
        AdjustProgressBar(threads.Items[i], r);
      end;
     
     
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.AdjustProgressBar(item: TListItem; r: TRect);
    var
      pb: TProgressBar;
    begin
         r.Left := r.Left + threads.columns[0].Width+ threads.columns[1].Width;
      r.Right := r.Left + threads.columns[2].Width;
     
      pb := item.Data;
      pb.BoundsRect := r;
    end;
    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
    procedure TForm1.threadsCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      r: TRect;
      pb: TProgressBar;
    begin
      r := Item.DisplayRect(drBounds);
     
      pb := item.data;
      pb.Top := item.Top;
     
      if pb.Top < 10 then pb.Visible := false else pb.visible :=true;
     //   AdjustProgressBar(Item, r);
     
    end;
    A noter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    threads.Column[2].Width
    ne donne pas en direct le redimensionnement..

    Ou alors comment empecher le redimensionnement ?

    Merci d'avance

  2. #2
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut [DESSINER] dans une tlistview :( :(
    Bonjour,

    Je voudrais dessiner dans une tlistview une barre de progression ( un dégradé en faite )

    Un rectangle dégradé qui irait dans la colonne 3
    de la gauche vers la droite....

    Mais déssiner dans une tlistview est une tache très compliqué
    tout par en vrille

    Vous avez une idée comment je peux créer des ptites images indiquant la progression ? pour chaque item d'une tlistview ...
    Dans une colonne ...

    Merci

    Comment faire tout simplement cela :



    Merci d'avance, car la je cherche depuis deux heures sans succès mais bon je suis pas un pro du dessin ...

  3. #3
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    c'est trop dur ....



    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
    procedure TForm1.threadsCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var r: TRect;
    begin
     
      r.Left := 267;
      r.Right := 405;
      r.Top := 10;
      r.Bottom := 4;
      memo1.Lines.Add('qqch : ' + inttostr(item.Top));
      sender.Canvas.Pen.Width := 1;
      sender.Canvas.Pen.Color := clwhite;
      sender.Canvas.Brush.color := $00F0F0F0;
      sender.Canvas.Brush.Style := bssolid;
      sender.Canvas.rectangle(r);
      sender.Canvas.Brush.color := clwhite;
      defaultdraw := true;
     
    end;
    Mais je ne sais ps comment définir top et bottom pour que ca fonctionne

    merci d'avance ...

  4. #4
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Le plus simple pour créer une barre de progression est de dessiner préalablement le BMP de la barre complète (à 100%).
    Ensuite, tu charges ce BMP dans une TImage.
    Tu définis la taille de ce TImage comme ceci :
    Image1.Width := Image1.Picture.Bitmap.Width;
    Image1.Height := Image1.Picture.Bitmap.Height;

    Maintenant, en définissant la propriété Width de ce TImage, tu auras un effet de ProgressBar. Simple, non ?
    Voilà à présent, tu n'as plus qu'à poser cette TImage où tu veux.

    Pour définir la position de cette barre avec un pourcentage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Var
      Position: Integer; // Ira de 0 à 100...
    ...
    Image1.Width := Round(Image1.Picture.Bitmap.Width / 100 * Position);
    Et inversement, pour obtenir le pourcentage à partir de la largeur de l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Position := Round(Image1.Width / Image1.Picture.Bitmap.Width * 100);
    De retour parmis vous après 10 ans!!

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    • Merci de ne pas créer un nouveau topic pour chaque question d'un même sujet!
    -> Sujets fusionnés

    En ce qui concerne le redimensionnement de ta ListView et pour que la barre de progression soit proportionnelle,
    il suffit de remplacer Image1.Picture.Bitmap.Width dans le code ci-dessus par la largeur de la colonne.

    Logiquement, il conviendra de dessiner au départ un BMP suffisemment large pour obtenir le redimensionnement maximal.

    Notes:
    • Tu peux également dessiner directement dans le TImage avec FillRect...
    • Ne pas oublier le Refresh du TImage pour actualiser l'affichage...

    à+
    De retour parmis vous après 10 ans!!

  6. #6
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    Voila j'ai avancé mais j'ai un probleme
    la colonne après la barre de progression affiche en gras ...
    Mais pourquoi ???




    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
    var T, L: integer;
      UnRect: TRect;
     
      procedure Dessinerbarre(const x, y: integer; const b: boolean);
      begin
        Sender.Canvas.Draw(L, T, progress.Picture.Graphic)
      end;
     
    begin
      DefaultDraw := true;
      ListView_GetItemRect(Sender.Handle, Item.Index, UnRect, 0);
     
      if (SubItem = 1) then begin
        DefaultDraw := false;
        T := UnRect.Top;
        L := ListView_GetColumnWidth(Sender.Handle, 0);
        dessinerbarre(1, 1, true);
      end;
    Merci de ton aide sub0

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    Jene sais pas si cela peut t'aider, mais voila un article assez complet sur l'utilisation des customdraw dans un listview: http://www.delphidabbler.com/articles.php?article=16

  8. #8
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    J'ai deja regardé merci
    Mais c'est cette histoire de gras qui me desespere
    je cherche...
    Merci

  9. #9
    Membre actif Avatar de remixtech
    Profil pro
    Enseignant
    Inscrit en
    Février 2003
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2003
    Messages : 272
    Points : 214
    Points
    214
    Par défaut
    Voila après avoir tout lu ...

    Il faut ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Sender.Canvas.Brush.Color := clwhite;
    et Dans tous les customdraw ...

    Merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/05/2007, 10h40
  2. Réponses: 2
    Dernier message: 06/06/2006, 13h59
  3. Réponses: 2
    Dernier message: 02/05/2005, 11h57
  4. Réponses: 1
    Dernier message: 12/05/2004, 19h02
  5. [C#] Comment faire pour rendre invible une colonne(ListView)
    Par Jfrancois57 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/05/2004, 13h27

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