1 (изменено: Mat Skywalker, 2012-04-24 08:58:23)

Тема: VBS, Jscript, HTA, ActiveX. Рекурсивная генерация дерева TreeView

Опять я со своими заморочками. Пилил я тему отображения treeview в HTA приложении.
Задача была такая, есть таблица из 3-х столбцов:
ИД | ИД родителя | Наименование
Нужно построить из него дерево.
Пробовал так:


Set objRecordset = SQLConn.Execute(SQLstr)' Строим список первого уровня
TreeView.Nodes.Clear()
While Not objRecordset.EOF
if objRecordset.Fields(2).Value = 1 then
set Node = TreeView.Nodes.Add(,,"First")
with Node
   Node.Text = objRecordset.Fields(3).Value
   Node.key = "n"+cstr(objRecordset.Fields(0).Value) ' Заполняем
end with
end if
objRecordset.MoveNext
Wend

Код выполняется и список получается. Но не получается добавить туда ветки. http://forum.script-coding.com/viewtopic.php?id=1219 - тут вроде все понятно, но заставить генерировать дерево не получилось. Максимальная глубина вложения дерева 5 элементов. Т.е. можно написать в программе 5 раз заполнение листов дерева. Но как добавить листы не знаю.

Автоматизирую торговлю. Не 1С

2

Re: VBS, Jscript, HTA, ActiveX. Рекурсивная генерация дерева TreeView

Не получается даже без цикла добавлять ветки.

Автоматизирую торговлю. Не 1С

3

Re: VBS, Jscript, HTA, ActiveX. Рекурсивная генерация дерева TreeView

Почему свойство Parent не используете?

4

Re: VBS, Jscript, HTA, ActiveX. Рекурсивная генерация дерева TreeView

HTA:

<HTML>
<HEAD>
<META content = "TEXT/HTML; charset=Windows-1251">
<TITLE>Пример TreeView в HTA</TITLE>
</HEAD>
<BODY>
<FORM ID = mForm>
<TABLE style = width:100%>
<TR><TD style = width:30%>
<OBJECT ID = ExampleTreeView WIDTH = 600 HEIGHT = 400 PROGID = "MSComctlLib.TreeCtrl.2" CLASSID="clsid:C74190B6-8589-11D1-B16A-00C0F0283628">
    <param name = "LineStyle" value = "1" />
    <param name = "Style" value = "7" />
    <param name = "Appearance" value = "0"/>
    <param name = "BorderStyle" value = "1"/>
</OBJECT>
</TD>
<TD>
<INPUT type = "button" name = "fill" value = "Заполнить ...">
</TD></TR>
</TABLE>
</FORM>
<SCRIPT for = ExampleTreeView event = NodeClick>
    document.title=mForm.all("ExampleTreeView").SelectedItem.FullPath;
</SCRIPT>
<SCRIPT language = "JScript">
Enumerator.prototype.toArray = function ()
{
    var Result = [];
    for (;!this.atEnd();this.moveNext())
    Result.push(this.item())
    return Result;
}

var fso = new ActiveXObject("Scripting.FileSystemObject");

function GetSubFolders(Path) // return Array
{
    var F=fso.GetFolder(Path);
    return new Enumerator(F.SubFolders).toArray();
}

var WSH = new ActiveXObject("WScript.Shell");

function filltreeview()
{
    var TreeView = mForm.all("ExampleTreeView");
    TreeView.Nodes.Clear();
 
var nodes = GetSubFolders("C:\\");
var index=0;

for (var i=0, l=nodes.length; i<l;i++)
{
    var node = TreeView.Nodes.Add();
    node.Text = nodes[i].Name;
    node.key = "key"+index++;
    node.selected = true;
    
    var childs = GetSubFolders(nodes[i].Path);
    for (var j=0, k=childs.length;j<k;j++)
    {
        var subnode = TreeView.Nodes.Add();
        subnode.Text = childs[j].Name;
        subnode.key = "key"+index++;
        subnode.selected = false;
        subnode.Parent = node;
    }
    node.Expanded = false;
}
};

//Реакция на события
mForm.all("fill").onclick = filltreeview

</SCRIPT>
</BODY>
</HTML>