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.WorkAreas] Comment les utiliser ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut [TListView.WorkAreas] Comment les utiliser ?
    Bonjour à tous.

    Voici mon problème, comment utiliser les WorkAreas des TListViews ?
    Comme c'est une collection, on peut les ajouter les retirer, leur affecter une caption, une couleur, etc.., mais comment leurs affecte-t-on les TListItems ?
    La propriété TListItem.WorkArea est en lecture seule, et mes recherches Google n'ont rien donné.

    Si quelqu'un peut m'aider sur ce coup, ce serait très gentil à lui (un lien, un exemple, n'importe quoi (mais qui se rapporte au sujet :-).).
    Amicalement
    Claude.

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Totalement inconnu ce truc.
    Sinon d'après l'aide : WOrkArea est un TWorkAreas qui est une collection d'objets TWorkArea.

    Donc, en toute théorie, tu crées des TWorkArea (avec les propriétés qui t'intéressent) et tu les ajoutes (par Add()) enlèves...à ton WorkArea.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut Merci, mais...
    Merci à toi.
    Mais j'avais déjà compris cette partie.
    Ce que je recherche c'est comment les utiliser avec les Items...
    Comment affecter certains Items à certaines Areas, les changer d'Area à volonté, modifier leurs tailles (la propriété Rect est en Lecture seule), etc..

    MDSN Library en parle un petit peu, mais ne leur consacre qu'un paragraphe.
    Les codes exemples sont inutilables pour moi (je ne connais que Delphi :-( )
    Si quelqu'un peut me les traduire, ils sont ici:

    http://msdn2.microsoft.com/en-us/lib...x#Using_Groups

    Toujours ouvert aux suggestions.
    Merci de votre temps...

    Amicalement,
    Claude.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 464
    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 464
    Points : 24 888
    Points
    24 888
    Par défaut
    As-tu activé ShowWorkAreas ?
    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 du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut ShowWorkAreas.
    Oui, j'ai activé cette propriété (en fait c'est la, première chose que j'ai faite, avec la mise de SortType à stNone).
    Voilà ou j'en suis actuellement:

    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
    procedure CREER_ZONES_DE_TRAVAIL;
    var  R : TRect;
    begin
    R.Left := 0;
    R.Top := 0;
    R.Right := MainForm.ListView.Width;
    R.Bottom := 100; // Comment obtenir la hauteur d'un ligne ?
     
    with MainForm.ListView.Items.Add do
      begin
      Caption := 'Item';
      ImageIndex := 1;
      end;
     
    with MainForm.ListView.WorkAreas.Add do
      begin
      DisplayName:= 'Zone';
      Color := 255;
      Rect := R;
      end;
    end;
    Ce qui me donne une zone pointillé en rouge (Color := 255 avec le mot "Zone" écrit en rouge juste au dessous de celle-ci. Le TListItem est quant à lui dans la partie basse de la zone, aligné à gauche.
    On est encore loin des zones qui apparaissent dans l'explorateur Windows :-).
    Je vous tiens au courant dès que je fais des progrès.
    Je cherche à arriver au moins à quelque chose qui pourrait ressembler à ce qui est donné en exemple ici:

    http://msdn2.microsoft.com/en-us/library/ms670558.aspx
    (Paragraphe "Grouping" en bas de la page).

    De plus, pour ne rien arranger, il semblerait que le "Grouping" et les "WorkAreas" puissent être 2 chose différentes... !?

    A très bientôt...
    Amicalement,
    claude.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut Solution...
    Bonjour à tous.

    j'ai enfin trouvé une solution à mes recherches ici:
    http://www.swissdelphicenter.ch/en/showcode.php?id=1782

    En voici le code complet:
    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
    106
    107
    108
    // declarations from commctrl.h
    type
      TLVGROUP = record
        cbSize: UINT;
        mask: UINT;
        pszHeader: LPWSTR;
        cchHeader: Integer;
        pszFooter: LPWSTR;
        cchFooter: Integer;
        iGroupIdL: Integer;
        stateMask: UINT;
        state: UINT;
        uAlign: UINT;
      end;
     
      tagLVITEMA = packed record
        mask: UINT;
        iItem: Integer;
        iSubItem: Integer;
        state: UINT;
        stateMask: UINT;
        pszText: PAnsiChar;
        cchTextMax: Integer;
        iImage: Integer;
        lParam: lParam;
        iIndent: Integer;
        iGroupId: Integer;
        cColumns: UINT;
        puColumns: PUINT;
      end;
      TLVITEMA = tagLVITEMA;
     
    const
      LVM_ENABLEGROUPVIEW = LVM_FIRST + 157;
      LVM_MOVEITEMTOGROUP = LVM_FIRST + 154;
      LVM_INSERTGROUP     = LVM_FIRST + 145;
     
      LVIF_GROUPID = $0100;
     
      LVGF_HEADER  = $00000001;
      LVGF_ALIGN   = $00000008;
      LVGF_GROUPID = $00000010;
     
      LVGA_HEADER_LEFT   = $00000001;
      LVGA_HEADER_CENTER = $00000002;
      LVGA_HEADER_RIGHT  = $00000004;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      LvGroup: TLVGROUP;
      LvItemA: TLVITEMA;
      ListItem: TListItem;
      I: Byte;
    begin
      // Fill listview with random data
      Randomize;
      for i := 1 to 10 do
      begin
        ListItem := ListView1.Items.Add;
        ListItem.Caption := IntToStr(Random(100));
      end;
     
      SendMessage(ListView1.Handle, LVM_ENABLEGROUPVIEW, 1, 0);
     
      // Create Group1
      FillChar(LvGroup, SizeOf(TLVGROUP), 0);
      with LvGroup do
      begin
        cbSize := SizeOf(TLVGROUP);
        mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
        pszHeader := 'Group 1';
        cchHeader := Length(LvGroup.pszHeader);
        iGroupIdL := 0;
        uAlign := LVGA_HEADER_CENTER;
      end;
      SendMessage(ListView1.Handle, LVM_INSERTGROUP, 0, Longint(@LvGroup));
     
      // Create Group2
      FillChar(LvGroup, SizeOf(LvGroup), 0);
      with LvGroup do
      begin
        cbSize := SizeOf(TLVGROUP);
        mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
        pszHeader := 'Group 2';
        cchHeader := Length(LvGroup.pszHeader);
        iGroupIdL := 1;
        uAlign := LVGA_HEADER_LEFT
      end;
      SendMessage(ListView1.Handle, LVM_INSERTGROUP, 1, Longint(@LvGroup));
     
      // Assign items to the groups
      for I := 0 to ListView1.Items.Count - 1 do
      begin
        with LvItemA do
        begin
          FillChar(LvItemA, SizeOf(TLvItemA), 0);
          mask := LVIF_GROUPID;
          iItem := I;
          iGroupId := Random(2);
        end;
        SendMessage(ListView1.Handle, LVM_SETITEM, 0, Longint(@LvItemA))
      end;
    end;
     
     
     
    // XPManifest needed!
    Merci donc à Thomas Stutz (auteur de cette page).

    Les types déclarés se trouvent dans l'Unité Delphi CommCtrl, mais leur déclaration est incomplète, il faut donc les redefinir en en-tête à la main. Par contre on y trouve parfaitement les constantes déclarées.

    Un bémol cependant, la macro "ListView_GetGroupCount" renvoie toujours 0. Impossible d'avoir le nombre de Groupe en code pour leur création à la volée, il faut le gérer extérieurement à la ListView (cette fonction est cependant accessible sous Vista et +).

    Merci de votre aide..

    Amicalement,
    Claude.

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

Discussions similaires

  1. garbage collector et finalize() Comment les utiliser ?
    Par HighSchool2005 dans le forum Langage
    Réponses: 17
    Dernier message: 03/04/2007, 15h25
  2. [VS.NET][Ressources]Comment les utiliser
    Par NicolasJolet dans le forum Visual Studio
    Réponses: 2
    Dernier message: 06/10/2006, 11h16
  3. Réponses: 1
    Dernier message: 13/12/2005, 17h48
  4. [Properties] comment les utiliser ?
    Par Kyti dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 25/03/2005, 10h37
  5. Réponses: 7
    Dernier message: 13/03/2005, 16h45

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