<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Проблема с методом CreateListView объекта WindowSystemObject]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8266&amp;type=atom" />
	<updated>2013-05-07T05:03:09Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8266</id>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71956#p71956" />
			<content type="html"><![CDATA[<p>Вы неверно интерпретируете подобную запись. В массив заносится структура - объект. </p><div class="codebox"><pre><code>
var object = {
         name:  &quot;..&quot;,
         ext:   &quot;&quot;,
         size:  &quot;&quot;,
         date:  &quot;&quot;,
         attr:  &quot;&quot;,
         path:  cur_dir,
         isfld: null
      };

data_array.push(object);
</code></pre></div><p>Паскалевский стиль хорош - он строг, лаконичен и требователен к программистам. Но не стоит переносить стилистические навыки, приобретенные в одном ЯП в другой. Лучше сразу учиться писать в новом стиле - и в привычку войдет и языку обучитесь быстрее. </p><div class="quotebox"><blockquote><p>И еще, относительно классов, опять таки, в выше указанных книгах примеров по объявлению собственных классов с подальшей возможность производить их наследование не встречал.</p></blockquote></div><p>Забудьте об этом и не засоряйте себе голову, хотя бы на первых порах. JS это своеобразный язык со своими особенностями и своими же подводными камнями. Научитесь использовать первые и обходить вторые. </p><p>Читайте <a href="http://learn.javascript.ru/">online-учебник</a>, справочники по Javascript (<a href="http://msdn.microsoft.com/ru-ru/library/ie/d1et7k7c%28v=vs.94%29.aspx">microsoft</a>, <a href="https://developer.mozilla.org/en/docs/JavaScript">mozilla</a>) и путеводитель Дэвида Фланагана (JavaScript: The Definitive Guide By David Flanagan).</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-05-07T05:03:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71956#p71956</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71955#p71955" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Тут мы в массив с помощью функции push добавляем элементы</p></blockquote></div><p>Тут мы в массив добавляем объект.<br /></p><div class="quotebox"><blockquote><p>что почитать?</p></blockquote></div><p>&quot;JavaScript. Подробное руководство&quot; Дэвида Флэнагана - самое оно (по крайней мере <a href="http://www.crockford.com/">Douglas Crockford</a> считает эту книгу наиболее... ну понятно).<br />Если с английским нормально - вот несколько полезных видео: <a href="https://www.youtube.com/watch?v=v2ifWcnQs6M&amp;list=PLDl-q-p8VDduh15lraBIoD075fAXW6pE1&amp;index=1">раз</a>, <a href="https://www.youtube.com/watch?v=DwYPG6vreJg&amp;list=PLDl-q-p8VDduh15lraBIoD075fAXW6pE1&amp;index=2">два</a>, <a href="https://www.youtube.com/watch?v=ya4UHuXNygM&amp;list=PLDl-q-p8VDduh15lraBIoD075fAXW6pE1&amp;index=4">три</a>.<br />На yuoutube таких полно если поискать, но это от великого гуру <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[dab00]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27085</uri>
			</author>
			<updated>2013-05-07T04:57:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71955#p71955</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71952#p71952" />
			<content type="html"><![CDATA[<p>Не могу понять следующий синтаксис:<br /></p><div class="codebox"><pre><code>
data_array.push(
      {
         name:  &quot;..&quot;,
         ext:   &quot;&quot;,
         size:  &quot;&quot;,
         date:  &quot;&quot;,
         attr:  &quot;&quot;,
         path:  cur_dir,
         isfld: null
      });
</code></pre></div><p>Тут мы в массив с помощью функции push добавляем элементы, после двоеточия идет присваивание значения, но вопрос: в книгах по Windows Script Host , в частности по jscript я даже описания функции push не нашел, и почему присваивание идет после двоеточия, а не знака &quot;=&quot;, я так понял, это из области JavaScript, просто почему ни в книге Борна ни в книге Попова этого нет? Я то и сам о функции push узнал, когда примеры с компонентом WindowSystemObject просматривал. И еще, относительно классов, опять таки, в выше указанных книгах примеров по объявлению собственных классов с подальшей возможность производить их наследование не встречал. Как я понял, я довольно сильно отстаю, тогда посоветуйте, в каком направлении двигаться, что почитать?</p>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-05-06T23:14:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71952#p71952</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71951#p71951" />
			<content type="html"><![CDATA[<p>Scripting.WindowSystemObject - данный компонент у меня зарегистрирован, поэтому проверки на его присутствие я не делаю. Да, я учился программировать на Паскале, в детстве даже Волков Коммандер сварганил. Да... спасибо за ответ, теперь могу сравнить свой стиль программирования - детский (Pascal ) и - более серьезный (C++). Блин... просто у меня сайт по теме Windows Script Host, вот и стараюсь из него толковый ресурс сделать. Примеры толковые написать, пока только сканер портов, сканер ip адресов и Скрипт для поиска внешних битых ссылок. Н да... и все таки стиль C++ сразу видно.</p>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-05-06T22:28:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71951#p71951</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71866#p71866" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>... И вот еще:<br /></p><div class="quotebox"><blockquote><p>...<br />Automation server can&#039;t create object<br />...</p></blockquote></div></blockquote></div><p>А есть ли у нас зарегистрированный &quot;Scripting.WindowSystemObject&quot;, а?</p>]]></content>
			<author>
				<name><![CDATA[max7]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=10498</uri>
			</author>
			<updated>2013-05-03T23:51:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71866#p71866</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71856#p71856" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>fomenos пишет:</cite><blockquote><p>С точки зрения программирования, код написан правильно или все таки коряво?</p></blockquote></div><p>По вашему &quot;стилю&quot; похоже вы учились писать на паскале или бэйсике - разучивайтесь!<br />Итак, если не делать классы, то вот более-менее внятный пример.<br /></p><div class="codebox"><pre><code>

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


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


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


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


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


/* 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) != &quot;&quot;)
   {
      data_array.push(
      {
         name:  &quot;..&quot;,
         ext:   &quot;&quot;,
         size:  &quot;&quot;,
         date:  &quot;&quot;,
         attr:  &quot;&quot;,
         path:  cur_dir,
         isfld: null
      });
   }
    
   if(cur_fld_obj.SubFolders.Count &gt; 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:   &quot;&quot;,
            size:  &quot;Папка&quot;,
            date:  item.DateCreated,
            attr:  &quot;&quot;,
            path:  item.Path,
            isfld: true
         });
      }
   }
   
   if(cur_fld_obj.Files.Count &gt; 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 &amp; 0x001) ? &quot;r&quot; : &quot;-&quot;),
            ((attrib &amp; 0x002) ? &quot;h&quot; : &quot;-&quot;),
            ((attrib &amp; 0x004) ? &quot;s&quot; : &quot;-&quot;),
            ((attrib &amp; 0x020) ? &quot;a&quot; : &quot;-&quot;),
            ((attrib &amp; 0x800) ? &quot;c&quot; : &quot;-&quot;)
         ].join(&quot;&quot;);
           
         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: &quot;Имя&quot;,      width: 100, type: 1, 
     set_data: function(item, data) { item.Text = data.name;        } },
     
   { name: &quot;Тип&quot;,      width:  50, type: 1, 
     set_data: function(item, data) { item.SubItems(0) = data.ext;  } },
     
   { name: &quot;Размер&quot;,   width: 100, type: 1, 
     set_data: function(item, data) { item.SubItems(1) = data.size; } },
     
   { name: &quot;Дата&quot;,     width: 100, type: 1, 
     set_data: function(item, data) { item.SubItems(2) = data.date; } },
     
   { name: &quot;Атрибуты&quot;, 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(&quot;LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS&quot;));
      
   list_view_obj.GridLines = true;
   list_view_obj.RowSelect = true;
   list_view_obj.ReadOnly = false;
   list_view_obj.Align = WSO.Translate(&quot;AL_CLIENT&quot;);
   
   for(var ix = 0; ix &lt; 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 &lt; 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(&quot;\\&quot;) + 1);

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


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

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[max7]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=10498</uri>
			</author>
			<updated>2013-05-03T19:36:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71856#p71856</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71835#p71835" />
			<content type="html"><![CDATA[<p>Хаотическое использование завершения строк символом &quot;точка-с-запятой&quot;. <br />Переменные объявлены абы как - часть объявлена, другая - нет. </p><p>И вот еще:<br /></p><div class="quotebox"><blockquote><p>C:\tmp&gt;cscript z.js<br />Microsoft (R) Windows Script Host Version 5.7<br />Copyright (C) Microsoft Corporation. All rights reserved.</p><p>C:\tmp\z.js(1, 1) Microsoft JScript runtime error: Automation server can&#039;t create object</p><br /><p>C:\tmp&gt;ver</p><p>Microsoft Windows [Version 6.0.6002]</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2013-05-03T06:32:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71835#p71835</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71814#p71814" />
			<content type="html"><![CDATA[<p>С точки зрения программирования, код написан правильно или все таки коряво?</p>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-05-02T07:24:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71814#p71814</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71813#p71813" />
			<content type="html"><![CDATA[<p>Уважаемые коллеги, вот собственно написал простенький пример файлового менеджера, пока только начало, но, РАБОТАЕТ, переход по папка тоже идет: <br /></p><div class="codebox"><pre><code>
wso = new ActiveXObject(&quot;Scripting.WindowSystemObject&quot;)
FSO = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;)

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

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

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

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

//Общая сплит панель
z = f.CreateSplitPanel(0,0,0,0,false)
//Во все окно
z.Align = wso.Translate(&quot;AL_CLIENT&quot;)
//Встроенная сплит панель
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=&quot;L&quot;    
    ListViewL = t.CreateListView(0,0,300,300,wso.Translate(&quot;LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS&quot;))
    
    ListViewL.OnDblClick = ControlDblClickL
    
    ColumA = ListViewL.Columns.Add(&quot;Имя&quot;,100)
    ColumA.DataType = 1
    
    ColumB = ListViewL.Columns.Add(&quot;Тип&quot;,50)
    ColumB.DataType = 1
    
    ColumC = ListViewL.Columns.Add(&quot;Размер&quot;,100)
    ColumC.DataType = 2
    
    ColumD = ListViewL.Columns.Add(&quot;Дата&quot;,100)
    ColumD.DataType = 1
    
    ColumF = ListViewL.Columns.Add(&quot;Атрибуты&quot;,50)
    ColumF.DataType = 1
    
    ListViewL.GridLines = true
    ListViewL.RowSelect = true
    ListViewL.ReadOnly = false
    ListViewL.Align = wso.Translate(&quot;AL_CLIENT&quot;)
    
    ListViewL.OnData = ListViewOnDataL
    return t;
}

WList = null
WData = []

function CreateFrameR(){
    a = s.CreateFrame(0,0,300,0)
    a.Name=&quot;R&quot;    
    ListViewR = a.CreateListView(0,0,300,300,wso.Translate(&quot;LVS_REPORT  | LVS_OWNERDATA | LVS_SHOWSELALWAYS&quot;))
    
    ListViewR.OnDblClick = ControlDblClickR
    
    ColumA = ListViewR.Columns.Add(&quot;Имя&quot;,100)
    ColumA.DataType = 1
    
    ColumB = ListViewR.Columns.Add(&quot;Тип&quot;,50)
    ColumB.DataType = 1
    
    ColumC = ListViewR.Columns.Add(&quot;Размер&quot;,100)
    ColumC.DataType = 2
    
    ColumD = ListViewR.Columns.Add(&quot;Дата&quot;,100)
    ColumD.DataType = 1
    
    ColumF = ListViewR.Columns.Add(&quot;Атрибуты&quot;,50)
    ColumF.DataType = 1
    ListViewR.GridLines = true
    ListViewR.RowSelect = true
    ListViewR.Align = wso.Translate(&quot;AL_CLIENT&quot;)
    
    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)!=&quot;&quot;){
        CountList+=1
        WObject = new Object()
        
        
        WObject.Name = &quot;..&quot;
        WObject.Ext = &quot;&quot;
        WObject.Size = &quot;&quot;
        WObject.Date = &quot;&quot;
        WObject.Attrib = &quot;&quot;
        
        WObject.Path = CurDir
        
        
        DataL.push(WObject)
    }
    //panel.Add(&quot;..&quot;)
    
    //Получение списка папок
    for (; !SubFolders.atEnd(); SubFolders.moveNext()) {    
        GetSub = FSO.GetFileName(SubFolders.item())
        
        GetPath = SubFolders.item()
        
        GetExt = &quot;&quot;
        GetName = &quot;Папка&quot;
        GetDate = SubFolders.item().DateCreated
        GetAttrib = &quot;&quot;
        
        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 = &quot;&quot;
        
        
        attrib = SubFiles.item().Attributes;
        if ((attrib &amp; 0x01) != 0)            // Это атрибут &quot;только для чтения&quot;.
            GetAttrib+= &quot;r&quot;; 
        if ((attrib &amp; 0x02) != 0)            // Это атрибут &quot;скрытый&quot;.
            GetAttrib+= &quot;h&quot;; 
        if ((attrib &amp; 0x04) != 0)            // Это атрибут &quot;системный&quot;.
            GetAttrib+=&quot;s&quot; ; 
        if ((attrib &amp; 0x20) != 0)            // Это атрибут &quot;архивный&quot;.
            GetAttrib+=&quot;a&quot;; 
        if ((attrib &amp; 0x800) != 0)          // Это атрибут &quot;сжатый&quot; (Windows NT).
            GetAttrib+=&quot;c&quot;;
        
        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)!=&quot;&quot;){
        CountList+=1
        WObject = new Object()
        
        WObject.Name = &quot;..&quot;
        WObject.Ext = &quot;&quot;
        WObject.Size = &quot;&quot;
        WObject.Date = &quot;&quot;
        WObject.Attrib = &quot;&quot;
        
        WObject.Path = CurDir
        
        
        DataR.push(WObject)
    }
    //panel.Add(&quot;..&quot;)
    
    //Получение списка папок
    for (; !SubFolders.atEnd(); SubFolders.moveNext()) {    
        GetSub = FSO.GetFileName(SubFolders.item())
        
        GetPath = SubFolders.item()
        
        GetExt = &quot;&quot;
        GetName = &quot;Папка&quot;
        GetDate = SubFolders.item().DateCreated
        GetAttrib = &quot;&quot;
        
        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 = &quot;&quot;
        
        
        attrib = SubFiles.item().Attributes;
        if ((attrib &amp; 0x01) != 0)            // Это атрибут &quot;только для чтения&quot;.
            GetAttrib+= &quot;r&quot;; 
        if ((attrib &amp; 0x02) != 0)            // Это атрибут &quot;скрытый&quot;.
            GetAttrib+= &quot;h&quot;; 
        if ((attrib &amp; 0x04) != 0)            // Это атрибут &quot;системный&quot;.
            GetAttrib+=&quot;s&quot; ; 
        if ((attrib &amp; 0x20) != 0)            // Это атрибут &quot;архивный&quot;.
            GetAttrib+=&quot;a&quot;; 
        if ((attrib &amp; 0x800) != 0)          // Это атрибут &quot;сжатый&quot; (Windows NT).
            GetAttrib+=&quot;c&quot;;
        
        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(&quot;\\&quot;)+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==&quot;..&quot;)
        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==&quot;..&quot;)
        CreateListR(ListViewR,FSO.GetParentFolderName(wd.Path))
    else
        if (FSO.FolderExists(wd.Path)) 
            CreateListR(ListViewR,wd.Path)
}



f.Show()
wso.Run()
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-05-02T07:22:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71813#p71813</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71806#p71806" />
			<content type="html"><![CDATA[<p><strong>fomenos</strong>, не в тему, но <a href="http://forum.wincmd.ru/viewtopic.php?t=13884&amp;start=0">здесь</a>, во втором посте, альтернативный взгляд на проблему...</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-05-01T20:41:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71806#p71806</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71753#p71753" />
			<content type="html"><![CDATA[<p>Флаг LVS_OWNERDATA, оно же свойство OwnerData, означает, что ListView не будет хранить в своих внутренних структурах данные отображаемые в ячейках. Заботу о хранении и предоставлении данных для отображения в ячейках берём на себя. Это очень удобно если данные часто меняются. Задаём через &quot;ListView.Columns&quot; список колонок, через &quot;ListView.Count&quot; меняем количество строк (при добавлении - увеличиваем).<br />Когда для той или иной ячейки потребуется отрисовка/перерисовка будет вызвано событие ListView &quot;OnData&quot;.<br /></p><div class="codebox"><pre><code>
// 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(); // заканчиваем обновление
};
</code></pre></div><p>Нужно учесть, что OnData будет вызываться при каждой перерисовке ячейки.<br />Когда установлен флаг LVS_OWNERDATA, код &quot;panel.Add(GetSub)&quot; по сути ничего не делает.</p><p>В справке это не очевидно, но если прочитать все вводные и пояснения становится ясней.<br />Смотреть нужно раздел &quot;ListViewEvents&quot; (&quot;Интерфейс ListViewEvents&quot;) в разделе &quot;Классы&quot; (&quot;WSO 1.1 Классы&quot;).<br />В разделе &quot;Классы&quot; более подробно описаны события различных компонентов.<br />В разделе &quot;ListViewEvents&quot; (&quot;Интерфейс ListViewEvents&quot;) есть ссылка на &quot;виртуальный режим&quot; компонента ListView.</p><p>Цитаты:</p><div class="quotebox"><blockquote><p>OnData&nbsp; ( [in] IDispatch *&nbsp; Sender,&nbsp; [in] IDispatch *&nbsp; Item&nbsp; )&nbsp; <br />&nbsp; <br />Событие возникает когда компоненту требуется информация об элементе в виртуальном режиме. </p><p>Аргументы:<br /> Sender -&nbsp; объект который вызвал обработчик события&nbsp; <br /> Item -&nbsp; элемент для которого запрашивается информация, исходя из значения его свойства Index можно задать его текст и изображение.</p></blockquote></div><div class="quotebox"><blockquote><p>VARIANT_BOOL RW OwnerData&nbsp; </p><p>Свойство определяет нахождение компонента в виртуальном режиме. </p><p>Если значение этого свойства - &quot;TRUE&quot; то компонент не хранит данные об элементах: текст и индексы изображений. Количество элементов устанавливается через свойство Count. Когда компоненту требуется информация об элементе для его отображения он вызывает обработчик события OnData для получения информации об элементе.</p><p>Значение по умолчанию: &quot;FALSE&quot;.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[max7]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=10498</uri>
			</author>
			<updated>2013-04-30T18:54:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71753#p71753</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71743#p71743" />
			<content type="html"><![CDATA[<p>Проблема решилась, в строке</p><div class="codebox"><pre><code>
ListViewL = t.CreateListView(0,0,300,300,wso.Translate(&quot;LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS&quot;))
</code></pre></div><p>Надо было убрать LVS_OWNERDATA</p>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-04-30T08:42:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71743#p71743</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Проблема с методом CreateListView объекта WindowSystemObject]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=71742#p71742" />
			<content type="html"><![CDATA[<p>Пытаюсь написать простенький файловый менеджер, используя объект WindowSystemObject, метод CreateListView позволяет создать нужные поля для вывода в них информации. Но при попытки заполнить поля, информация в них не отображается. В документации по WSO толком ничего не нашел, вот код:<br /></p><div class="codebox"><pre><code>

wso = new ActiveXObject(&quot;Scripting.WindowSystemObject&quot;)
FSO = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;)

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

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

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

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

//Общая сплит панель
z = f.CreateSplitPanel(0,0,0,0,false)
//Во все окно
z.Align = wso.Translate(&quot;AL_CLIENT&quot;)
//Встроенная сплит панель
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=&quot;L&quot;    
    ListViewL = t.CreateListView(0,0,300,300,wso.Translate(&quot;LVS_REPORT | LVS_OWNERDATA | LVS_SHOWSELALWAYS&quot;))
    ListViewL.Columns.Add(&quot;Имя&quot;,100)
    ListViewL.Columns.Add(&quot;Тип&quot;,50)
    ListViewL.Columns.Add(&quot;Размер&quot;,100)
    ListViewL.Columns.Add(&quot;Дата&quot;,100)
    ListViewL.Columns.Add(&quot;Атрибуты&quot;,50)
    ListViewL.GridLines = true
    ListViewL.RowSelect = true
    ListViewL.Align = wso.Translate(&quot;AL_CLIENT&quot;)
    return t;
}

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

function CurrentDir() {
var curD
    curD = WScript.ScriptFullName; 
    curD = curD.substring(0,curD.lastIndexOf(&quot;\\&quot;)+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()

</code></pre></div><p>В чем ошибка? В примерах по WSO фигурирует свойство OnData - Свойство позволяет задать обработчик события OnData через 2-й уровень. А как, что и к чему не описано.</p>]]></content>
			<author>
				<name><![CDATA[fomenos]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28568</uri>
			</author>
			<updated>2013-04-30T08:05:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=71742#p71742</id>
		</entry>
</feed>
