FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 119, nombre de questions : 909, dernière mise à jour : 22 décembre 2016  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).

Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.

L'équipe Delphi de Developpez.com.

Commentez


SommaireInterface utilisateurComposantsLe composant TTreeView (4)
précédent sommaire suivant
 

Nous définissons la taille totale d'un TTreeview comme étant la somme des hauteurs et la somme des largeurs de tous ses nœuds.

Le code ci-dessous calcule cette taille en utilisant la fonction UnionRect de l'API Windows pour additionner les dimensions des différents rectangles correspondants aux noeuds du TTreeview.

Code delphi : Sélectionner tout
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
function TreeViewSize(ATreeView: TTreeView): TPoint;  
var  
  TotalRect: TRect;  
  i: integer;  
begin  
  //les dimensions respectives de TotalRect seront la somme  
  //des dimensions équivalentes de chaque noeud de l'arbre  
  //On initialise TotalRect à 0 pour toutes les dimensions  
  TotalRect:= Rect(0, 0, 0, 0);  
  //Parcours des noeuds de l'arbre  
  for i:=0 to ATreeView.Items.Count-1 do  
    //DisplayRect retourne les dimensions du rectangle, voir l'aide pour plus de détail  
    UnionRect(TotalRect, TotalRect, ATreeView.Items[i].DisplayRect(false));  
  
  result.X:= TotalRect.Right;  
  result.Y:= TotalRect.Bottom;  
end;  
  
procedure TForm1.Button1Click(Sender: TObject);  
var  
  maxSize: TPoint;  
begin  
  maxSize:= TreeViewSize(TreeView1);  
  //On redimensionne le TTreeview pour qu'il soit complètement visible  
  TreeView1.ClientWidth:= maxSize.X;  
  TreeView1.ClientHeight:= maxSize.Y;  
end;

Mis à jour le 21 janvier 2014 Pierre Castelain

Il suffit de récupérer le TTreeNode qui vous intéresse puis de faire:

Code delphi : Sélectionner tout
TreeView1.Items.Item[0].haschildren := True;
Dans cet exemple, on simule la présence d'un nœud enfant sur le premier nœud du TTreeView.

De la même façon, on peut aussi simuler qu'un nœud n'a pas de nœud enfant en spécifiant:
Code delphi : Sélectionner tout
TreeView1.Items.Item[0].haschildren := False;
Avantage de cette méthode: Les Index des nœuds ne sont pas modifiés

Mis à jour le 21 janvier 2014 deetox

Il n'existe pas de propriété permettant de savoir si un TTreeView est actuellement en mode édition d'un item.
Par contre avec le message TVM_GETEDITCONTROL il est possible de connaitre le Handle de la zone d'édition créée pour la modification in situ.
Si la réponse de ce message est non nulle, alors le TreeView est en mode édition.

Code delphi : Sélectionner tout
1
2
3
4
5
6
7
function IsTreeViewEditing(const: TrreView: TTreeView): boolean; 
Const 
  TVM_FIRST    =$1100; 
  TVM_GETEDITCONTROL = TVM_FIRST + 15; 
begin 
  Result := SendMessage(TreeView.Handle,TVM_GETEDITCONTROL,0,0)<>0;  
end;

Mis à jour le 21 janvier 2014 Nono40

Il est parfois utile de vouloir forcer le passage en mode édition d'un item d'un TTreeView, comme par exemple pour implémenter la touche F2.

Les méthodes standards du composant ne permettent pas de le faire mais les messages Windows dédiés au TreeView le permettent. Le messsage TVM_EDITLABEL permet de demander le passage en mode édition d'un TTreeView.

Code delphi : Sélectionner tout
1
2
3
4
5
6
Const 
  TVM_FIRST    =$1100; 
  TVM_EDITLABEL=(TVM_FIRST+65); 
begin 
  SendMessage(TreeView1.Handle,TVM_EDITLABEL,0,Integer(TreeView1.Selected.ItemID)); 
end;

Mis à jour le 21 janvier 2014 Nono40

Lien MSDN : Message TVM_EDITLABEL

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Delphi : Gilles Vasseur - Alcatîz -