le zedi
Messages postés12Date d'inscriptionjeudi 15 avril 2004StatutMembreDernière intervention 7 juin 2004
-
24 mai 2004 à 17:40
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 2010
-
5 août 2004 à 23:36
Voila j'ai une arborescence a trois niveau.
Premier niveau j'ai le nom des sites
Deuxieme niveau j'ai le nom des batiments relié
Troisieme niveau j'ai le nom des articles relié
Pour chaqu'un correspond une date.
Je souhaiterai que si la date est antérieur a celle du jour le nom qui apparai dans le treeView soit en rouge ...
Ma question est donc comment changer la couleur de ce que l'on ecrit dans l'arborescence ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 24 mai 2004 à 22:53
Pour cela, il faut utiliser l'évènement OnCustomDrawItem.
Exemple avec une écriture en encre verte du texte des noeuds dont la propriété StateIndex vaut zéro :
procedure TMainFormDemo.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Node.StateIndex = 0 then
TreeView1.Canvas.Font.Color := clGreen
end;
Il te suffira de remplacer la condition (et la couleur, lol) par celle qui est la tienne.
May Delphi be with you
le zedi
Messages postés12Date d'inscriptionjeudi 15 avril 2004StatutMembreDernière intervention 7 juin 2004 25 mai 2004 à 10:00
Merci a toi Delphiprog
J'ai encore un petit probleme car voila ma situation :
J'ai trois tables
La premier Site ou j'ai le nom du site, son identifiant et la date de la prochaine visite,
La deuxieme Batiment ou j'ai le nom du batiment, son identifiant, la date de la prochaine visite et l'identifiant du site au quel il appartient,
La troisieme Article ou j'ai le nom de l'article, son identifiant, la date de la prochaine visite et l'identifiant du batiment au quel il appartient.
J'ai donc mis trois ADOTable.
Et donc je voudrai que si la date de visite d'un élément est dépassé seul cette elément soit en rouge.
Et que son ou ses parents si eux meme ne sont pas déja rouge soit violet
J'espere avoir ete le plus clair possible
Voila le code que moi j'ai mis :
procedure TFicheArbo.TreeViewArboCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (Node.Level = 0) then
begin
if (ADOTableSite.FieldByName('ProchVisitSite').asdatetime < date) then
begin
TreeViewArbo.Canvas.Font.Color := clRed;
end;
if (ADOTableSite.FieldByName('ProchVisitSite').asdatetime > date) then
begin
TreeViewArbo.Canvas.Font.Color := ClWindowText;
end;
end;
if (Node.Level = 1) then
begin
if ( (ADOTableBat.FieldByName('ProchVisitBat').asdatetime < date) and (ADOTableSite.FieldByName('ProchVisitSite').asdatetime < date) ) then
begin
TreeViewArbo.Canvas.Font.Color := clRed;
end;
if ( (ADOTableBat.FieldByName('ProchVisitBat').asdatetime < date) and (ADOTableSite.FieldByName('ProchVisitSite').asdatetime > date) ) then
begin
TreeViewArbo.Canvas.Font.Color := clRed;
//Mise en ClFuchsia du noeud supérieur
end;
if ( (ADOTableBat.FieldByName('ProchVisitBat').asdatetime > date) and (ADOTableSite.FieldByName('ProchVisitSite').asdatetime > date) ) then
begin
TreeViewArbo.Canvas.Font.Color := ClWindowText;
end;
end;
if (Node.Level = 2) then
begin
if ( (ADOTableArt.FieldByName('ProchVisitArt').asdatetime < date) and (ADOTableBat.FieldByName('ProchVisitBat').asdatetime < date) ) then
begin
TreeViewArbo.Canvas.Font.Color := clRed;
end;
if ( (ADOTableArt.FieldByName('ProchVisitArt').asdatetime < date) and (ADOTableBat.FieldByName('ProchVisitBat').asdatetime > date) and (ADOTableSite.FieldByName('ProchVisitSite').asdatetime < date) ) then
begin
TreeViewArbo.Canvas.Font.Color := clRed;
//Mise a ClFuchsia du noeud supérieur
end;
if ( (ADOTableArt.FieldByName('ProchVisitArt').asdatetime < date) and (ADOTableBat.FieldByName('ProchVisitBat').asdatetime > date) and (ADOTableSite.FieldByName('ProchVisitSite').asdatetime > date) ) then
begin
TreeViewArbo.Canvas.Font.Color := clRed;
//Mise a ClFuchsia du noeud supérieur
//Mise a ClFuchsia du noeud supérieur-supérieur
end;
if ( (ADOTableArt.FieldByName('ProchVisitArt').asdatetime > date) ) then
begin
TreeViewArbo.Canvas.Font.Color := ClWindowText;
end;
end;
end;
Avec ce code des que pour le level 0 un site a sa date de prochaine visite qui est dépassé tous les site sont en rouge et pour les level 1 et 2 il ne se passe rien ...
J'avais eu l'idée des désigner les couleurs dans le remplissage de mon TreeView
juste après chaque
if (ADOTableSite.FieldByName('ProchVisitSite').asdatetime < date) then
begin
TreeViewArbo.Canvas.Font.Color := clRed;
end;
if (ADOTableSite.FieldByName('ProchVisitSite').asdatetime > date) then
begin
TreeViewArbo.Canvas.Font.Color := ClWindowText;
end;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 29 mai 2004 à 21:36
Pour ceux que ça intéresse, tous les détails de cette affaire sont disponibles sur mon site : j'y vais de suite !.
Allez y, vous ne serez pas déçus, c'est promis.
May Delphi be with you
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 5 août 2004 à 20:34
hello,
me voici avec un ptit soucis :
j'ai un TListView en vsReport, j'ai une TListImage avec 24 images de w25*h15.
quand j'ajoute un item avec un stateindex > 16, il ne prends pas l'image 17, 18 mais reviens à 0, 1 ...
le stateindex est il limité à 16 etats ?
dans ce cas, comment afficher mes images correctement ! merci
ps : au cas ou, voila le bout de code ki insere : (lv_ranks = ma listview et lPlayer declaré en TListItem)
lPlayer := lv_ranks.Items.Add;
lplayer.StateIndex := 20;
lPlayer.SubItems.Add('truc');
lPlayer.SubItems.Add('machin');
lPlayer.SubItems.Add('bidule');
lPlayer.SubItems.Add('dernier');
merci :|
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 5 août 2004 à 23:32
Question bête : la propriété StateImages de ton composant lv_ranks est-elle renseignée avec la même liste d'images que la propriété SmallImages ou LargeImages ?
Parce que si tu n'as pas les mêmes listes d'images... :big)
May Delphi be with you