251 (2015-10-27 23:21:57 отредактировано diksan)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Кто подскажет? Вывожу в таблицу StringGrid данные линий индикатора Ишимоку

gridIchimoku = VCL.StringGrid(mainForm,"gridIchimoku")
gridIchimoku._ = { Top = 18, left = 270, Width=990, ColCount = 10, RowCount = 10, Height = 200, AutoEdit = False, FixedCols = 1, FixedRows = 1, Flat = True }
gridIchimoku:SetColParams({
  {Width= 160, Alignment="taleftJustify", Title={Caption="Индикатор", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Текущее значение", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Последнее начение", Alignment="taCenter"}},
  {Width= 160, Alignment="taRightJustify", Title={Caption="Предпоследнее значение", Alignment="taCenter"}},
})

local class_code, sec_code = CLASS_CODE, SEC_CODE
local tag = "ICHMK"
local count = getNumCandles (tag)
local T0, N0, L0 = getCandlesByIndex (tag, 0, count - 3, 3)  --получаем таблицу с последними значениями Tenkan-sen
local T1, N1, L1 = getCandlesByIndex (tag, 1, count - 3, 3)  --получаем таблицу с последними значениями Kijun-sen
local T2, N2, L2 = getCandlesByIndex (tag, 2, count - 3, 3)  --получаем таблицу с последними значениями Senkou Span 1
local T3, N3, L3 = getCandlesByIndex (tag, 3, count - 3, 3)  --получаем таблицу с последними значениями Senkou Span 2
local T4, N4, L4 = getCandlesByIndex (tag, 4, count - 3, 3)  --получаем таблицу с последними значениями Chinkou Span

gridIchimoku:SetCell(1, 1, L0)
gridIchimoku:SetCell(2, 1, T0[2].close)
gridIchimoku:SetCell(3, 1, T0[1].close)
gridIchimoku:SetCell(4, 1, T0[0].close)
gridIchimoku:SetCell(1, 2, L1)
gridIchimoku:SetCell(2, 2, T1[2].close)
gridIchimoku:SetCell(3, 2, T1[1].close)
gridIchimoku:SetCell(4, 2, T1[0].close)
gridIchimoku:SetCell(1, 3, L2)
gridIchimoku:SetCell(2, 3, T2[2].close)
gridIchimoku:SetCell(3, 3, T2[1].close)
gridIchimoku:SetCell(4, 3, T2[0].close)
gridIchimoku:SetCell(1, 4, L3)
gridIchimoku:SetCell(2, 4, T3[2].close)
gridIchimoku:SetCell(3, 4, T3[1].close)
gridIchimoku:SetCell(4, 4, T3[0].close)
gridIchimoku:SetCell(1, 5, L4)
gridIchimoku:SetCell(2, 5, T4[2].close)
gridIchimoku:SetCell(3, 5, T4[1].close)
gridIchimoku:SetCell(4, 5, T4[0].close)

данные Senkou Span 1 (T2) и Senkou Span 2 (T3) за последние 3 свечи выходят, а по остальным линиям ноли! Легенда по всем линиям выходит правильно! В чем причина, что не так делаю?

252

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

CyberTrader пишет:

OpenDlg с кириллическими именами не работает?

Можно подробнее с примером кода? я не понял.

253

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

данные Senkou Span 1 (T2) и Senkou Span 2 (T3) за последние 3 свечи выходят, а по остальным линиям ноли! Легенда по всем линиям выходит правильно! В чем причина, что не так делаю?

Предложение такое: попробуйте без грида и вообще QVcl повторить опыт. Например, выводите значения в лог или через massage()
Вполне возможно, что есть нюансы вообще с доступом к значениям индикатора, типа может оказаться, что так сразу нельзя к ним обращаться на старте скрипта, надо "подождать" колбека какого-нибудь.

Тогда по-крайней мере будет ясна проблема, можно будет попробовать что-то повторить, быть может переадресовать вопрос разработчикам QUIK.
Потому как с виду всё нормально

254

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:
CyberTrader пишет:

OpenDlg с кириллическими именами не работает?

Можно подробнее с примером кода? я не понял.

message(tostring(require('qvcl').OpenDialog():Execute({})))

И выбираем какой-нибудь файл, в пути которого присутствует кириллица.

255

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

Потому как с виду всё нормально

Нормально.
Либо индикатор не успел рассчитаться (есть вроде признак - рассчитан индикатор или нет, но что-то не смог найти в описании).
Но скорее всего, связано это с тем, что таблицы T0, T1, T2 уже успели заполниться значениями, а остальные еще нет, переменные получили свои значения (T3={}, T4={}) и расчет ушел дальше.

