Je m'adresse aux utilisateurs de treeview (vb 5 & 6) qui trouvent que le
déchargment des nodes est lent...
J'ai trouvé une astuce et je voudrais vous en faire part...
Pour que le déchargement soit instantané il faut détruir l'instance de
l'arbre sans détruire sa collection de nodes. Les puristes pourraient rager
mais bon... Lorsqu'un composant n'a pas les perfs escomptées, il est
nécessaire de contourner le PB...
Lorsque vous construisez votre form et que vous y insérez le treeview, que
nous nommerons MyTree, mettez 0 dans l'index et false dans visible mais
positionnez l'arbre à l'endroit exact où il devra se trouver.
Créez une procédure InitTree er une autre ClearTree.
Dans InitTree utilisez
sub InitTree
Load MyTree(1)
MyTree(1).left = MyTree(0).left
MyTree(1).top = MyTree(0).top
MyTree(1).width= MyTree(0).width
MyTree(1).height = MyTree(0).height
MyTree(1).visible = true
'**** Puis chargez le contenu
end sub
La procédure ClearTree se limitera à
sub ClearTree
Unload MyTree(1)
call InitTree
end sub
Ensuite, au lieu d'utiliser MyTree.nodes...
il vous suffira d'utiliser MyTree(1).nodes...
Ca marche très bien, si vous faites des refresh fréquents de l'arbre, ça
permet de gagner beaucoup de temps, en particulier si l'arbre comporte
beaucoup de nodes...
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
TINANT Hervé [MVP .NET]
Non seulement cette astuce n'est pas tres propre, mais ca a la limite comme tu le dis, si les perfs sont meilleurs on peut accepter, mais surtout on ne recharge que tres rarement un arbre complet, et cette "bidouille" ne permet pas de rafraichir une partie de l'arbre. Donc meme si au premier abord, l'astuce est interressante, elle me parait que peut utilisable.
Cordialement,
-- TINANT Hervé (alias Crazyht) MVP Visual C#.NET
http://www.vbfrance.com http://www.csharpfr.com
"Laurent Jordi (www.ezlogic.mc)" <inf[o]@ezlogic.mc> a écrit dans le message de news: %
Salut @ ts...
Je m'adresse aux utilisateurs de treeview (vb 5 & 6) qui trouvent que le déchargment des nodes est lent...
J'ai trouvé une astuce et je voudrais vous en faire part...
Pour que le déchargement soit instantané il faut détruir l'instance de l'arbre sans détruire sa collection de nodes. Les puristes pourraient rager mais bon... Lorsqu'un composant n'a pas les perfs escomptées, il est nécessaire de contourner le PB...
Lorsque vous construisez votre form et que vous y insérez le treeview, que nous nommerons MyTree, mettez 0 dans l'index et false dans visible mais positionnez l'arbre à l'endroit exact où il devra se trouver.
Créez une procédure InitTree er une autre ClearTree.
Dans InitTree utilisez
sub InitTree Load MyTree(1) MyTree(1).left = MyTree(0).left MyTree(1).top = MyTree(0).top MyTree(1).width= MyTree(0).width MyTree(1).height = MyTree(0).height MyTree(1).visible = true '**** Puis chargez le contenu end sub
La procédure ClearTree se limitera à sub ClearTree Unload MyTree(1) call InitTree end sub
Ensuite, au lieu d'utiliser MyTree.nodes... il vous suffira d'utiliser MyTree(1).nodes...
Ca marche très bien, si vous faites des refresh fréquents de l'arbre, ça permet de gagner beaucoup de temps, en particulier si l'arbre comporte beaucoup de nodes...
@+
LJ
Dasn la procédure InitTree, faites un load
Non seulement cette astuce n'est pas tres propre, mais ca a la limite comme
tu le dis, si les perfs sont meilleurs on peut accepter, mais surtout on ne
recharge que tres rarement un arbre complet, et cette "bidouille" ne permet
pas de rafraichir une partie de l'arbre. Donc meme si au premier abord,
l'astuce est interressante, elle me parait que peut utilisable.
Cordialement,
--
TINANT Hervé (alias Crazyht)
MVP Visual C#.NET
http://www.vbfrance.com
http://www.csharpfr.com
"Laurent Jordi (www.ezlogic.mc)" <inf[o]@ezlogic.mc> a écrit dans le message
de news: %23Gujzt0hEHA.636@TK2MSFTNGP12.phx.gbl...
Salut @ ts...
Je m'adresse aux utilisateurs de treeview (vb 5 & 6) qui trouvent que le
déchargment des nodes est lent...
J'ai trouvé une astuce et je voudrais vous en faire part...
Pour que le déchargement soit instantané il faut détruir l'instance de
l'arbre sans détruire sa collection de nodes. Les puristes pourraient
rager
mais bon... Lorsqu'un composant n'a pas les perfs escomptées, il est
nécessaire de contourner le PB...
Lorsque vous construisez votre form et que vous y insérez le treeview, que
nous nommerons MyTree, mettez 0 dans l'index et false dans visible mais
positionnez l'arbre à l'endroit exact où il devra se trouver.
Créez une procédure InitTree er une autre ClearTree.
Dans InitTree utilisez
sub InitTree
Load MyTree(1)
MyTree(1).left = MyTree(0).left
MyTree(1).top = MyTree(0).top
MyTree(1).width= MyTree(0).width
MyTree(1).height = MyTree(0).height
MyTree(1).visible = true
'**** Puis chargez le contenu
end sub
La procédure ClearTree se limitera à
sub ClearTree
Unload MyTree(1)
call InitTree
end sub
Ensuite, au lieu d'utiliser MyTree.nodes...
il vous suffira d'utiliser MyTree(1).nodes...
Ca marche très bien, si vous faites des refresh fréquents de l'arbre, ça
permet de gagner beaucoup de temps, en particulier si l'arbre comporte
beaucoup de nodes...
Non seulement cette astuce n'est pas tres propre, mais ca a la limite comme tu le dis, si les perfs sont meilleurs on peut accepter, mais surtout on ne recharge que tres rarement un arbre complet, et cette "bidouille" ne permet pas de rafraichir une partie de l'arbre. Donc meme si au premier abord, l'astuce est interressante, elle me parait que peut utilisable.
Cordialement,
-- TINANT Hervé (alias Crazyht) MVP Visual C#.NET
http://www.vbfrance.com http://www.csharpfr.com
"Laurent Jordi (www.ezlogic.mc)" <inf[o]@ezlogic.mc> a écrit dans le message de news: %
Salut @ ts...
Je m'adresse aux utilisateurs de treeview (vb 5 & 6) qui trouvent que le déchargment des nodes est lent...
J'ai trouvé une astuce et je voudrais vous en faire part...
Pour que le déchargement soit instantané il faut détruir l'instance de l'arbre sans détruire sa collection de nodes. Les puristes pourraient rager mais bon... Lorsqu'un composant n'a pas les perfs escomptées, il est nécessaire de contourner le PB...
Lorsque vous construisez votre form et que vous y insérez le treeview, que nous nommerons MyTree, mettez 0 dans l'index et false dans visible mais positionnez l'arbre à l'endroit exact où il devra se trouver.
Créez une procédure InitTree er une autre ClearTree.
Dans InitTree utilisez
sub InitTree Load MyTree(1) MyTree(1).left = MyTree(0).left MyTree(1).top = MyTree(0).top MyTree(1).width= MyTree(0).width MyTree(1).height = MyTree(0).height MyTree(1).visible = true '**** Puis chargez le contenu end sub
La procédure ClearTree se limitera à sub ClearTree Unload MyTree(1) call InitTree end sub
Ensuite, au lieu d'utiliser MyTree.nodes... il vous suffira d'utiliser MyTree(1).nodes...
Ca marche très bien, si vous faites des refresh fréquents de l'arbre, ça permet de gagner beaucoup de temps, en particulier si l'arbre comporte beaucoup de nodes...
@+
LJ
Dasn la procédure InitTree, faites un load
Guy DETIENNE
Salut ;O)
Voici une fonction (par API) que j'utilise afin de décharger tous les nodes d'un TreeView de façon très rapide :
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As _ Long, ByVal lParam As Long) As Long
Private Const TV_FIRST As Long = &H1100 Private Const TVM_GETNEXTITEM As Long = (TV_FIRST + 10) Private Const TVGN_ROOT As Long = &H0 Private Const TVM_DELETEITEM As Long = (TV_FIRST + 1) Private Const WM_SETREDRAW As Long = &HB
Public Sub fClearTreeView(ByVal tvHwnd As Long)
Dim lNodeHandle As Long ' Turn off redrawing on the Treeview for more speed improvements SendMessageLong tvHwnd, WM_SETREDRAW, False, 0
Do lNodeHandle = SendMessageLong(tvHwnd, TVM_GETNEXTITEM, TVGN_ROOT, 0) If lNodeHandle > 0 Then SendMessageLong tvHwnd, TVM_DELETEITEM, 0, lNodeHandle Else Exit Do End If Loop
SendMessageLong tvHwnd, WM_SETREDRAW, True, 0 End Sub
Utilisation :
fClearTreeView MyTreeView.Hwnd
Guy "Laurent Jordi (www.ezlogic.mc)" <inf[o]@ezlogic.mc> a écrit dans le message de news:%
Salut @ ts...
Je m'adresse aux utilisateurs de treeview (vb 5 & 6) qui trouvent que le déchargment des nodes est lent...
J'ai trouvé une astuce et je voudrais vous en faire part...
Pour que le déchargement soit instantané il faut détruir l'instance de l'arbre sans détruire sa collection de nodes. Les puristes pourraient
rager
mais bon... Lorsqu'un composant n'a pas les perfs escomptées, il est nécessaire de contourner le PB...
Lorsque vous construisez votre form et que vous y insérez le treeview, que nous nommerons MyTree, mettez 0 dans l'index et false dans visible mais positionnez l'arbre à l'endroit exact où il devra se trouver.
Créez une procédure InitTree er une autre ClearTree.
Dans InitTree utilisez
sub InitTree Load MyTree(1) MyTree(1).left = MyTree(0).left MyTree(1).top = MyTree(0).top MyTree(1).width= MyTree(0).width MyTree(1).height = MyTree(0).height MyTree(1).visible = true '**** Puis chargez le contenu end sub
La procédure ClearTree se limitera à sub ClearTree Unload MyTree(1) call InitTree end sub
Ensuite, au lieu d'utiliser MyTree.nodes... il vous suffira d'utiliser MyTree(1).nodes...
Ca marche très bien, si vous faites des refresh fréquents de l'arbre, ça permet de gagner beaucoup de temps, en particulier si l'arbre comporte beaucoup de nodes...
@+
LJ
Dasn la procédure InitTree, faites un load
Salut ;O)
Voici une fonction (par API) que j'utilise afin de décharger tous les nodes
d'un TreeView de façon très rapide :
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As _
Long, ByVal lParam As Long) As Long
Private Const TV_FIRST As Long = &H1100
Private Const TVM_GETNEXTITEM As Long = (TV_FIRST + 10)
Private Const TVGN_ROOT As Long = &H0
Private Const TVM_DELETEITEM As Long = (TV_FIRST + 1)
Private Const WM_SETREDRAW As Long = &HB
Public Sub fClearTreeView(ByVal tvHwnd As Long)
Dim lNodeHandle As Long
' Turn off redrawing on the Treeview for more speed improvements
SendMessageLong tvHwnd, WM_SETREDRAW, False, 0
Do
lNodeHandle = SendMessageLong(tvHwnd, TVM_GETNEXTITEM, TVGN_ROOT, 0)
If lNodeHandle > 0 Then
SendMessageLong tvHwnd, TVM_DELETEITEM, 0, lNodeHandle
Else
Exit Do
End If
Loop
SendMessageLong tvHwnd, WM_SETREDRAW, True, 0
End Sub
Utilisation :
fClearTreeView MyTreeView.Hwnd
Guy
"Laurent Jordi (www.ezlogic.mc)" <inf[o]@ezlogic.mc> a écrit dans le message
de news:%23Gujzt0hEHA.636@TK2MSFTNGP12.phx.gbl...
Salut @ ts...
Je m'adresse aux utilisateurs de treeview (vb 5 & 6) qui trouvent que le
déchargment des nodes est lent...
J'ai trouvé une astuce et je voudrais vous en faire part...
Pour que le déchargement soit instantané il faut détruir l'instance de
l'arbre sans détruire sa collection de nodes. Les puristes pourraient
rager
mais bon... Lorsqu'un composant n'a pas les perfs escomptées, il est
nécessaire de contourner le PB...
Lorsque vous construisez votre form et que vous y insérez le treeview, que
nous nommerons MyTree, mettez 0 dans l'index et false dans visible mais
positionnez l'arbre à l'endroit exact où il devra se trouver.
Créez une procédure InitTree er une autre ClearTree.
Dans InitTree utilisez
sub InitTree
Load MyTree(1)
MyTree(1).left = MyTree(0).left
MyTree(1).top = MyTree(0).top
MyTree(1).width= MyTree(0).width
MyTree(1).height = MyTree(0).height
MyTree(1).visible = true
'**** Puis chargez le contenu
end sub
La procédure ClearTree se limitera à
sub ClearTree
Unload MyTree(1)
call InitTree
end sub
Ensuite, au lieu d'utiliser MyTree.nodes...
il vous suffira d'utiliser MyTree(1).nodes...
Ca marche très bien, si vous faites des refresh fréquents de l'arbre, ça
permet de gagner beaucoup de temps, en particulier si l'arbre comporte
beaucoup de nodes...
Voici une fonction (par API) que j'utilise afin de décharger tous les nodes d'un TreeView de façon très rapide :
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As _ Long, ByVal lParam As Long) As Long
Private Const TV_FIRST As Long = &H1100 Private Const TVM_GETNEXTITEM As Long = (TV_FIRST + 10) Private Const TVGN_ROOT As Long = &H0 Private Const TVM_DELETEITEM As Long = (TV_FIRST + 1) Private Const WM_SETREDRAW As Long = &HB
Public Sub fClearTreeView(ByVal tvHwnd As Long)
Dim lNodeHandle As Long ' Turn off redrawing on the Treeview for more speed improvements SendMessageLong tvHwnd, WM_SETREDRAW, False, 0
Do lNodeHandle = SendMessageLong(tvHwnd, TVM_GETNEXTITEM, TVGN_ROOT, 0) If lNodeHandle > 0 Then SendMessageLong tvHwnd, TVM_DELETEITEM, 0, lNodeHandle Else Exit Do End If Loop
SendMessageLong tvHwnd, WM_SETREDRAW, True, 0 End Sub
Utilisation :
fClearTreeView MyTreeView.Hwnd
Guy "Laurent Jordi (www.ezlogic.mc)" <inf[o]@ezlogic.mc> a écrit dans le message de news:%
Salut @ ts...
Je m'adresse aux utilisateurs de treeview (vb 5 & 6) qui trouvent que le déchargment des nodes est lent...
J'ai trouvé une astuce et je voudrais vous en faire part...
Pour que le déchargement soit instantané il faut détruir l'instance de l'arbre sans détruire sa collection de nodes. Les puristes pourraient
rager
mais bon... Lorsqu'un composant n'a pas les perfs escomptées, il est nécessaire de contourner le PB...
Lorsque vous construisez votre form et que vous y insérez le treeview, que nous nommerons MyTree, mettez 0 dans l'index et false dans visible mais positionnez l'arbre à l'endroit exact où il devra se trouver.
Créez une procédure InitTree er une autre ClearTree.
Dans InitTree utilisez
sub InitTree Load MyTree(1) MyTree(1).left = MyTree(0).left MyTree(1).top = MyTree(0).top MyTree(1).width= MyTree(0).width MyTree(1).height = MyTree(0).height MyTree(1).visible = true '**** Puis chargez le contenu end sub
La procédure ClearTree se limitera à sub ClearTree Unload MyTree(1) call InitTree end sub
Ensuite, au lieu d'utiliser MyTree.nodes... il vous suffira d'utiliser MyTree(1).nodes...
Ca marche très bien, si vous faites des refresh fréquents de l'arbre, ça permet de gagner beaucoup de temps, en particulier si l'arbre comporte beaucoup de nodes...