Remplir un VirtualTreeView
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:
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:
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:
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:
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:
Citation:
[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 ? 8O
Quelqu'un a une idée ? :roll: