Недавно, пообщавшись с Александром Борисовичем, я познал истину вызова контекстного меню для ListView.
Вас ждет пример вызова контекстного меню, а так же один из вариантов решения по заполнению таблицы большого объема.
Напоминаю, что WSO это библиотека для обеспечения доступа к оконной подсистеме Windows на базе архитектуры COM, для создания оконных интерфейсов в программах, написанных на сценарных (скриптовых) языках, а также в программах, написанных на других языках и в других системах программирования. С помощью WSO можно легко создавать оконные интерфейсы на JScript, VBScript, Perl, Python (с) www.veretennikov.org
o = new ActiveXObject("Scripting.WindowSystemObject") // Подключились к COM объекту
f = o.CreateForm(0,0,0,0)
f.ClientWidth = 550
f.ClientHeight = 350
f.CenterControl() // Создаем окно по центру экрана
f.Text = "Press right mouse button on an item"
f.BorderWidth = 10
f.MinWidth = 500
f.MinHeight = 350
Box = f.CreateListView(10,10,250,300,o.Translate("LVS_REPORT | LVS_SHOWSELALWAYS")) // Таблица в виде ListView report
Box.HotTrack = true
Box.RowSelect =true
Box.Align = o.Translate("AL_CLIENT");
r1=Box.Columns.Add ("ID", 40);
r2=Box.Columns.Add ("Sub 0", 90);
r3=Box.Columns.Add ("Sub 1", 250) ;
r4=Box.Columns.Add ("Sub 2", 140) ;
r5=Box.Columns.Add ("Sub 3", 40); // Всего 5 колонок
Box.BeginUpdate () // Метод запрещает обновление компонента после изменения коллекции, полезно вызывать этот метод перед добавлением большого количества элементов.
// Окно не будет моргать при заполнении таблицы
for (i = 0; i<100000; i++) // Много тестовых значений
{
Box.Add("Item "+i)
Box.item(i).SubItems(0)="SubItem "+i
Box.item(i).SubItems(1)="SubItem "+i
Box.item(i).SubItems(2)="SubItem "+i
Box.item(i).SubItems(3)="SubItem "+i
}
Box.EndUpdate () //Метод разрешает обновление компонента после изменения коллекции.
Box.ReadOnly = false
Box.PopupMenu.Add("Select item").OnExecute = OnSelectItem // Вызов контекстного меню 1 пункт.
Box.PopupMenu.Add("Delete item").OnExecute = OnDell // Вызов контекстного меню 2 пункт.
function OnDell(Sender) // Действие вызванное нажатием Delete item
{
var ListView = Sender.Control
var Index = ListView.ItemIndex
ListView.Remove(Index)
}
function OnSelectItem(Sender) // Действие вызванное нажатием Select item
{
var ListView = Sender.Control
var Index = ListView.ItemIndex
if (Index < 0) f.Text = "No item selected"; else
f.Text = ListView.Item(Index).Text + " "+ListView.item(ListView.ItemIndex).SubItems(1)
}
f.Show()
o.Run()
Новые комментарии