Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
François Picalausa
On Sep 30, 3:41 pm, tking wrote:
Bonjour,
j'ai trouvé un code en C++ que j'aimerais adapter en vb, mais j'ai beaucoup de difficultés avec treeview.
<snip>
Je ne sais pas à quoi correspond "IEnumerator ie", je galère.
Hello,
Pour ce que j'en dis, ça ressemble nettement plus à du C# qu'à du C++, même s'il est possible d'écrire le même code en C++.
IEnumerator correspond au type IEnumVariant de COM, très employé sous Visual Basic 6 dans les... For Each. En VB6, la traduction de ce code serait donc, à peu près: Private Function WriteText(Text As String) As Boolean Debug.Print Text WriteText = True End Function
Private Sub parseNode(tn As Node) Dim ctn As Node Dim ParentNode As String ParentNode = tn.Text
Set ctn = tn.Child Do While Not ctn Is Nothing 'Remarque : dans ctn.GetNodeCount(true), false 'serait plus approprié If ctn.Children = 0 Then WriteText ctn.Text Else WriteText "<" & ctn.Text & ">" End If
If ctn.Children > 0 Then parseNode ctn End If
Set ctn = ctn.Next Loop
WriteText "</" & ParentNode & ">" & vbCrLf End Sub
Cela étant, ce code est faux et ne fera pas ce qu'il est sencé faire (tout le ferait - si je l'ai bien compris - le code original). Pour diverses raisons, il serait plus adéquat de définir le code différemment de sorte à produire un output plus facilement lisible, plus extensible et surtout compatible xml. Voici un exemple de code dans cette optique: Private Function XmlEscapestring(Text As String) As String XmlEscapestring = Text XmlEscapestring = Replace(XmlEscapestring, "&", "&") XmlEscapestring = Replace(XmlEscapestring, "<", "<") XmlEscapestring = Replace(XmlEscapestring, ">", ">") End Function
Private Sub NodeToXml(BaseNode As Node, Optional Recurse As Boolean = True, Optional PerformDeclaration As Boolean = True, Optional Encoding As String) Dim ChildNode As Node
If (Not BaseNode Is Nothing) Then 'Ajoute la déclaration XML If PerformDeclaration Then If LenB(Encoding) = 0 Then WriteText "<?xml version=""1.0""?>" Else WriteText "<?xml version=""1.0"" encoding=""" & Encoding & """?>" End If End If
If ((Not Recurse) Or (BaseNode.Children = 0)) Then WriteText "/>" Else WriteText ">"
Set ChildNode = BaseNode.Child
While Not ChildNode Is Nothing NodeToXml ChildNode, True, False, vbNullString Set ChildNode = ChildNode.Next Wend
WriteText "</treenode>" End If End If End Sub
Private Function WriteText(Text As String) As Boolean 'Penser à encoder correctement le fichier Debug.Print Text WriteText = True End Function
Naturellement, c'est se priver de la facilité que fournissent les librairies spécialisées, telles que Microsoft Xml (notamment, il faudrait penser, par défaut, à encoder en UTF-8 le texte en sortie vers le fichier).
François Picalausa
On Sep 30, 3:41 pm, tking <th...@w.e> wrote:
Bonjour,
j'ai trouvé un code en C++ que j'aimerais adapter en vb, mais j'ai
beaucoup de difficultés avec treeview.
<snip>
Je ne sais pas à quoi correspond "IEnumerator ie", je galère.
Hello,
Pour ce que j'en dis, ça ressemble nettement plus à du C# qu'à du C++,
même s'il est possible d'écrire le même code en C++.
IEnumerator correspond au type IEnumVariant de COM, très employé sous
Visual Basic 6 dans les... For Each.
En VB6, la traduction de ce code serait donc, à peu près:
Private Function WriteText(Text As String) As Boolean
Debug.Print Text
WriteText = True
End Function
Private Sub parseNode(tn As Node)
Dim ctn As Node
Dim ParentNode As String
ParentNode = tn.Text
Set ctn = tn.Child
Do While Not ctn Is Nothing
'Remarque : dans ctn.GetNodeCount(true), false
'serait plus approprié
If ctn.Children = 0 Then
WriteText ctn.Text
Else
WriteText "<" & ctn.Text & ">"
End If
If ctn.Children > 0 Then
parseNode ctn
End If
Set ctn = ctn.Next
Loop
WriteText "</" & ParentNode & ">" & vbCrLf
End Sub
Cela étant, ce code est faux et ne fera pas ce qu'il est sencé faire
(tout le ferait - si je l'ai bien compris - le code original).
Pour diverses raisons, il serait plus adéquat de définir le code
différemment de sorte à produire un output plus facilement lisible,
plus extensible et surtout compatible xml.
Voici un exemple de code dans cette optique:
Private Function XmlEscapestring(Text As String) As String
XmlEscapestring = Text
XmlEscapestring = Replace(XmlEscapestring, "&", "&")
XmlEscapestring = Replace(XmlEscapestring, "<", "<")
XmlEscapestring = Replace(XmlEscapestring, ">", ">")
End Function
Private Sub NodeToXml(BaseNode As Node, Optional Recurse As Boolean =
True, Optional PerformDeclaration As Boolean = True, Optional Encoding
As String)
Dim ChildNode As Node
If (Not BaseNode Is Nothing) Then
'Ajoute la déclaration XML
If PerformDeclaration Then
If LenB(Encoding) = 0 Then
WriteText "<?xml version=""1.0""?>"
Else
WriteText "<?xml version=""1.0"" encoding=""" &
Encoding & """?>"
End If
End If
If ((Not Recurse) Or (BaseNode.Children = 0)) Then
WriteText "/>"
Else
WriteText ">"
Set ChildNode = BaseNode.Child
While Not ChildNode Is Nothing
NodeToXml ChildNode, True, False, vbNullString
Set ChildNode = ChildNode.Next
Wend
WriteText "</treenode>"
End If
End If
End Sub
Private Function WriteText(Text As String) As Boolean
'Penser à encoder correctement le fichier
Debug.Print Text
WriteText = True
End Function
Naturellement, c'est se priver de la facilité que fournissent les
librairies spécialisées, telles que Microsoft Xml (notamment, il
faudrait penser, par défaut, à encoder en UTF-8 le texte en sortie
vers le fichier).
j'ai trouvé un code en C++ que j'aimerais adapter en vb, mais j'ai beaucoup de difficultés avec treeview.
<snip>
Je ne sais pas à quoi correspond "IEnumerator ie", je galère.
Hello,
Pour ce que j'en dis, ça ressemble nettement plus à du C# qu'à du C++, même s'il est possible d'écrire le même code en C++.
IEnumerator correspond au type IEnumVariant de COM, très employé sous Visual Basic 6 dans les... For Each. En VB6, la traduction de ce code serait donc, à peu près: Private Function WriteText(Text As String) As Boolean Debug.Print Text WriteText = True End Function
Private Sub parseNode(tn As Node) Dim ctn As Node Dim ParentNode As String ParentNode = tn.Text
Set ctn = tn.Child Do While Not ctn Is Nothing 'Remarque : dans ctn.GetNodeCount(true), false 'serait plus approprié If ctn.Children = 0 Then WriteText ctn.Text Else WriteText "<" & ctn.Text & ">" End If
If ctn.Children > 0 Then parseNode ctn End If
Set ctn = ctn.Next Loop
WriteText "</" & ParentNode & ">" & vbCrLf End Sub
Cela étant, ce code est faux et ne fera pas ce qu'il est sencé faire (tout le ferait - si je l'ai bien compris - le code original). Pour diverses raisons, il serait plus adéquat de définir le code différemment de sorte à produire un output plus facilement lisible, plus extensible et surtout compatible xml. Voici un exemple de code dans cette optique: Private Function XmlEscapestring(Text As String) As String XmlEscapestring = Text XmlEscapestring = Replace(XmlEscapestring, "&", "&") XmlEscapestring = Replace(XmlEscapestring, "<", "<") XmlEscapestring = Replace(XmlEscapestring, ">", ">") End Function
Private Sub NodeToXml(BaseNode As Node, Optional Recurse As Boolean = True, Optional PerformDeclaration As Boolean = True, Optional Encoding As String) Dim ChildNode As Node
If (Not BaseNode Is Nothing) Then 'Ajoute la déclaration XML If PerformDeclaration Then If LenB(Encoding) = 0 Then WriteText "<?xml version=""1.0""?>" Else WriteText "<?xml version=""1.0"" encoding=""" & Encoding & """?>" End If End If
If ((Not Recurse) Or (BaseNode.Children = 0)) Then WriteText "/>" Else WriteText ">"
Set ChildNode = BaseNode.Child
While Not ChildNode Is Nothing NodeToXml ChildNode, True, False, vbNullString Set ChildNode = ChildNode.Next Wend
WriteText "</treenode>" End If End If End Sub
Private Function WriteText(Text As String) As Boolean 'Penser à encoder correctement le fichier Debug.Print Text WriteText = True End Function
Naturellement, c'est se priver de la facilité que fournissent les librairies spécialisées, telles que Microsoft Xml (notamment, il faudrait penser, par défaut, à encoder en UTF-8 le texte en sortie vers le fichier).
François Picalausa
tking
François Picalausa avait énoncé :
(code)
François Picalausa
Merci beaucoup pour cette réponse detaillée, parfait pour moi.
Bonne soirée.
François Picalausa avait énoncé :
(code)
François Picalausa
Merci beaucoup pour cette réponse detaillée, parfait pour moi.
Merci beaucoup pour cette réponse detaillée, parfait pour moi.
Bonne soirée.
tking
François Picalausa a couché sur son écran :
Private Sub NodeToXml(BaseNode As Node, Optional Recurse As Boolean > True, Optional PerformDeclaration As Boolean = True, Optional Encoding As String)
Je n'arrive pas à appeler la fonction. Comme faire passer mon treeview dans un basenode ?
Encore merci.
François Picalausa a couché sur son écran :
Private Sub NodeToXml(BaseNode As Node, Optional Recurse As Boolean > True, Optional PerformDeclaration As Boolean = True, Optional Encoding
As String)
Je n'arrive pas à appeler la fonction. Comme faire passer mon treeview
dans un basenode ?
Private Sub NodeToXml(BaseNode As Node, Optional Recurse As Boolean > True, Optional PerformDeclaration As Boolean = True, Optional Encoding As String)
Je n'arrive pas à appeler la fonction. Comme faire passer mon treeview dans un basenode ?
Encore merci.
tking
Ok, j'ai pigé, dur dur.
Le resultat avec fonction "parseNode" est très proche de ce que je cherche :)
A+
Ok, j'ai pigé, dur dur.
Le resultat avec fonction "parseNode" est très proche de ce que je
cherche :)
Le resultat avec fonction "parseNode" est très proche de ce que je cherche :)
A+
François Picalausa
On Sep 30, 8:16 pm, tking wrote:
Ok, j'ai pigé, dur dur.
Le resultat avec fonction "parseNode" est très proche de ce que je cherche :)
A+
Hello,
Aucune des deux n'est prévue pour exporter directement le treeview (même si en réalité, il suffit d'ajouter un noeud parent au XML pour contenir chacun des enfants).
Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec l'aide de Microsoft XML (les versions 2 à 6 sont OK): Public Function TreeToXml(tvw As TreeView) As DOMDocument Dim Result As DOMDocument Dim XmlRoot As IXMLDOMElement
'Construit le document et lui ajoute un noeud de base 'nommé "treeview" Set Result = New DOMDocument
Set XmlRoot = Result.createElement("treeview") Result.appendChild XmlRoot
'Construit la liste des enfants et l'ajoute au noeud de base AddNodeToXml TreeView1.Nodes(1), Result, XmlRoot
Set TreeToXml = Result End Function
'-------------------------------------------------------------------------- ------------- ' Procedure : AddNodeToXml ' DateTime : 9/30/2007 22:12 ' Purpose : Ajoute au noeud Parent des noeuds décrivant chacun des noeuds du niveau ' du noeud n, à partir de n '-------------------------------------------------------------------------- ------------- ' Public Function AddNodeToXml(n As Node, doc As DOMDocument, Parent As IXMLDOMElement) Dim Result As DOMDocument Dim XmlElement As IXMLDOMElement
'pour chaque frère de n (et n) While (Not n Is Nothing) 'Crée un élément décrivant le noeud Set XmlElement = doc.createElement("treenode") XmlElement.setAttribute "text", n.Text 'construit les noeuds enfants AddNodeToXml n.Child, doc, XmlElement 'ajoute le noeud au parent Parent.appendChild XmlElement
'passe au frère suivant Set n = n.Next Wend End Function
Exemple d'utilisation: TreeToXml(TreeView1).save "c:toto.xml" MsgBox TreeToXml(TreeView1).xml
L'avantage d'employer un parser xml non intégré est que tout ce qui est complications d'encodage et de générer de l'xml valide n'est pas à réaliser dans l'application elle même. De même, le décodage peut être fait par MSXML.
François Picalausa
On Sep 30, 8:16 pm, tking <th...@w.e> wrote:
Ok, j'ai pigé, dur dur.
Le resultat avec fonction "parseNode" est très proche de ce que je
cherche :)
A+
Hello,
Aucune des deux n'est prévue pour exporter directement le treeview
(même si en réalité, il suffit d'ajouter un noeud parent au XML pour
contenir chacun des enfants).
Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec
l'aide de Microsoft XML (les versions 2 à 6 sont OK):
Public Function TreeToXml(tvw As TreeView) As DOMDocument
Dim Result As DOMDocument
Dim XmlRoot As IXMLDOMElement
'Construit le document et lui ajoute un noeud de base
'nommé "treeview"
Set Result = New DOMDocument
Set XmlRoot = Result.createElement("treeview")
Result.appendChild XmlRoot
'Construit la liste des enfants et l'ajoute au noeud de base
AddNodeToXml TreeView1.Nodes(1), Result, XmlRoot
Set TreeToXml = Result
End Function
'-------------------------------------------------------------------------- -------------
' Procedure : AddNodeToXml
' DateTime : 9/30/2007 22:12
' Purpose : Ajoute au noeud Parent des noeuds décrivant chacun des
noeuds du niveau
' du noeud n, à partir de n
'-------------------------------------------------------------------------- -------------
'
Public Function AddNodeToXml(n As Node, doc As DOMDocument, Parent As
IXMLDOMElement)
Dim Result As DOMDocument
Dim XmlElement As IXMLDOMElement
'pour chaque frère de n (et n)
While (Not n Is Nothing)
'Crée un élément décrivant le noeud
Set XmlElement = doc.createElement("treenode")
XmlElement.setAttribute "text", n.Text
'construit les noeuds enfants
AddNodeToXml n.Child, doc, XmlElement
'ajoute le noeud au parent
Parent.appendChild XmlElement
'passe au frère suivant
Set n = n.Next
Wend
End Function
Exemple d'utilisation:
TreeToXml(TreeView1).save "c:toto.xml"
MsgBox TreeToXml(TreeView1).xml
L'avantage d'employer un parser xml non intégré est que tout ce qui
est complications d'encodage et de générer de l'xml valide n'est pas à
réaliser dans l'application elle même. De même, le décodage peut être
fait par MSXML.
Le resultat avec fonction "parseNode" est très proche de ce que je cherche :)
A+
Hello,
Aucune des deux n'est prévue pour exporter directement le treeview (même si en réalité, il suffit d'ajouter un noeud parent au XML pour contenir chacun des enfants).
Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec l'aide de Microsoft XML (les versions 2 à 6 sont OK): Public Function TreeToXml(tvw As TreeView) As DOMDocument Dim Result As DOMDocument Dim XmlRoot As IXMLDOMElement
'Construit le document et lui ajoute un noeud de base 'nommé "treeview" Set Result = New DOMDocument
Set XmlRoot = Result.createElement("treeview") Result.appendChild XmlRoot
'Construit la liste des enfants et l'ajoute au noeud de base AddNodeToXml TreeView1.Nodes(1), Result, XmlRoot
Set TreeToXml = Result End Function
'-------------------------------------------------------------------------- ------------- ' Procedure : AddNodeToXml ' DateTime : 9/30/2007 22:12 ' Purpose : Ajoute au noeud Parent des noeuds décrivant chacun des noeuds du niveau ' du noeud n, à partir de n '-------------------------------------------------------------------------- ------------- ' Public Function AddNodeToXml(n As Node, doc As DOMDocument, Parent As IXMLDOMElement) Dim Result As DOMDocument Dim XmlElement As IXMLDOMElement
'pour chaque frère de n (et n) While (Not n Is Nothing) 'Crée un élément décrivant le noeud Set XmlElement = doc.createElement("treenode") XmlElement.setAttribute "text", n.Text 'construit les noeuds enfants AddNodeToXml n.Child, doc, XmlElement 'ajoute le noeud au parent Parent.appendChild XmlElement
'passe au frère suivant Set n = n.Next Wend End Function
Exemple d'utilisation: TreeToXml(TreeView1).save "c:toto.xml" MsgBox TreeToXml(TreeView1).xml
L'avantage d'employer un parser xml non intégré est que tout ce qui est complications d'encodage et de générer de l'xml valide n'est pas à réaliser dans l'application elle même. De même, le décodage peut être fait par MSXML.
François Picalausa
tking
Dans son message précédent, François Picalausa a écrit :
Hello,
Aucune des deux n'est prévue pour exporter directement le treeview (même si en réalité, il suffit d'ajouter un noeud parent au XML pour contenir chacun des enfants).
Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec l'aide de Microsoft XML (les versions 2 à 6 sont OK):
(code)
François Picalausa
Yes, mais j'étais à la recherche de quelque chose de facilement adaptable à un PDA (Windows Mobile), du coup est-ce que Microsoft XML va fonctionner sur un PDA ? J'ai rien trouvé à ce sujet sur Google.
Bonne soirée.
Dans son message précédent, François Picalausa a écrit :
Hello,
Aucune des deux n'est prévue pour exporter directement le treeview
(même si en réalité, il suffit d'ajouter un noeud parent au XML pour
contenir chacun des enfants).
Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec
l'aide de Microsoft XML (les versions 2 à 6 sont OK):
(code)
François Picalausa
Yes, mais j'étais à la recherche de quelque chose de facilement
adaptable à un PDA (Windows Mobile), du coup est-ce que Microsoft XML
va fonctionner sur un PDA ? J'ai rien trouvé à ce sujet sur Google.
Dans son message précédent, François Picalausa a écrit :
Hello,
Aucune des deux n'est prévue pour exporter directement le treeview (même si en réalité, il suffit d'ajouter un noeud parent au XML pour contenir chacun des enfants).
Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec l'aide de Microsoft XML (les versions 2 à 6 sont OK):
(code)
François Picalausa
Yes, mais j'étais à la recherche de quelque chose de facilement adaptable à un PDA (Windows Mobile), du coup est-ce que Microsoft XML va fonctionner sur un PDA ? J'ai rien trouvé à ce sujet sur Google.
Bonne soirée.
François Picalausa
On Oct 1, 9:31 pm, tking wrote:
Dans son message précédent, François Picalausa a écrit :
> Hello,
> Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec > l'aide de Microsoft XML (les versions 2 à 6 sont OK): (code)
Yes, mais j'étais à la recherche de quelque chose de facilement adaptable à un PDA (Windows Mobile), du coup est-ce que Microsoft XML va fonctionner sur un PDA ? J'ai rien trouvé à ce sujet sur Google.
Bonne soirée.
Hello,
Je ne sais pas si MSXML fonctionne sur PDA, mais néanoins je pense que tu devrais pouvoir te débrouiller pour "faire sans" en combinant "NodeToXml" et "TreeToXml". Il y a assez peu de code à ajouter, NodeToXml présentant les méthodes de sérialization vers xml directement et TreeToXml présentant le parcours entier de l'arbre. Il s'agit simplement de déplacer l'écriture de l'en-tête (<?xml ... ?) avant la déclaration de l'arbre, d'ajouter un noeud d'en tête (correspondant à Result.createElement("treeview")), et ensuite d'appeler NodeToXml pour chacun des noeuds de tête de l'arbre (par exemple). Je te conseille d'exécuter une fois ou deux le code en pas à pas pour être sûr de comprendre le fonctionnement des procédures proposées. Dans tout les cas, je reste bien entendu à disposition !
François
On Oct 1, 9:31 pm, tking <th...@w.e> wrote:
Dans son message précédent, François Picalausa a écrit :
> Hello,
> Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec
> l'aide de Microsoft XML (les versions 2 à 6 sont OK):
(code)
Yes, mais j'étais à la recherche de quelque chose de facilement
adaptable à un PDA (Windows Mobile), du coup est-ce que Microsoft XML
va fonctionner sur un PDA ? J'ai rien trouvé à ce sujet sur Google.
Bonne soirée.
Hello,
Je ne sais pas si MSXML fonctionne sur PDA, mais néanoins je pense que
tu devrais pouvoir te débrouiller pour "faire sans" en combinant
"NodeToXml" et "TreeToXml". Il y a assez peu de code à ajouter,
NodeToXml présentant les méthodes de sérialization vers xml
directement et TreeToXml présentant le parcours entier de l'arbre.
Il s'agit simplement de déplacer l'écriture de l'en-tête (<?xml ... ?)
avant la déclaration de l'arbre, d'ajouter un noeud d'en tête
(correspondant à Result.createElement("treeview")), et ensuite
d'appeler NodeToXml pour chacun des noeuds de tête de l'arbre (par
exemple).
Je te conseille d'exécuter une fois ou deux le code en pas à pas pour
être sûr de comprendre le fonctionnement des procédures proposées.
Dans tout les cas, je reste bien entendu à disposition !
Dans son message précédent, François Picalausa a écrit :
> Hello,
> Voici une méthode d'export du treeview (ajoutant ce noeud parent) avec > l'aide de Microsoft XML (les versions 2 à 6 sont OK): (code)
Yes, mais j'étais à la recherche de quelque chose de facilement adaptable à un PDA (Windows Mobile), du coup est-ce que Microsoft XML va fonctionner sur un PDA ? J'ai rien trouvé à ce sujet sur Google.
Bonne soirée.
Hello,
Je ne sais pas si MSXML fonctionne sur PDA, mais néanoins je pense que tu devrais pouvoir te débrouiller pour "faire sans" en combinant "NodeToXml" et "TreeToXml". Il y a assez peu de code à ajouter, NodeToXml présentant les méthodes de sérialization vers xml directement et TreeToXml présentant le parcours entier de l'arbre. Il s'agit simplement de déplacer l'écriture de l'en-tête (<?xml ... ?) avant la déclaration de l'arbre, d'ajouter un noeud d'en tête (correspondant à Result.createElement("treeview")), et ensuite d'appeler NodeToXml pour chacun des noeuds de tête de l'arbre (par exemple). Je te conseille d'exécuter une fois ou deux le code en pas à pas pour être sûr de comprendre le fonctionnement des procédures proposées. Dans tout les cas, je reste bien entendu à disposition !
François
tking
François Picalausa a présenté l'énoncé suivant :
Je te conseille d'exécuter une fois ou deux le code en pas à pas pour être sûr de comprendre le fonctionnement des procédures proposées. Dans tout les cas, je reste bien entendu à disposition !
François
C'est très aimable, c'est fou le temps que l'on peut gagner avec de l'aide. J'y retourne :)
François Picalausa a présenté l'énoncé suivant :
Je te conseille d'exécuter une fois ou deux le code en pas à pas pour
être sûr de comprendre le fonctionnement des procédures proposées.
Dans tout les cas, je reste bien entendu à disposition !
François
C'est très aimable, c'est fou le temps que l'on peut gagner avec de
l'aide. J'y retourne :)
Je te conseille d'exécuter une fois ou deux le code en pas à pas pour être sûr de comprendre le fonctionnement des procédures proposées. Dans tout les cas, je reste bien entendu à disposition !
François
C'est très aimable, c'est fou le temps que l'on peut gagner avec de l'aide. J'y retourne :)