1

Тема: Проблема с методом CreateListView объекта WindowSystemObject

Пытаюсь написать простенький файловый менеджер, используя объект WindowSystemObject, метод CreateListView позволяет создать нужные поля для вывода в них информации. Но при попытки заполнить поля, информация в них не отображается. В документации по WSO толком ничего не нашел, вот код:



wso = new ActiveXObject("Scripting.WindowSystemObject")
FSO = new ActiveXObject("Scripting.FileSystemObject")

f = wso.CreateForm(0,0,0,0)

f.Text = "Файловый менеджер"    //Заголовок
f.ClientWidth = 600
f.ClientHeight = 460
f.CenterControl()    //Центировать

//Верхний фрейм
t = f.CreateFrame(0,0,0,30)
t.Align = wso.Translate("AL_TOP")

//Нижний фрейм
t = f.CreateFrame(0,0,0,30)
t.Align = wso.Translate("AL_BOTTOM")

//Общая сплит панель
z = f.CreateSplitPanel(0,0,0,0,false)
//Во все окно
z.Align = wso.Translate("AL_CLIENT")
//Встроенная сплит панель
s = z.CreateSplitPanel(0,0,0,0,true)

//Фрейм для общей сплит панели
t = CreateFrameL()
s.Width = 300

//Фрейм для встенной сплит панели
a = CreateFrameR()

//Размер по умолчанию
s.DefaultSplit = 0.5

ReadDir(ListViewL)
ReadDir(ListViewR)

