Тема: AHK: ListView. Взаимодействие из других потоков.
Всем доброго здоровья и с прошедшими праздниками!
myTableArr:=[["Name","ID","Date","Other data"]
,["Name1","001","01.01.2017","Some data1"]
,["Name2","002","01.01.2017","Some data2"]
,["Name3","003","01.01.2017","Some data3"]
,["Name4","004","01.01.2017","Some data4"]]
Gui, Add,Button,gS_table,ShowTable
Gui, Add,Button,x+10 gI_data,InsData
Gui, Show,y750,Main
Gui, 10: Default
Gui, 10: Add, ListView,w500 h200 vLVval
Gui, 10: Add,Button,y+10 gI_data,InsData
Gui, 10: Show,Hide,Table
Menu,MyContextMenu,Add,Изменить ID,TheEdit
Menu,MyContextMenu,Add,Удалить,DelData
Menu,MyContextMenu,Add,Копировать Имя,CopyName
return
GuiClose:
ExitApp
S_table:
Gui, 10: Show
return
I_data:
ReCreateTable(myTableArr)
return
10GuiContextMenu:
if (A_GuiControl!="LVval")
return
newRowNmbr:=A_EventInfo+1
if (newRowNmbr>1) {
LVname:=myTableArr[newRowNmbr][1]
LV_Modify(newRowNmbr-1, "-Focus")
Menu, MyContextMenu, Show, %A_GuiX%, %A_GuiY%
}
return
CopyName:
Clipboard:=LVname
MsgBox,, Title, %Clipboard%
return
TheEdit:
if (newRowNmbr>1) {
if (editIDWin) {
Gui, 50: Show
ControlSetText,Edit1,% myTableArr[newRowNmbr][2],ahk_id%hEdit%
} else {
editIDWin:=1
Gui, 50: +AlwaysOnTop +ToolWindow +HWNDhEdit
Gui, 50: Add,Edit,w100 vChangeEdit,% myTableArr[newRowNmbr][2]
Gui, 50: Add,Button,y+3 h18 gEditChange,Изменить
Gui, 50: Add,Button,x+5 h18 gNoEdit,Отмена
Gui, 50: Show,,Изменить
}
}
return
50GuiClose:
NoEdit:
Gui, 50: Show, Hide
return
EditChange:
Gui, 50: Submit
myTableArr[newRowNmbr][2]:=ChangeEdit
LV_Modify(newRowNmbr,"Col2",ChangeEdit)
return
DelData:
if (newRowNmbr>1) {
myTableArr.RemoveAt(newRowNmbr)
ReCreateTable(myTableArr)
}
return
ReCreateTable(tableArr) {
Global
GuiControl, -ReDraw, LVval
LV_Delete()
Loop, % LV_GetCount("Column")
LV_DeleteCol(1)
Loop,% tableArr[1].Length()
LV_InsertCol(A_Index,"", tableArr[1][A_Index])
Loop,% tableArr.Length()-1 {
rNmbr := LV_Add("", "")
Loop,% tableArr[rNmbr+1].Length()
LV_Modify(rNmbr, "Col" . A_Index, tableArr[rNmbr+1][A_Index])
}
Loop, % tableArr[1].Length()
LV_ModifyCol(A_Index, "AutoHdr")
GuiControl, +ReDraw, LVval
}
Подскажите пожалуйста, как можно вежливо попросить кнопку "InsData" в окне "Main", приводить к аналогичному результату работы одноимённой кнопки в окне "Table"? Подпрограмму "EditChange", обновлять содержимое ячейки функцией "LV_Modify"? Подпрограмму "DelData" обновлять таблицу после удаления из неё данных?
Всё время приходится тыкать "InsData" в окне "Table", чтобы произошедшие изменения отобразились визуально. =/