Bonjour, j'espère que certains ici connaissent le composant de Soft Gems (VirtualTreeView).

J'essaie de l'utiliser pour la première fois sour C++ Builder 6.
Ma première tâche simple est de rajouter des lignes (nodes) dans mon VirtualTreeView avec si possible les différentes valeurs sous les colonnes (Header). Malheureusement je n'ai à disposition que des démos pour Delphi et je peine à traduire le tout pour C++ Builder.

Tout d'abord j'ai traduit le Record de Delphi nécessaire au stockage des données par cette déclaration:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
struct TreeData
  {
  String Caption;
  };
TreeData *DataTree;
puis j'ai vu dans la démo qu'il fallait fournir à l'arbre les moyens de gérer/rafraîchir l'affichage des valeurs à partir des données de mon struct à travers les procédures InitNode et Get Text dont voila les versions 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
procedure TMainForm.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode;
  var InitialStates: TVirtualNodeInitStates);
 
var
  Data: PMyRec;
 
begin
  with Sender do
  begin
    Data := GetNodeData(Node);
    // Construct a node caption. This event is triggered once for each node but
    // appears asynchronously, which means when the node is displayed not when it is added.
    Data.Caption := Format('Level %d, Index %d', [GetNodeLevel(Node), Node.Index]);
  end;
end;
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TMainForm.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var Text: WideString);
 
var
  Data: PMyRec;
 
begin
  // A handler for the OnGetText event is always needed as it provides the tree with the string data to display.
  // Note that we are always using WideString.
  Data := Sender.GetNodeData(Node);
  if Assigned(Data) then
    Text := Data.Caption;
end;
Que j'ai traduit (pour le début) en C++ Builder par:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm3::VSTInitNode(TBaseVirtualTree *Sender,
      PVirtualNode ParentNode, PVirtualNode Node,
      TVirtualNodeInitStates &InitialStates)
{
TreeData *Data;
 
        Data=Sender->GetNodeData(Node);
 
 
}
Mais je chope une erreur à la compilation:
[C++ Erreur] Unit3.cpp(245): E2034 Impossible de convertir 'void *' en 'TreeData *'
Et effectivement il est logique que la fonction GetNodeData ne renvoyant qu'un pointeur vide, je ne puisse remplir mes données avec ! Mais comment Delphi fait-il pour que celà fonctionne ?
Quelqu'un a une idée ?