function CreateFrameL(){
    t = z.CreateFrame(0,0,300,0)
    t.Name="L"    
    ListViewL = t.CreateListView(0,0,300,300,wso.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"))
    ListViewL.Columns.Add("Имя",100)
    ListViewL.Columns.Add("Тип",50)
    ListViewL.Columns.Add("Размер",100)
    ListViewL.Columns.Add("Дата",100)
    ListViewL.Columns.Add("Атрибуты",50)
    ListViewL.GridLines = true
    ListViewL.RowSelect = true
    ListViewL.Align = wso.Translate("AL_CLIENT")
    return t;
}

function CreateFrameR(){
    a = s.CreateFrame(0,0,300,0)
    a.Name="R"    
    ListViewR = a.CreateListView(0,0,300,300,wso.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"))
    ListViewR.Columns.Add("Имя",100)
    ListViewR.Columns.Add("Тип",50)
    ListViewR.Columns.Add("Размер",100)
    ListViewR.Columns.Add("Дата",100)
    ListViewR.Columns.Add("Атрибуты",50)
    ListViewR.GridLines = true
    ListViewR.RowSelect = true
    ListViewR.Align = wso.Translate("AL_CLIENT")
    return a;
}

function CurrentDir() {
var curD
    curD = WScript.ScriptFullName; 
    curD = curD.substring(0,curD.lastIndexOf("\\")+1); 
    return curD 
}

//Считываем список папок
function ReadDir(panel){
var subf, SubFolders, GetSub    
    panel.BeginUpdate()
    panel.Clear()
    subf = FSO.GetFolder(CurrentDir())
    
    ListViewL.Count = subf.SubFolders.Count
    SubFolders = new Enumerator(subf.SubFolders); 
    for (; !SubFolders.atEnd(); SubFolders.moveNext()) {    
        GetSub = FSO.GetFileName(SubFolders.item())
        panel.Add(GetSub)
    }        
    ListViewL.EndUpdate()
}

f.Show()
wso.Run()

В чем ошибка? В примерах по WSO фигурирует свойство OnData - Свойство позволяет задать обработчик события OnData через 2-й уровень. А как, что и к чему не описано.

2

Re: Проблема с методом CreateListView объекта WindowSystemObject

Проблема решилась, в строке


ListViewL = t.CreateListView(0,0,300,300,wso.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"))

Надо было убрать LVS_OWNERDATA

3

Re: Проблема с методом CreateListView объекта WindowSystemObject

Флаг LVS_OWNERDATA, оно же свойство OwnerData, означает, что ListView не будет хранить в своих внутренних структурах данные отображаемые в ячейках. Заботу о хранении и предоставлении данных для отображения в ячейках берём на себя. Это очень удобно если данные часто меняются. Задаём через "ListView.Columns" список колонок, через "ListView.Count" меняем количество строк (при добавлении - увеличиваем).
Когда для той или иной ячейки потребуется отрисовка/перерисовка будет вызвано событие ListView "OnData".


// sender - сам ListView
// item - элементы строки таблицы в ListView
ListView.OnData = function (sender, item)
{
   sender.BeginUpdate(); // начинаем обновление

   item.Index; // индекс строки с нуля
   
   item.Text = ...; // значение первого столбца, 
                    // лучше использовать для нумеровки: item.Text = item.Index + 1;
      
    item.SubItems(... /*от 0 до Columns.Count - 2*/) = ...; // значения последующих столбцов
        
   sender.EndUpdate(); // заканчиваем обновление
};

Нужно учесть, что OnData будет вызываться при каждой перерисовке ячейки.
Когда установлен флаг LVS_OWNERDATA, код "panel.Add(GetSub)" по сути ничего не делает.

В справке это не очевидно, но если прочитать все вводные и пояснения становится ясней.
Смотреть нужно раздел "ListViewEvents" ("Интерфейс ListViewEvents") в разделе "Классы" ("WSO 1.1 Классы").
В разделе "Классы" более подробно описаны события различных компонентов.
В разделе "ListViewEvents" ("Интерфейс ListViewEvents") есть ссылка на "виртуальный режим" компонента ListView.

Цитаты:

OnData  ( [in] IDispatch *  Sender,  [in] IDispatch *  Item  ) 
 
Событие возникает когда компоненту требуется информация об элементе в виртуальном режиме.

Аргументы:
Sender -  объект который вызвал обработчик события 
Item -  элемент для которого запрашивается информация, исходя из значения его свойства Index можно задать его текст и изображение.

VARIANT_BOOL RW OwnerData 

Свойство определяет нахождение компонента в виртуальном режиме.

Если значение этого свойства - "TRUE" то компонент не хранит данные об элементах: текст и индексы изображений. Количество элементов устанавливается через свойство Count. Когда компоненту требуется информация об элементе для его отображения он вызывает обработчик события OnData для получения информации об элементе.

Значение по умолчанию: "FALSE".

4

Re: Проблема с методом CreateListView объекта WindowSystemObject

fomenos, не в тему, но здесь, во втором посте, альтернативный взгляд на проблему...

5

Re: Проблема с методом CreateListView объекта WindowSystemObject

Уважаемые коллеги, вот собственно написал простенький пример файлового менеджера, пока только начало, но, РАБОТАЕТ, переход по папка тоже идет:


wso = new ActiveXObject("Scripting.WindowSystemObject")
FSO = new ActiveXObject("Scripting.FileSystemObject")

f = wso.CreateForm(0,0,0,0)

f.Text = "Файловый менеджер"    //Заголовок
f.ClientWidth = 600
f.ClientHeight = 460
f.CenterControl()    //Центировать

//Верхний фрейм
t = f.CreateFrame(0,0,0,30)
t.Align = wso.Translate("AL_TOP")

//Нижний фрейм
t = f.CreateFrame(0,0,0,30)
t.Align = wso.Translate("AL_BOTTOM")

//Общая сплит панель
z = f.CreateSplitPanel(0,0,0,0,false)
//Во все окно
z.Align = wso.Translate("AL_CLIENT")
//Встроенная сплит панель
s = z.CreateSplitPanel(0,0,0,0,true)

//Фрейм для общей сплит панели
t = CreateFrameL()
s.Width = 300

//Фрейм для встенной сплит панели
a = CreateFrameR()

//Размер по умолчанию
s.DefaultSplit = 0.5

//ReadDir(ListViewL)
//ReadDir(ListViewL)
CreateListL(ListViewL, CurrentDir())
CreateListR(ListViewR, CurrentDir())

function CreateFrameL(){
    t = z.CreateFrame(0,0,300,0)
    t.Name="L"    
    ListViewL = t.CreateListView(0,0,300,300,wso.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"))
    
    ListViewL.OnDblClick = ControlDblClickL
    
    ColumA = ListViewL.Columns.Add("Имя",100)
    ColumA.DataType = 1
    
    ColumB = ListViewL.Columns.Add("Тип",50)
    ColumB.DataType = 1
    
    ColumC = ListViewL.Columns.Add("Размер",100)
    ColumC.DataType = 2
    
    ColumD = ListViewL.Columns.Add("Дата",100)
    ColumD.DataType = 1
    
    ColumF = ListViewL.Columns.Add("Атрибуты",50)
    ColumF.DataType = 1
    
    ListViewL.GridLines = true
    ListViewL.RowSelect = true
    ListViewL.ReadOnly = false
    ListViewL.Align = wso.Translate("AL_CLIENT")
    
    ListViewL.OnData = ListViewOnDataL
    return t;
}

WList = null
WData = []

function CreateFrameR(){
    a = s.CreateFrame(0,0,300,0)
    a.Name="R"    
    ListViewR = a.CreateListView(0,0,300,300,wso.Translate("LVS_REPORT  | LVS_OWNERDATA | LVS_SHOWSELALWAYS"))
    
    ListViewR.OnDblClick = ControlDblClickR
    
    ColumA = ListViewR.Columns.Add("Имя",100)
    ColumA.DataType = 1
    
    ColumB = ListViewR.Columns.Add("Тип",50)
    ColumB.DataType = 1
    
    ColumC = ListViewR.Columns.Add("Размер",100)
    ColumC.DataType = 2
    
    ColumD = ListViewR.Columns.Add("Дата",100)
    ColumD.DataType = 1
    
    ColumF = ListViewR.Columns.Add("Атрибуты",50)
    ColumF.DataType = 1
    ListViewR.GridLines = true
    ListViewR.RowSelect = true
    ListViewR.Align = wso.Translate("AL_CLIENT")
    
    ListViewR.OnData = ListViewOnDataR
    return a;
}

function ListViewOnDataL(Sender,Item){
var i, WData,
    i = Item.Index
    WData = DataL[i]
    Item.Text = WData.Name
    Item.SubItems(0) = WData.Ext
    Item.SubItems(1) = WData.Size
    Item.SubItems(2) = WData.Date
    Item.SubItems(3) = WData.Attrib
}

function ListViewOnDataR(Sender,Item){
var i, WData,
    i = Item.Index
    WData = DataR[i]
    Item.Text = WData.Name
    Item.SubItems(0) = WData.Ext
    Item.SubItems(1) = WData.Size
    Item.SubItems(2) = WData.Date
    Item.SubItems(3) = WData.Attrib
}

function CreateListL(panel,CurDir){
var CountList, i, WObject
    panel.Clear()
    DataL = []
    CountList = null
    subf = FSO.GetFolder(CurDir)
    
    SubFolders = new Enumerator(subf.SubFolders); 
    CountList = subf.SubFolders.Count
    
    //WObject = new Object()
    //WObject.Panel = panel
    //Data.push(WObject)
    
    //Проверка, если папка не является корневой
    if (FSO.GetParentFolderName(CurDir)!=""){
        CountList+=1
        WObject = new Object()
        
        
        WObject.Name = ".."
        WObject.Ext = ""
        WObject.Size = ""
        WObject.Date = ""
        WObject.Attrib = ""
        
        WObject.Path = CurDir
        
        
        DataL.push(WObject)
    }
    //panel.Add("..")
    
    //Получение списка папок
    for (; !SubFolders.atEnd(); SubFolders.moveNext()) {    
        GetSub = FSO.GetFileName(SubFolders.item())
        
        GetPath = SubFolders.item()
        
        GetExt = ""
        GetName = "Папка"
        GetDate = SubFolders.item().DateCreated
        GetAttrib = ""
        
        WObject = new Object()
        WObject.Name = GetSub
        WObject.Ext = GetExt
        WObject.Size = GetName
        WObject.Date = GetDate
        WObject.Attrib = GetAttrib
        WObject.Path = GetPath
        
        DataL.push(WObject)
    }    
    
    SubFiles = new Enumerator(subf.Files); 
    CountList+= subf.Files.Count
    
    //Получение списка файлов
    for (; !SubFiles.atEnd(); SubFiles.moveNext()) {    
        GetFile = FSO.GetBaseName(SubFiles.item())
        
        GetPath = SubFiles.item()
        
        GetExt = FSO.GetExtensionName(SubFiles.item())
        GetName = SubFiles.item().Size
        GetDate = SubFiles.item().DateCreated
        GetAttrib = ""
        
        
        attrib = SubFiles.item().Attributes;
        if ((attrib & 0x01) != 0)            // Это атрибут "только для чтения".
            GetAttrib+= "r"; 
        if ((attrib & 0x02) != 0)            // Это атрибут "скрытый".
            GetAttrib+= "h"; 
        if ((attrib & 0x04) != 0)            // Это атрибут "системный".
            GetAttrib+="s" ; 
        if ((attrib & 0x20) != 0)            // Это атрибут "архивный".
            GetAttrib+="a"; 
        if ((attrib & 0x800) != 0)          // Это атрибут "сжатый" (Windows NT).
            GetAttrib+="c";
        
        WObject = new Object()
        WObject.Name = GetFile
        WObject.Ext = GetExt
        WObject.Size = GetName
        WObject.Date = GetDate
        WObject.Attrib = GetAttrib
        WObject.Path = GetPath
        
        DataL.push(WObject)
    }    
    panel.Count = CountList
}

function CreateListR(panel,CurDir){
var CountList, i, WObject
    panel.Clear()
    DataR = []
    CountList = null
    subf = FSO.GetFolder(CurDir)
    
    SubFolders = new Enumerator(subf.SubFolders); 
    CountList = subf.SubFolders.Count
    
    //WObject = new Object()
    //WObject.Panel = panel
    //Data.push(WObject)
    
    //Проверка, если папка не является корневой
    if (FSO.GetParentFolderName(CurDir)!=""){
        CountList+=1
        WObject = new Object()
        
        WObject.Name = ".."
        WObject.Ext = ""
        WObject.Size = ""
        WObject.Date = ""
        WObject.Attrib = ""
        
        WObject.Path = CurDir
        
        
        DataR.push(WObject)
    }
    //panel.Add("..")
    
    //Получение списка папок
    for (; !SubFolders.atEnd(); SubFolders.moveNext()) {    
        GetSub = FSO.GetFileName(SubFolders.item())
        
        GetPath = SubFolders.item()
        
        GetExt = ""
        GetName = "Папка"
        GetDate = SubFolders.item().DateCreated
        GetAttrib = ""
        
        WObject = new Object()
        WObject.Name = GetSub
        WObject.Ext = GetExt
        WObject.Size = GetName
        WObject.Date = GetDate
        WObject.Attrib = GetAttrib
        WObject.Path = GetPath
        
        DataR.push(WObject)
    }    
    
    SubFiles = new Enumerator(subf.Files); 
    CountList+= subf.Files.Count
    
    //Получение списка файлов
    for (; !SubFiles.atEnd(); SubFiles.moveNext()) {    
        GetFile = FSO.GetBaseName(SubFiles.item())
        
        GetPath = SubFiles.item()
        
        GetExt = FSO.GetExtensionName(SubFiles.item())
        GetName = SubFiles.item().Size
        GetDate = SubFiles.item().DateCreated
        GetAttrib = ""
        
        
        attrib = SubFiles.item().Attributes;
        if ((attrib & 0x01) != 0)            // Это атрибут "только для чтения".
            GetAttrib+= "r"; 
        if ((attrib & 0x02) != 0)            // Это атрибут "скрытый".
            GetAttrib+= "h"; 
        if ((attrib & 0x04) != 0)            // Это атрибут "системный".
            GetAttrib+="s" ; 
        if ((attrib & 0x20) != 0)            // Это атрибут "архивный".
            GetAttrib+="a"; 
        if ((attrib & 0x800) != 0)          // Это атрибут "сжатый" (Windows NT).
            GetAttrib+="c";
        
        WObject = new Object()
        WObject.Name = GetFile
        WObject.Ext = GetExt
        WObject.Size = GetName
        WObject.Date = GetDate
        WObject.Attrib = GetAttrib
        WObject.Path = GetPath
        
        DataR.push(WObject)
    }    
    panel.Count = CountList
}



function CurrentDir() {
var curD
    curD = WScript.ScriptFullName; 
    curD = curD.substring(0,curD.lastIndexOf("\\")+1); 
    return curD 
}


function ControlDblClickL(Sender,x,y,Button,Flags){
var wd, wdpath;

//tt = Sender.item(Sender.ItemIndex)
    wd = DataL[Sender.ItemIndex]
    if (wd.Name=="..")
        CreateListL(ListViewL,FSO.GetParentFolderName(wd.Path))
    else
        if (FSO.FolderExists(wd.Path)) 
            CreateListL(ListViewL,wd.Path)
        
        
        //WScript.Echo(wd.Path)
}

function ControlDblClickR(Sender,x,y,Button,Flags){
var wd, tt, value, ii;

//tt = Sender.item(Sender.ItemIndex)
    wd = DataR[Sender.ItemIndex]
    if (wd.Name=="..")
        CreateListR(ListViewR,FSO.GetParentFolderName(wd.Path))
    else
        if (FSO.FolderExists(wd.Path)) 
            CreateListR(ListViewR,wd.Path)
}



f.Show()
wso.Run()

6

Re: Проблема с методом CreateListView объекта WindowSystemObject

С точки зрения программирования, код написан правильно или все таки коряво?

7 (изменено: Rumata, 2013-05-03 10:35:00)

Re: Проблема с методом CreateListView объекта WindowSystemObject

Хаотическое использование завершения строк символом "точка-с-запятой".
Переменные объявлены абы как - часть объявлена, другая - нет.

И вот еще:

C:\tmp>cscript z.js
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.

C:\tmp\z.js(1, 1) Microsoft JScript runtime error: Automation server can't create object


C:\tmp>ver

Microsoft Windows [Version 6.0.6002]

( 2 * b ) || ! ( 2 * b )

8 (изменено: max7, 2013-05-04 05:10:42)

Re: Проблема с методом CreateListView объекта WindowSystemObject

fomenos пишет:

С точки зрения программирования, код написан правильно или все таки коряво?

По вашему "стилю" похоже вы учились писать на паскале или бэйсике - разучивайтесь!
Итак, если не делать классы, то вот более-менее внятный пример.



/* WSO, FSO ******************************************************* */
var WSO = new ActiveXObject("Scripting.WindowSystemObject");
var FSO = new ActiveXObject("Scripting.FileSystemObject");
/* WSO, FSO ******************************************************* */


/* Главная форма ************************************************** */
var main_form = WSO.CreateForm(0, 0, 0, 0);
with(main_form)
{
   Text = "Файловый менеджер";
   ClientWidth = 800;
   ClientHeight = 460;
   CenterControl();
}
/* Главная форма ************************************************** */


/* Верхний фрейм ************************************************** */
var top_frame = main_form.CreateFrame(0, 0, 0, 30);
top_frame.Align = WSO.Translate("AL_TOP");
/* Верхний фрейм ************************************************** */


/* Нижний фрейм *************************************************** */
var bottom_frame = main_form.CreateFrame(0, 0, 0, 30);
bottom_frame.Align = WSO.Translate("AL_BOTTOM");
/* Нижний фрейм *************************************************** */


/* Сплит панель *************************************************** */
var split_panel = main_form.CreateSplitPanel(0, 0, 0, 0, false);
split_panel.Align = WSO.Translate("AL_CLIENT");
/* Сплит панель *************************************************** */


/* CreateListView ************************************************* */
function fill_data_array(data_array, cur_dir)
{
   var cur_fld_obj = FSO.GetFolder(cur_dir);
   
   data_array.length = 0; // !!!!!
    
   //Проверка, если папка не является корневой
   if (FSO.GetParentFolderName(cur_dir) != "")
   {
      data_array.push(
      {
         name:  "..",
         ext:   "",
         size:  "",
         date:  "",
         attr:  "",
         path:  cur_dir,
         isfld: null
      });
   }
    
   if(cur_fld_obj.SubFolders.Count > 0)
   {
      for (var sub_flds_enum = new Enumerator(cur_fld_obj.SubFolders); 
           !sub_flds_enum.atEnd(); 
           sub_flds_enum.moveNext()) 
      {    
         var item = sub_flds_enum.item();
           
         data_array.push(
         {
            name:  FSO.GetFileName(item),
            ext:   "",
            size:  "Папка",
            date:  item.DateCreated,
            attr:  "",
            path:  item.Path,
            isfld: true
         });
      }
   }
   
   if(cur_fld_obj.Files.Count > 0)
   {
      for (var files_enum = new Enumerator(cur_fld_obj.Files); 
           !files_enum.atEnd(); 
           files_enum.moveNext()) 
      {    
         var item = files_enum.item();
         
         var attrib = item.Attributes;
         var attr_str =
         [
            ((attrib & 0x001) ? "r" : "-"),
            ((attrib & 0x002) ? "h" : "-"),
            ((attrib & 0x004) ? "s" : "-"),
            ((attrib & 0x020) ? "a" : "-"),
            ((attrib & 0x800) ? "c" : "-")
         ].join("");
           
         data_array.push(
         {
            name:  FSO.GetBaseName(item),
            ext:   FSO.GetExtensionName(item),
            size:  item.Size,
            date:  item.DateCreated,
            attr:  attr_str,
            path:  item.Path,
            isfld: false
         });
      }
   }
};

var def_columns = 
[
   { name: "Имя",      width: 100, type: 1, 
     set_data: function(item, data) { item.Text = data.name;        } },
     
   { name: "Тип",      width:  50, type: 1, 
     set_data: function(item, data) { item.SubItems(0) = data.ext;  } },
     
   { name: "Размер",   width: 100, type: 1, 
     set_data: function(item, data) { item.SubItems(1) = data.size; } },
     
   { name: "Дата",     width: 100, type: 1, 
     set_data: function(item, data) { item.SubItems(2) = data.date; } },
     
   { name: "Атрибуты", width:  50, type: 1, 
     set_data: function(item, data) { item.SubItems(3) = data.attr; } }
];

function CreateListView(panel, name, cur_dir)
{
   var list_view_obj = panel.CreateListView( 0, 0, 0, 0, 
      WSO.Translate("LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS"));
      
   list_view_obj.GridLines = true;
   list_view_obj.RowSelect = true;
   list_view_obj.ReadOnly = false;
   list_view_obj.Align = WSO.Translate("AL_CLIENT");
   
   for(var ix = 0; ix < def_columns.length; ++ix)
   {
      var def_col = def_columns[ix];
      var column = list_view_obj.Columns.Add(def_col.name, def_col.width);
      column.DataType = def_col.type;
   }
   
   /* callbacks *************************************************** */
   var shared_data_array = [];
   
   list_view_obj.OnDblClick = function (sender, x, y, button, flags)
   {
      var wd = shared_data_array[sender.ItemIndex];
      
      if(wd.isfld === null)
      {
         fill_data_array(shared_data_array, FSO.GetParentFolderName(wd.path));
         
         list_view_obj.Count = shared_data_array.length; // !!!!!
      }
      else if(wd.isfld)
      {
         fill_data_array(shared_data_array, wd.path);
         
         list_view_obj.Count = shared_data_array.length; // !!!!!
      }
   };
    
   list_view_obj.OnData = function (sender, item)
   {
      sender.BeginUpdate();
      
      var data = shared_data_array[item.Index];
      
      for(var ix = 0; ix < def_columns.length; ++ix)
      {
         def_columns[ix].set_data(item, data);
      }
      
      sender.EndUpdate();
   };
   /* callbacks *************************************************** */
   
   fill_data_array(shared_data_array, cur_dir);
   
   list_view_obj.Count = shared_data_array.length; // !!!!!
   
   return ({data_array: shared_data_array, list_view: list_view_obj});
}; 
/* CreateListView ************************************************* */


/* L and R ******************************************************** */
var cur_dir = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.lastIndexOf("\\") + 1);

CreateListView( split_panel, "L", cur_dir );
CreateListView( split_panel, "R", cur_dir );
split_panel.DefaultSplit = 0.5;
/* L and R ******************************************************** */


/* Start ********************************************************** */
main_form.Show();
WSO.Run();
/* Start ********************************************************** */

9

Re: Проблема с методом CreateListView объекта WindowSystemObject

Rumata пишет:

... И вот еще:

...
Automation server can't create object
...

А есть ли у нас зарегистрированный "Scripting.WindowSystemObject", а?

10 (изменено: fomenos, 2013-05-07 02:40:18)

Re: Проблема с методом CreateListView объекта WindowSystemObject

Scripting.WindowSystemObject - данный компонент у меня зарегистрирован, поэтому проверки на его присутствие я не делаю. Да, я учился программировать на Паскале, в детстве даже Волков Коммандер сварганил. Да... спасибо за ответ, теперь могу сравнить свой стиль программирования - детский (Pascal ) и - более серьезный (C++). Блин... просто у меня сайт по теме Windows Script Host, вот и стараюсь из него толковый ресурс сделать. Примеры толковые написать, пока только сканер портов, сканер ip адресов и Скрипт для поиска внешних битых ссылок. Н да... и все таки стиль C++ сразу видно.

11

Re: Проблема с методом CreateListView объекта WindowSystemObject

Не могу понять следующий синтаксис:


data_array.push(
      {
         name:  "..",
         ext:   "",
         size:  "",
         date:  "",
         attr:  "",
         path:  cur_dir,
         isfld: null
      });

Тут мы в массив с помощью функции push добавляем элементы, после двоеточия идет присваивание значения, но вопрос: в книгах по Windows Script Host , в частности по jscript я даже описания функции push не нашел, и почему присваивание идет после двоеточия, а не знака "=", я так понял, это из области JavaScript, просто почему ни в книге Борна ни в книге Попова этого нет? Я то и сам о функции push узнал, когда примеры с компонентом WindowSystemObject просматривал. И еще, относительно классов, опять таки, в выше указанных книгах примеров по объявлению собственных классов с подальшей возможность производить их наследование не встречал. Как я понял, я довольно сильно отстаю, тогда посоветуйте, в каком направлении двигаться, что почитать?

12

Re: Проблема с методом CreateListView объекта WindowSystemObject

Тут мы в массив с помощью функции push добавляем элементы

Тут мы в массив добавляем объект.

что почитать?

"JavaScript. Подробное руководство" Дэвида Флэнагана - самое оно (по крайней мере Douglas Crockford считает эту книгу наиболее... ну понятно).
Если с английским нормально - вот несколько полезных видео: раз, два, три.
На yuoutube таких полно если поискать, но это от великого гуру .

13 (изменено: Rumata, 2013-05-07 09:04:33)

Re: Проблема с методом CreateListView объекта WindowSystemObject

Вы неверно интерпретируете подобную запись. В массив заносится структура - объект.


var object = {
         name:  "..",
         ext:   "",
         size:  "",
         date:  "",
         attr:  "",
         path:  cur_dir,
         isfld: null
      };

data_array.push(object);

Паскалевский стиль хорош - он строг, лаконичен и требователен к программистам. Но не стоит переносить стилистические навыки, приобретенные в одном ЯП в другой. Лучше сразу учиться писать в новом стиле - и в привычку войдет и языку обучитесь быстрее.

И еще, относительно классов, опять таки, в выше указанных книгах примеров по объявлению собственных классов с подальшей возможность производить их наследование не встречал.

Забудьте об этом и не засоряйте себе голову, хотя бы на первых порах. JS это своеобразный язык со своими особенностями и своими же подводными камнями. Научитесь использовать первые и обходить вторые.

Читайте online-учебник, справочники по Javascript (microsoft, mozilla) и путеводитель Дэвида Фланагана (JavaScript: The Definitive Guide By David Flanagan).

( 2 * b ) || ! ( 2 * b )