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

Delphi Discussion :

Indentation des items dans un TListview


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 47
    Points : 39
    Points
    39
    Par défaut Indentation des items dans un TListview
    Comment indenter (décaler vers la droite comme une tabulation) certains items de la première colonne d'un TListview (comme dans le shareware EVEREST) ? (avec une icone devant chaque ligne)

    exemple :

    Item 1
    option 1
    option 2
    option 3
    Item 2
    option 1
    option 2
    option 3
    etc.

    Merci de votre aide

    Daniel

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 112
    Points
    112
    Par défaut OnDrawItem
    Bonjour

    Tu utilises par exemple un TImageList pour stocker tes icones.
    Tu peux utiliser l'événement OnDrawItem pour gérer l'affichage comme tu le souhaites.
    Voici un exemple avec l'utilisation de l'icone 1 du TImageList et avec une indentation de 10 pixels si {Condition} est rencontrée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.ListView1DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState);
    var
      Indentation: Integer;
    begin
      if {Condition} then Intentation := 10 else Indentation := 0;
      ilCalendrier.Draw(Sender.Canvas, Rect.Left + Indentation, Rect.Top, 1);
      Sender.Canvas.TextOut(Rect.Left + ilCalendrier.Width + Indentation, Rect.Top, Item.Caption);
    end;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 47
    Points : 39
    Points
    39
    Par défaut Autre solution pour indenter les items d'un Tlistview
    Merci pour la réponse.
    J'ai trouvé cette fonction en VB, il suffit de la transposer en Delphi
    est-ce que cette solution est mieux ou pas par rapport au ListView1DrawItem ?

    Indentation des Items d'un TListview :

    Public Function SetListviewIndentItem(hwnd As Long, nItem As Long, nIndent As Long)

    Dim LV As LVITEM

    If nIndent > 0 Then

    With LV
    .mask = LVIF_INDENT
    .iItem = nItem - 1
    .iIndent = nIndent
    End With

    Call SendMessage(hwnd, LVM_SETITEM, 0&, LV)

    End If

    End Function

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Mieux je sais pas...
    mais c'est bizard ta fonction VB ne retourne rien? ?

    Voici tout de même ca traduction en delphi:
    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
     
    //==============================================================================
    //=== USES: Commctrl
    Function SetListviewIndentItem(hwnd:THandle;nItem:Integer; nIndent:Integer):boolean;
    var
      LV:TLVItem;
    begin
      If nIndent > 0 Then
      begin
        With LV do
        begin
          mask:= LVIF_INDENT;
          iItem:= nItem - 1;
          iIndent:= nIndent;
        end;
      end;
      result:=ListView_SetItem(Hwnd,lv);
    End;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Je pense que tu as oublié le SendMessage, qui me parait fondamental.

    Daniel

Discussions similaires

  1. Réponses: 15
    Dernier message: 11/03/2006, 20h29
  2. ajouter dynamiquement des items dans un popup menu
    Par Malone dans le forum Composants VCL
    Réponses: 7
    Dernier message: 23/08/2005, 16h08
  3. Réponses: 9
    Dernier message: 02/02/2005, 15h52
  4. [Portal 9iAS] : ordre des items dans une région
    Par melitta dans le forum Oracle
    Réponses: 8
    Dernier message: 21/10/2004, 14h01
  5. Comment effacer des Items d'un TListView ?
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/11/2002, 10h19

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