У меня была такая ситуация избавился циклом:

local ch, Close = 0
repeat Close = T2[2].close
ch=ch+1
if ch > 1000 then message ("No Close",2) break end
until Close and Close ~= 0

message ни разу не появилось. Счетчик периодически равен до 30

256

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Спасибо, буду пробовать

257

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

CyberTrader пишет:
message(tostring(require('qvcl').OpenDialog():Execute({})))

И выбираем какой-нибудь файл, в пути которого присутствует кириллица.

Спасибо за пример, в самом деле есть проблема. Починю.

258

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Подскажите как с помощью RadioButton менять Page1.TabVisible = false на Page1.TabVisible = true ? Т.е если кнопка RadioButton выбрана - страница в PageControl видна (true), если RadioButton не выбрана тогда страница Page1 не видна (false) ?

259

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

diksan пишет:

Кто подскажет? Вывожу в таблицу StringGrid данные линий индикатора Ишимоку
данные Senkou Span 1 (T2) и Senkou Span 2 (T3) за последние 3 свечи выходят, а по остальным линиям ноли! Легенда по всем линиям выходит правильно! В чем причина, что не так делаю?

С Ишимоку разобрался: в параметрах диаграммы не должно быть отображения в будущее!

260

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg,
сделайте, пожалуйста, чтобы поля в SpinEdit и FloatSpinEdit можно было оставлять пустыми, как в QUIK.

261

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Есть ли у FloatSpinEdit параметр, запрещающий вводить большее количество знаков, чем определено свойством DecimalPlaces?

