GREEN_X5 пишет:masalexven пишет:Получается что заполнение свойств обьектов в main сувать нельзя, а в колбеки можно?
Вот здесь [url]http://quik2dde.ru/viewtopic.php?pid=1964#p1964[/url] я писал про заполнение ComboBox в main и мне сказали, что это недопустимо.
Вам бы один раз понять что скрипт работает в двух потоках.
main() работает в собственном отдельном потоке, из него НЕЛЬЗЯ обращаться к библиотеке.
Вот так НЕЛЬЗЯ
function main ()
while is_run do sleep(50)
PriceField.Text = "5"
end
end
И даже вот так НЕЛЬЗЯ, потому что функция вызывается из main, а значит будет выполнена в его потоке
function toVCL ()
PriceField.Text = last_price()
end
function main ()
while is_run do sleep(50)
toVCL ()
end
end
Из колбеков обращайтесь без ограничений, они работают в основном потоке.
В main() можете готовить для отправки в библиотеку значения в переменные, но при этом не пользуйтесь lua библиотекой table, она потоко-небезопасна.
Вы имеете в виду визуальную таблицу?
При заполнении ComboBox используется массив, а он тоже таблица по Lua понятиям. Вот так можно? Ось Windows 7 Домашняя расширенная 64x. Терминал QUIK 7.0.4.10. Грааля никакого нет, он в другом скрипте, здесь только примитивное диалоговое окно, которое по кнопке кидает значения а файл и все. Поэтому и удивляюсь, что рушится. Никаких сложных обработок.
classcodef = 'SPBFUT'
local table_sort = table.sort
function untab(fun,tab)
if type(tab)=="table" then
fun.Items = {}
for _,i in ipairs(tab) do fun.Items:Add(tostring(i)) end
end
end
local function getSecurityFutsBI()
local SecListTable = string_split(getClassSecurities(сlasscodef),",")
table_sort(SecListTable)
untab(SecurityCodeBI,SecListTable)
SecListTable = nil
end
function Handler(Sender,...)
local SN=Sender.Name
if SN == "Exit" or SN == "myForm" then OnStop() end
if SN == "ButtonFullWindow" or SN == "Full" then myForm.windowstate = "wsMaximized" end
if SN == "ButtonNormWindow" or SN == "Norm" then myForm.windowstate = "wsNormal" end
if SN == "SCodeBI" then
message (SecurityCodeBI.Text)
end
end
myForm = vcl.Form({Name = "myForm", Height = 280, Width = 260, Caption = "Стоп-заявка. ФОРТС рынок.",
Position = "poScreenCenter", OnClose = Handler})
mainMenu = vcl.MainMenu(myForm, "Menu")
mainMenu.showhint=true
mainMenu:LoadFromTable({
{name="Menu", caption="&Меню",
submenu={
{name="Full", caption="&Развернуть", onclick=Handler},
{name="Norm", caption="&Нормально", onclick=Handler},
{caption="-",},
{name="Exit", caption="&Выход", onclick=Handler},
}
}
})
SecurityCodeBI = vcl.ComboBox(myForm, {Name = "SCodeBI", top=40, left=130, Width=120, Text="Выбрать...", OnChange=Handler, ShowHint=true, Hint="Инструмент, по которому выставится условие"})
getSecurityFutsBI()
function main()
while is_run do
sleep(20)
end
sleep(300)
end