Bonjour à tous,

voici mon probleme, j'ai un VirtualTreeView nommé vtSearchs sur lequel j'ai apporté ma petite touche perso sur le OnDrawNode. SearchClass contient quelques propriétés, et SearchList contient des SearchClass

Mais voilà alors que dans la proc UpdateVTSearchs ma variable SC existe bien (SC.Source est accessible, SC.Title aussi) je me retrouve avec le message La valeur de Node n'est pas utilisé dans la fonction UpdateVTSearchs.
J'ai la même chose sur un autre prog et là je n'ai pas ce message.

Le programme me plante une erreur sur la ligne :
0: DrawText(Canvas, R, taLeftJustify, tlCenter, SC.Source);
avec une violation d'access, SC n'est pas defini.

Normalement, il devrait connaitre le Node mais là rien et pourtant dans mon autre prog cela fonctionne parfaitement et pas de message comme quoi la valeur de Node n'est pas utilisé.

Une idée ? peut etre une chose à checker dans les options du projet ?

Note : biensur ce qu'une partie de mon prog, j'initialise bien valeur et d'ailleurs
comme je le dis plus haut dans ce texte, SC.Source existe bien et j'ai la bonne valeur.

Note : si je remplace SC.Source par un texte du style 'Toto' cela fonctionne bien (dans 0: DrawText(Canvas, R, taLeftJustify, tlCenter, SC.Source); )

Merci à tous pour votre aide.
Bruno

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
procedure TMain.UpdateVTSearchs;
var
  i : integer;
  Node: PVirtualNode;
  SC: TSearchClass;
  SL: TSearchList;
begin
    SL:=TSearchList.Create;
    try
        SL := FData.Searchs;
 
        vtSearchs.NodeDataSize:=SizeOf(Pointer);
        vtSearchs.BeginUpdate;
        try
          vtSearchs.Clear;
          for i:=0 to SL.Count-1 do
          begin
            SC:=SL[i];
            Node:=vtSearchs.AddChild(nil, SC);
          end;
        finally
          vtSearchs.EndUpdate;
        end;
    finally
      SL.Free;
    end;
end;
 
procedure TMain.vtSearchsDrawNode(Sender: TBaseVirtualTree;  const PaintInfo: TVTPaintInfo);
var
  SC : TSearchClass;
  R : TRect;
begin
  with PaintInfo do
  begin
    R:=ContentRect;
 
    if Sender.Selected[Node] then
      Canvas.Font.Color:=clWhite
    else
      Canvas.Font.Color:=clBlack;
 
    Canvas.Brush.Style:=bsClear;
 
    SC:=GetPointerFromTree(Sender, Node);
    if Assigned(SC) then
    case Column of
      0: DrawText(Canvas, R, taLeftJustify, tlCenter, SC.Source);
      1: DrawText(Canvas, R, taLeftJustify, tlCenter, SC.Title);      
    end;
  end;
end; {* proc .vtSearchsDrawNode *}
 
procedure TMain.Button1Click(Sender: TObject);
begin
    UpdateVTSearchs;
end;