262 (2015-12-01 19:24:34 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

CyberTrader пишет:

Есть ли у FloatSpinEdit параметр, запрещающий вводить большее количество знаков, чем определено свойством DecimalPlaces?

Нет такого. При потере фокуса он сам подрежет лишнее.
Или пишите обработчик.
Или в библиотеке можно дописать.

263

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Есть у кого-нибудь пример работы с XML в VCLua?

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Здравствуйте. есть несколько вопросов.
1. Есть у меня пачка радиокнопок (RadioButton). Как выбрать несколько из них?
2. Элемент RadioGroup - как по умолчанию пометить какую то кнопку? можно ли кнопки располагать горизонтально а не в столбик?
3. Есть элемент чекбокс. При отметке этого чекбокса требуется на элементе Edit (строчка ввода), свойство Enabled делать в фолс  - т.е. отключать. Сделал вроде бы стандартными средствами как в примере, но не работает. Это возможно или нет?

265

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Валентос пишет:

1. Есть у меня пачка радиокнопок (RadioButton). Как выбрать несколько из них?

Никак. Все радиокнопки на одном Paren'е взаимозависимы.

Валентос пишет:

2. Элемент RadioGroup - как по умолчанию пометить какую то кнопку? можно ли кнопки располагать горизонтально а не в столбик?

См. пример ниже. Создаётся RadioGroup с 3-мя элементами по горизонтали, выбирается средний.

VCL = require "qvcl"

form = VCL.Form("mainForm")
form._= { position="podesktopcenter", height=200, width=300, Caption="RadioGroup тест" }

radio = VCL.RadioGroup(form)
radio._ = {  -- создадим RadioGroup с двумя элементами
    width=300, height=150, 
    Items={"Кнопка 1","Кнопка 2"}, 
    Caption="Заголовок RadioGroup" 
}

-- добавим еще элемент, динамически
radio.Items:Add("Кнопка3")

radio.Columns = 3  -- расположить в 3 столбца; у нас 3 элемента - значит все три будут в одну строку

radio.ItemIndex = 1 -- выбрать второй элемент (счёт с 0)

form:Show()

Конечно, свойства Columns и ItemIndex можно задать сразу при создании.

266

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Валентос пишет:

3. Есть элемент чекбокс. При отметке этого чекбокса требуется на элементе Edit (строчка ввода), свойство Enabled делать в фолс  - т.е. отключать. Сделал вроде бы стандартными средствами как в примере, но не работает. Это возможно или нет?

По идее - да, возможно.
Приведите, пожалуйста, код простого теста: на форме только CheckBox и Edit, где у вас это не работает. На нём можно будет посмотреть/поправить.

267 (2016-02-01 11:24:30 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Всё прекрасно работает

Edit     = vcl.Edit(Form,{})    
CheckBox = vcl.CheckBox(Form,{OnChange=function(x) if x.Checked then Edit.Enabled=false else Edit.Enabled=true end end})

Или напишем короче

Edit     = vcl.Edit(Form,{})    
CheckBox = vcl.CheckBox(Form,{OnChange=function(x) Edit.Enabled= not x.Checked end})

268 (2016-02-01 14:00:09 отредактировано Валентос)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Спасибо, с этим понятно. идем дальше.
за отображение формы после старта скрипта отвечает строка mainForm:Show() ? причем эта строка не включена в цикл main
как сделать так, чтобы скрипт крутился постоянно, а форма отображалась по событию?
мне надо отображать форму по нажатию клавиши. нажатие клавиш ловит сторонняя программа. эта же сторонняя программа создает файл в случае нажатия клавиши (определенной).
соответственно событие для отображение формы - появление файла.
пытаюсь сделать что то так:

function hotKey()
    local f = io.open("C:\\quik1")
    if f ~= nil then
        f:close()
        os.remove("C:\\quik1")
        mainForm:Show()
    end
end

если вызывать эту функцию не из main - ничего не происходит. скрипт работает, все работает, форма не появляется.
если же начать пихать это в цикл мейн - все виснет и все пропало.

269

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

NewForm = function ()
myForm =  VCL.Form( {...} )
...
...
myForm:Show()
end

Делаете квиковскую табличку с одной ячейкой, событие на эту ячейку:

function event_callback_color(t_id, msg, par1, par2)
if msg == QTABLE_LBUTTONDOWN then
 if not myForm then NewForm()
 else message("Форма открыта",2) end
end
end

270

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Валентос,
было бы намного удобнее и эффективнее, если бы вы приводил полностью рабочий тестовый (пробный) скрипт, воспроизводящий вашу проблему.
Т.е. такой скрипт, который бы можно было запустить у себя и предметно поправить.
Иначе не очень понятно, что же окружает ваш проблемный код, который на первый взгляд - рабочий. Значит проблема в окружающем коде, но вы его не приводите.

271

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Валентос пишет:

если вызывать эту функцию не из main - ничего не происходит. скрипт работает, все работает, форма не появляется.

Ищите ошибки в своем коде, всё должно работать.

Валентос пишет:

если же начать пихать это в цикл мейн - все виснет и все пропало.

Не нужно из main() обращаться к библиотеке QVCLua. Никогда и ни при каких обстоятельствах. Иначе Квик будет падать.

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

вот рабочий код. Смысл такой: скрипт крутится всегда, но ничего не делает. При условном событии (в данном случае это появление файла quik1) - скрипт отображает форму.

local VCL = require "qvcl"

function OnStop()
    mainForm:Release() 
    is_run = false 
end

mainForm = VCL.Form({Name = "mainForm", 
                    Height = 240, 
                    Width = 390, 
                    Caption = "Новая заявка", 
                    Position = "poScreenCenter", 
                    OnClose = Handler})

LongBtn = VCL.RadioButton(mainForm, {Name = "LongBtn", 
                                    top=20, 
                                    left=10, 
                                    Caption="Long", 
                                    Tag=10})

--проверяем событие (появление файла)
f = io.open("C:\\quik1")
    if f ~= nil then
        f:close()
        os.remove("C:\\quik1")
        mainForm:Show()
        
    end

is_run = true    

function main()
    while is_run do
        sleep(50)
    
    end
    sleep(300)
end

273 (2016-02-02 09:58:04 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

В основном потоке ежесекундный опрос наличия файла.

[+]Spoiler
local VCL = require "qvcl"

function OnStop()
    mainForm:Release() 
    is_run = false 
end

function checkfile()
    local f = io.open("C:\\quik1")
    if f then
        f:close()
        if not mainForm.Visible then
            os.remove("C:\\quik1")
            mainForm.Visible=true
        end
    end
end

mainForm = VCL.Form({Name = "mainForm", 
                    Height = 240, 
                    Width = 390, 
                    Caption = "Новая заявка", 
                    Position = "poScreenCenter", 
                    OnClose = function(x) x.Visible=false end})

LongBtn = VCL.RadioButton(mainForm, {Name = "LongBtn", 
                                    top=20, 
                                    left=10, 
                                    Caption="Long", 
                                    Tag=10})

tmr     = VCL.Timer(mainForm, {Interval=1000--[[миллисекунд]], Enabled="True", OnTimer=checkfile})

is_run = true    

function main()
    while is_run do
        sleep(50)   
    end
    sleep(300)
end

274

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Добрый день!
Не подскажете, из-за чего скрипт, использующий библиотеку может 5 раз нормально запускаться, а на 6-й (или на любой другой) выдавать Unknown error. Possible unhandled exception.
Квик перегружаешь, опять несколько раз запускается, потом рушится.

275

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Есть какая-то причина нестабильности при перезапуске, но до неё еще никто не докопался, увы.