1

Тема: WSO + VBscript Вопрос о контекстном меню.

Собственно сабж. Есть ListView, как прикрутить к нему PopUpMenu.
http://www.veretennikov.org/WSO/Help/ht … b91be683e4
Тут написано что то непонятное. Я пытался разобраться в примерах на JScript (которые есть в комплекте), но походу для ListView контекстного меню не бывает...
Вот пример кода (из примеров к WSO):


Set o = WScript.CreateObject("Scripting.WindowSystemObject")

Set f = o.CreateForm(0,0,0,0)
f.ClientWidth = 600
f.ClientHeight = 300
f.CenterControl()
f.Text = "ListView Sample"

Set RightPanel = f.CreateFrame(0,0,100,0)
RightPanel.Align = o.Translate("AL_RIGHT")

Set View = f.CreateListView(0,0,0,0)
View.Align = o.Translate("AL_CLIENT")
View.RowSelect = true
View.Style = o.Translate("LVS_REPORT")
View.HideSelection = false

View.Columns.Add "Column A",70
View.Columns.Add "Column B",100
View.Columns.Add "Column C",150

Set Images = o.CreateImageList()
Images.Load(ResourceDir()+"ToolBar.bmp")

View.LargeImages = Images
View.SmallImages = Images

For counter = 1 To 10
    Set Item = View.Add(counter)
    Item.SubItems(0) = "SubItem 1 of "+CStr(counter)
    Item.SubItems(1) = "SubItem 2 of "+CStr(counter)
    Item.ImageIndex = counter Mod 15
Next

Set CloseButton = RightPanel.CreateButton(10,10,75,25,"Close")
CloseButton.OnClick = GetRef("CloseFormHandler")

Set ExecuteItem = RightPanel.CreateButton(10,50,75,25,"Execute")
ExecuteItem.OnClick = GetRef("ExecuteItemHandler")


Set AddItem = RightPanel.CreateButton(10,90,75,25,"Add")
AddItem.OnClick = GetRef("AddItemHandler")

Set DeleteItem = RightPanel.CreateButton(10,130,75,25,"Delete")
DeleteItem.OnClick = GetRef("DeleteItemHandler")

f.Show()
o.Run()

Sub CloseFormHandler(Sender)
    Sender.Form.Close()
End Sub

Sub ExecuteItemHandler(Sender)
    If View.ItemIndex >= 0 Then
        f.MessageBox("Item "+CStr(View.ItemIndex) +" selected")
    Else
        f.MessageBox("No items selected")    
    End If
End Sub

Sub DeleteItemHandler(Sender)    
    View.BeginUpdate()

    For i = View.Count-1 To 0 Step -1

        if View.Item(i).Selected Then
            View.Remove(i)
        End If
    Next

    View.EndUpdate()
    View.ClearSelection()
End Sub

Sub AddItemHandler(Sender)
    Set Item = View.Add(counter)
    Item.SubItems(0) = "SubItem 1 of "+CStr(counter)
    Item.SubItems(1) = "SubItem 2 of "+CStr(counter)
    Item.ImageIndex = counter Mod 15
    counter = counter + 1
End Sub

Function ResourceDir()
    ResourceDir = StartupDir()+"..\\Data\\"
End Function

Function StartupDir()
    Dim s
    s = WScript.ScriptFullName
    s = Right(s,InStrRev(s,"\\"))
    StartupDir = s
End Function

Как сюда приделать PopupMenu ума не приложу.

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

2

Re: WSO + VBscript Вопрос о контекстном меню.

Сам дал задачу - сам решил.
Вот JScript пример вызова контекстного меню в WSO:


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()
Автоматизирую торговлю. Не 1С