Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения
А вот у вас написано:
myForm = vcl.Form(...)
Вы какую библиотеку используете vlc или qvlc? В коде не видно, какую вы загрузили.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Lua: визуальные библиотеки → Визуальный интерфейс QVCLua: обсуждения, замечания, предложения
А вот у вас написано:
myForm = vcl.Form(...)
Вы какую библиотеку используете vlc или qvlc? В коде не видно, какую вы загрузили.
А вот у вас написано:
myForm = vcl.Form(...)
Вы какую библиотеку используете vlc или qvlc? В коде не видно, какую вы загрузили.
qvcl.dll файл от 14.05.2015
За основу кода брал пример отсюда: [url]http://quik2dde.ru/viewtopic.php?pid=725#p725[/url]
kalikazandr пишет:А вот у вас написано:
myForm = vcl.Form(...)
Вы какую библиотеку используете vlc или qvlc? В коде не видно, какую вы загрузили.qvcl.dll файл от 14.05.2015
За основу кода брал пример отсюда: [url]http://quik2dde.ru/viewtopic.php?pid=725#p725[/url]
нате
#xzxz.lua
local vcl = require "qvcl"
local myForm
local is_run = true
function OnStop ( )
if myForm then myForm:Release(); myForm = nil; vcl = nil end
is_run = false
end
classcodef = 'SPBFUT'
local table_sort, string_gmatch = table.sort, string.gmatch
local string_split = function ( list, sep )
local res = {}
for sec in string_gmatch (list, "(%w+)" ) do
res[#res+1] = sec
end
return res
end
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(sender)
local SecListTable = string_split(getClassSecurities(classcodef),",")
-- table_sort(SecListTable)
untab(sender,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(SecurityCodeBI)
myForm:Show()
function main()
while is_run do
sleep(20)
end
sleep(300)
end
в classcodef была русская "С" почему-то
в classcodef была русская "С" почему-то
Спасибо большое, обязательно попробую Ваш вариант.
А что есть "#xzxz.lua"
А что есть "#xzxz.lua"
Ну, хз - название этого куска кода, раньше писал так:
--xzxz.lua и дальше сам код, сейчас пишу так "#xzxz.lua"- работает только в первой строке файла.
можете кооперировать функцию string_split(list,sep) вот с этой:
function Fn_DAYS_TO_MAT_DATE ( base, d )
local v, s, dtmd = 10000
for sec in string_gmatch ( getClassSecurities( "SPBFUT" ), "(%w+)" ) do
if base == getParamEx ( "SPBFUT", sec, "optionbase" ).param_image then
dtmd = 0 + getParamEx ( "SPBFUT", sec, "DAYS_TO_MAT_DATE" ).param_value
if dtmd > d and dtmd < v then
v = dtmd; s = sec
end
end
end
return s, v
end
--вызов--
local optionbase = "RTS"--RI, SBRF, BR
message (Fn_DAYS_TO_MAT_DATE ( optionbase , 1 )
получите набор инструментов, до экспирации которых осталось больше 1 дня, но минимальное значение дней из доступных (наиболее торгуемые).
masalexven пишет:А что есть "#xzxz.lua"
Ну, хз - название этого куска кода, раньше писал так:
--xzxz.lua и дальше сам код, сейчас пишу так "#xzxz.lua"- работает только в первой строке файла.
На счет куска кода понял.
За функцию спасибо. Разумно, добавлю. Еще раз большое спасибо за разбор ошибок.
На счет куска кода
понял.
За функцию спасибо. Разумно, добавлю. Еще раз большое спасибо за разбор ошибок.
Не за что, обращайтесь. По возможности не копируйте весь предыдущий пост, убирайте все лишнее между тегами.
Здравствуйте.
Есть функция, которая делит количество денег, на го и получает доступное количество контрактов (фьюч).
function number_contracts()
local str = limits() / selldepo()
str = string.sub(str, 0, 7)
return tostring(str)
end
далее вставляем результат в окно
Label = VCL.Label(mainForm, {Name = "Label4", top=93, left=160, Caption="Max: " .. number_contracts()})
все нормально, все крутится, котлета растет.
Но вот, так как скрипт работает в цикле main и запускается автоматически при старте квика, то пока квик не подключен к серверу, эта функция работает некорректно (из за того, что идет обращение к таблицам в квике).
и идет некорректное отображение. Если же скрипт перезапустить при подключенном квике, то все показывает правильно.
как победить?
Если же скрипт перезапустить при подключенном квике, то все показывает правильно.
как победить?
function main()
while is_run do
if isConnected() == 1 then
--делаем расчеты
end
sleep(1)
end
end
Label = VCL.Label(mainForm, {Name = "Label4", top=93, left=160, Caption="Max: " .. number_contracts()})
function main()
while is_run do
if isConnected() == 1 then
function number_contracts()
return 1
end
end
sleep(50)
end
sleep(300)
end
при запуске пишет attempt to call global 'number_contracts' (a nil value)
Что-то вы путаете.
function number_contracts(ch)
if mainForm then
Label.Caption = "Max: "..ch
end
end
Label = VCL.Label(mainForm, {Name = "Label4", top=93, left=160, Caption= number_contracts(1)})
function main()
local ch = 1
while is_run do
if isConnected() == 1 then
number_contracts(ch)
ch = ch + 1
end
sleep(1000)
end
end
Что-то вы путаете.
function number_contracts(ch) if mainForm then Label.Caption = "Max: "..ch end end Label = VCL.Label(mainForm, {Name = "Label4", top=93, left=160, Caption= number_contracts(1)}) function main() local ch = 1 while is_run do if isConnected() == 1 then number_contracts(ch) ch = ch + 1 end sleep(1000) end end
Здесь идет обращение к библиотеке из main потока, не нужно так делать.
Здесь идет обращение к библиотеке из main потока, не нужно так делать.
Кто сказал, что нельзя? Если криво обращаться то да - будет краш терминала.
В конкретном случае никаких крашей терминала не будет, все работает.
Вот запускайте, проверяйте:
--test1.lua
local VCL, myForm = require "qvcl"
local is_run = true
--
function OnStop()
if myForm then myForm:Release() end
is_run = false
end
function number_contracts(ch)
if myForm then
Label.Caption = "Max: "..ch
end
end
myForm = VCL.Form( {
caption = "Test",
Color = RGB(220,220,220),
Constraints = { MaxHeight = 180, MinHeight = 180,--ограничения по высоте
MaxWidth = 510, MinWidth = 510 },--ограничения по ширине
Position = "podesktopcenter",
FormStyle = "fsStayOnTop",--вот это свойство влияет на отображение поверх всех окон
height = 180, width = 510,
OnClose = OnStop} )
Label = VCL.Label(myForm, {Name = "Label4", top=93, left=160, Caption= ""})
myForm:Show()
function main()
local ch = 1
while is_run do
if isConnected() == 1 then
number_contracts(ch)
ch = ch + 1
end
sleep(1)
end
end
как в элементе типа label задать размер шрифта?
Label = VCL.Label(mainForm, {top=20, left=300, Color=0x00EEEE, Caption = SECCODE})
и как в элементе типа RadioButton, задать параметр color=123, если этот радиобатон выбран?
Помогите разобраться с проблемой...
Есть форма с несколькими вкладками, на каждой вкладке созданы еще вкладки (TabSheet).
При запуске все нормально работает, но через некоторое время (всегда разное, иногда 10 минут, иногда через несколько часов) пропадает все содержимое вкладок, иногда выборочно некоторых вкладок. Никогда не пропадает только первая вкладка "Information".
Из за чего такое может быть?
local mainForm mainForm = vcl.Form(nil,{Name = 'mainForm', position='poscreencenter', Height=670, BorderStyle='bsSingle', FormStyle='fsStayOnTop', Width=1250, Caption=Name..' v.'..VERSION, BorderIcons='biSystemMenu,biMinimize', Color='clSkyBlue', OnClose = function() wlog(0,'Закрыто окно робота! Останавливаем скрипт...') StopTrade() sleep(1000) LogForm:Release() mainForm:Release() vcl = nil end})
local mainPage1 mainPage1 = vcl.PageControl(mainForm, {Name = 'mainPage1', Left = 10, Top = 10, Height = 650, Width = 990})
local mainPage2 mainPage2 = vcl.PageControl(mainForm, {Name = 'mainPage2', Left = 1010, Top = 10, Height = 650, Width = 230, ActivePage = infoSheet})
local mainSheet mainSheet = vcl.TabSheet(mainPage1,{Name = 'mainSheet', Caption = 'Information'})
local Str1Sheet Str1Sheet = vcl.TabSheet(mainPage1,{Name = 'Str1Sheet', Caption = '#1 TrendLevel'})
local Str2Sheet Str2Sheet = vcl.TabSheet(mainPage1,{Name = 'Str2Sheet', Caption = '#2 ParabolicSi'})
local Str3Sheet Str3Sheet = vcl.TabSheet(mainPage1,{Name = 'Str3Sheet', Caption = '#3 ParnTrade'})
local Str4Sheet Str4Sheet = vcl.TabSheet(mainPage1,{Name = 'Str4Sheet', Caption = '#4 TrendScalpRTS'})
local Str5Sheet Str5Sheet = vcl.TabSheet(mainPage1,{Name = 'Str5Sheet', Caption = '#5 ---'})
local infoSheet infoSheet = vcl.TabSheet(mainPage2,{Name = 'infoSheet', Caption = 'Information', Font={Size=8}})
local SetSheet SetSheet = vcl.TabSheet(mainPage2,{Name = 'SetSheet', Caption = 'Settings', Font={Size=8}})
local Str1Page = vcl.PageControl(Str1Sheet,{Left=2, Top=5, Height=535, Width=980, ActivePage=infoStr1Sheet, ParentFont=true, Font={Size=8}})
local infoStr1Sheet = vcl.TabSheet(Str1Page,{Caption = 'Information', Font={Size=8}})
local SetStr1Sheet = vcl.TabSheet(Str1Page,{Caption = 'Settings', Font={Size=8}})
...
...
...
mainForm:Show()
У кого - то получилось вставить рисунок на кнопки BitBtn или Speed?
Помогите разобраться с проблемой...
Попробуйте по таймеру (1-2 ms) обновлять контролы sender.Visible = true
Если слабая видюха, то может помочь
Подскажите, как в StringGrid сделать выбранную программно ячейку видимой - хочу "Ctrl + F" припутать.
В делфи все просто, а в Qvcl не работает - всегда видны первые 10 строк, а строк порядка 300 - 400.
Спасибо.
Подскажите, как в StringGrid сделать выбранную программно ячейку видимой - хочу "Ctrl + F" припутать.
Верно ли я понял, что в StringGrid хочется иметь диалог поиска по тексту в ячейках?
kalikazandr пишет:Подскажите, как в StringGrid сделать выбранную программно ячейку видимой - хочу "Ctrl + F" припутать.
Верно ли я понял, что в StringGrid хочется иметь диалог поиска по тексту в ячейках?
Не совсем. Функции поиска нужной ячейки не сложно написать или реакцию на "Ctrl + стрелки".
Фишка в том - что не получается сделать видимой выбранную программно ячейку/строку/колонку.
В таблице всегда первая строка видна.
А сделать видимой 500 -ю строку - только скролом или колесиком, что очень не удобно.
Вот что-то типа этого:
StringGrid.TopRow = StringGrid.RowCount - 10--задали номер верхней видимой строки в таблице.
goThumbTracking тоже не работает, ну да ладно.
У кого-нибудь текст из ячеек копируется (Ctrl+C) в StringGrid при немодальном окне?
Всем привет! Подскажите, как получить таблицу из ListBox? Построчно можно так:
for i=0, ListBox.Items.Count-1 do
ListBox.ItemIndex = i
str = ListBox:GetSelectedItems()[1]
end
но это капец как долго, если большой список.
Как запретить прокрутку колесиком мыши в StringGrid? Выделенная ячейка должна быть только та, по которой щелкнули ЛКМ.
Для прокрутки есть полоса прокрутки.
Вырвать колесо мыши?
Всем привет! Подскажите, как получить таблицу из ListBox?
но это капец как долго, если большой список.
В смысле как получить список всех строк как Lua-таблицу получить одним приёмом?
Как запретить прокрутку колесиком мыши в StringGrid?
На просторах интернета на такой же вопрос попался следующий ответ:
А на деле, у грида есть события OnMouseWheelUp и OnMouseWheelDown, достаточно в их обработчик поместить одну строку:
Handled:=true;
и колесико обрабатываться не будет
У меня под рукой Lazarus'а не оказалось, но думаю, там такие же события есть.
На QUIK тоже не проверял, звиняйте.
По результату - отпишитесь: вышло или нет.
QUIK -> DDE → Lua: визуальные библиотеки → Визуальный интерфейс QVCLua: обсуждения, замечания, предложения
Форум работает на PunBB, при поддержке Informer Technologies, Inc