301 (2016-02-10 18:40:19 отредактировано kalikazandr)

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

А вот у вас написано:
myForm        =  vcl.Form(...)
Вы какую библиотеку используете vlc или qvlc? В коде не видно, какую вы загрузили.

302 (2016-02-10 19:11:06 отредактировано masalexven)

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

kalikazandr пишет:

А вот у вас написано:
myForm        =  vcl.Form(...)
Вы какую библиотеку используете vlc или qvlc? В коде не видно, какую вы загрузили.

qvcl.dll файл от 14.05.2015
За основу кода брал пример отсюда: http://quik2dde.ru/viewtopic.php?pid=725#p725

303

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

masalexven пишет:
kalikazandr пишет:

А вот у вас написано:
myForm        =  vcl.Form(...)
Вы какую библиотеку используете vlc или qvlc? В коде не видно, какую вы загрузили.

qvcl.dll файл от 14.05.2015
За основу кода брал пример отсюда: http://quik2dde.ru/viewtopic.php?pid=725#p725

нате

#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 была русская "С" почему-то

304 (2016-02-11 09:58:23 отредактировано masalexven)

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

kalikazandr пишет:

в classcodef была русская "С" почему-то

Спасибо большое, обязательно попробую Ваш вариант.
А что есть "#xzxz.lua"

305 (2016-02-10 22:43:50 отредактировано kalikazandr)

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

masalexven пишет:

А что есть "#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 дня, но минимальное значение дней из доступных (наиболее торгуемые).

306

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

kalikazandr пишет:
masalexven пишет:

А что есть "#xzxz.lua"

Ну, хз - название этого куска кода, раньше писал так:
--xzxz.lua и дальше сам код, сейчас пишу так "#xzxz.lua"- работает только в первой строке файла.

На счет куска кода smile понял.
За функцию спасибо. Разумно, добавлю. Еще раз большое спасибо за разбор ошибок.

307

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

masalexven пишет:

На счет куска кода smile понял.
За функцию спасибо. Разумно, добавлю. Еще раз большое спасибо за разбор ошибок.

Не за что, обращайтесь. По возможности не копируйте весь предыдущий пост, убирайте все лишнее между тегами.

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

Здравствуйте.
Есть функция, которая делит количество денег, на го и получает доступное количество контрактов (фьюч).

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 и запускается автоматически при старте квика, то пока квик не подключен к серверу, эта функция работает некорректно (из за того, что идет обращение к таблицам в квике).
и идет некорректное отображение. Если же скрипт перезапустить при подключенном квике, то все показывает правильно.
как победить?

309

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

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

Если же скрипт перезапустить при подключенном квике, то все показывает правильно.
как победить?

function main()
  while is_run do
    if isConnected() == 1 then
      --делаем расчеты
    end
    sleep(1)
  end
end

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

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)

311

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

Что-то вы путаете.

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

312

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

kalikazandr пишет:

Что-то вы путаете.

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 потока, не нужно так делать.

313

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

GREEN_X5 пишет:

Здесь идет обращение к библиотеке из  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

314 (2016-03-05 11:46:42 отредактировано Валентос)

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

как в элементе типа label задать размер шрифта?
Label = VCL.Label(mainForm, {top=20, left=300, Color=0x00EEEE, Caption = SECCODE})

и как в элементе типа RadioButton, задать параметр color=123, если этот радиобатон выбран?

315 (2016-04-05 19:08:17 отредактировано PavelS)

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

Помогите разобраться с проблемой...
Есть форма с несколькими вкладками, на каждой вкладке созданы еще вкладки (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()

http://s017.radikal.ru/i415/1604/e3/d6d8b7ad5f07.jpg

316

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

У кого - то получилось вставить рисунок на кнопки BitBtn или Speed?

317

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

PavelS пишет:

Помогите разобраться с проблемой...

Попробуйте по таймеру (1-2 ms)  обновлять контролы sender.Visible = true
Если слабая видюха, то может помочь

318

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

Подскажите, как в StringGrid сделать выбранную программно ячейку видимой - хочу "Ctrl + F" припутать.
В делфи все просто, а в Qvcl не работает - всегда видны первые 10 строк, а строк порядка 300 - 400.
Спасибо.

319

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

kalikazandr пишет:

Подскажите, как в StringGrid сделать выбранную программно ячейку видимой - хочу "Ctrl + F" припутать.

Верно ли я понял, что в StringGrid хочется иметь диалог поиска по тексту в ячейках?

320

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

swerg пишет:
kalikazandr пишет:

Подскажите, как в StringGrid сделать выбранную программно ячейку видимой - хочу "Ctrl + F" припутать.

Верно ли я понял, что в StringGrid хочется иметь диалог поиска по тексту в ячейках?

Не совсем. Функции поиска нужной ячейки не сложно написать или реакцию на "Ctrl + стрелки".
Фишка в том - что не получается сделать видимой выбранную программно ячейку/строку/колонку.
В таблице всегда первая строка видна.
А сделать видимой 500 -ю строку - только скролом или колесиком, что очень не удобно.
Вот что-то типа этого:
StringGrid.TopRow = StringGrid.RowCount - 10--задали номер верхней видимой строки в таблице.
goThumbTracking тоже не работает, ну да ладно.

321

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

У кого-нибудь текст из ячеек копируется (Ctrl+C) в StringGrid при немодальном окне?

322 (2017-06-01 19:32:08 отредактировано kalikazandr)

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

Всем привет! Подскажите, как получить таблицу из ListBox? Построчно можно так:

for i=0, ListBox.Items.Count-1 do
  ListBox.ItemIndex = i
  str = ListBox:GetSelectedItems()[1]
end

но это капец как долго, если большой список.

323

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

Как запретить прокрутку колесиком мыши в StringGrid? Выделенная ячейка должна быть только та, по которой щелкнули ЛКМ.
Для прокрутки есть полоса прокрутки.
Вырвать колесо мыши?

324

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

kalikazandr пишет:

Всем привет! Подскажите, как получить таблицу из ListBox?
но это капец как долго, если большой список.

В смысле как получить список всех строк как Lua-таблицу получить одним приёмом?

325

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

kalikazandr пишет:

Как запретить прокрутку колесиком мыши в StringGrid?

На просторах интернета на такой же вопрос попался следующий ответ:

А на деле, у грида есть события OnMouseWheelUp и OnMouseWheelDown, достаточно в их обработчик поместить одну строку:
Handled:=true;
и колесико обрабатываться не будет

У меня под рукой Lazarus'а не оказалось, но думаю, там такие же события есть.
На QUIK тоже не проверял, звиняйте.
По результату - отпишитесь: вышло или нет.