26

Re: Визуальный интерфейс VCLua в QUIK

doctord919, по поводу "не отображается"
1) Не забудьте открыть стакан по соответствующему инструменту. Без этого QUIK не получает котировки и, соответственно, в Lua они не доступны.
2) Если нет измененя котировок (например, на демо) - то ничего и не отрисуется, т.к. своё окно заполняется только после первого изменения котировок.
3) По вашему коду: не надо обращаться из main к визуальным компонентам напрямую, если они созданы вне main(), т.к. это разные потоки, а интерфейсные функции визуальной библиотеки на это не расчитаны.

Вообще, я попробовал - работает как-то крайне нестабильно, у меня даже и не получилось ни разу нормально отобразить стакан котироврок в приведенном Rilin примере, причем в основном все заканчивалось падением терминала, что очень печально, т.к. ненадежно получается.

Буду разбираться.

и еще
Я вам письмо написал - ответьте на него, пожалуйста.

27

Re: Визуальный интерфейс VCLua в QUIK

Подскажите, как назначить иконку для TrayIcon?
Дергаю ее всеми способами, но в трее все равно пусто.

28

Re: Визуальный интерфейс VCLua в QUIK

Camill, если вас не затрудник - приведите вообще пример кода для "запуздыривания где часики". Ну чтобы было от чего отталкиваться, а там уже допилим.
Или собственно это и не получается впринципе?

29

Re: Визуальный интерфейс VCLua в QUIK

Вот такие две строки отображают пустую иконку.
trayIcon = VCL.TrayIcon("TrayIcon")
trayIcon._= {OnClick = "OnTrayClick", Hint = "Робот", Visible = true}

OnClick не приходит, правда, но это вопрос номер два.

30 (2013-03-31 14:14:10 отредактировано Camill)

Re: Визуальный интерфейс VCLua в QUIK

Теоретически, иконка выбирается так (на практике не работает):
trayIcon:Icon(getScriptPath() .. "\\form.ico")

В документации метод помечен как DEPRECATED, но альтернатив я не вижу.

31

Re: Визуальный интерфейс VCLua в QUIK

Создал базовый код из примеров - окно с меню.
Окно открывается, меню есть, но при выборе "Открыть..." или "Выход" или закрытии окна появляется исключение в QUIK и терминал вылетает. Как я понимаю, ошибка возникает в момент вызова функций после нажатия кнопок.
Эта ошибка из-за: 1.моего кривого кода, 2.библиотеки VCL, 3.недоработки QUIK? И если знаете причину, то подскажите решение. Код ниже. Спасибо.
версия QUIK 6.5.2.11

-- Загружаем модули VCL
require "vcl"

-- Определяем глобальные переменные
IS_RUN         = true      -- статус скрипта enabled/disabled
SCRIPT_NAME    = "TESTING" -- название скрипта
SCRIPT_VERSION = "0.0.0.1" -- версия скрипта

-- Инициализация
function OnInit()
    message("Инициализация OnInit()", 1)
end

-- ОКНО СКРИПТА
MAIN_WINDOW = VCL.Form("mainForm")

-- Параметры окна скрипта
MAIN_WINDOW.Caption      = SCRIPT_NAME .. " " .. SCRIPT_VERSION -- заголовок основного окна
MAIN_WINDOW._            = {
                            Position = "poDesktopCenter",
                            Height = 200,
                            Width = 300,
                            OnClose = "OnFormClose"
                            }
MAIN_WINDOW.onCloseQuery = "onCloseQueryEventHandler" -- закрытие окна

-- Определяем операции после нажатия кнопок
MAIN_ACTIONS = VCL.ActionList(MainForm,"mainActions")
MAIN_ACTIONS: LoadFromTable({
                                {Name = "action_Open", Caption = "&Открыть...", Shortcut = "Ctrl+O", onExecute = "onMenuOpenClick"},
                                {Name = "action_Exit", Caption = "&Выход", Shortcut = "Alt+F4", onExecute = "onMenuExitClick"},
                            })

-- Параметры главного меню скрипта
MAIN_MENU = VCL.MainMenu(MAIN_WINDOW,"mainMenu")
MAIN_MENU: LoadFromTable({
                            {Name = "mm_file", Caption = "&Файл",
                                Submenu = {
                                            {Action = MAIN_ACTIONS:Get("action_Open")},
                                            {caption = "-",},
                                            {Action = MAIN_ACTIONS:Get("action_Exit")},
                                          }
                            }
                        })

-- Запускаем окно скрипта
MAIN_WINDOW:ShowModal()

-- Основная функция
function main()
    while IS_RUN do
        sleep(1000)
    end
end

-- Завершение работы
function OnStop()
    IS_RUN = false
end

-- Закрытие окна скрипта
function onCloseQueryEventHandler(Sender)
    --message("onCloseQueryEventHandler()", 1)
    return true -- да, закрываем
end

-- "Открыть..." в меню окна
function onMenuOpenClick(Sender)
    --message("onMenuOpenClick()", 1)
end

-- "Выход" в меню окна
function onMenuExitClick(Sender)
    --message("onMenuExitClick()", 1)
    MAIN_WINDOW:Close()
end

32

Re: Визуальный интерфейс VCLua в QUIK

new_user, я менюшки не создавал, но навскидку - а где код закрытия формы, где код обработчика OnFormClose?

33

Re: Визуальный интерфейс VCLua в QUIK

В коде обработчика OnFormClose нет, но ошибка появляется даже когда выбрать в созданном окне в меню Файл > Открыть. На эту кнопку есть пустой обработчик onMenuOpenClick(Sender). Если в нем раскомментировать message("onMenuExitClick()", 1), то сообщения в QUIK не будет - сразу ошибка.

34

Re: Визуальный интерфейс VCLua в QUIK

new_user,
дочитайте, пожалуйста, первое сообщение этой темы. Там есть правильный код для QUIK.
В частности, замените
MAIN_WINDOW:ShowModal()
на
MAIN_WINDOW:Show()

и
MAIN_WINDOW:Close()
на
MAIN_WINDOW:Free() -- только при использовании библоиотеки с этого сайта!

Далее, зачем вы используете ActionList? вам мало проблем с визуальными интерфейсами QUIK? Посмотрите как сделано меню в примерах в этой теме, никаких ActionList. И Sender в обработчиках нет (хотя это и странно).

35 (2013-04-04 22:37:51 отредактировано Camill)

Re: Визуальный интерфейс VCLua в QUIK

admin, а по моему вопросу ничего не смотрели?
Я в паскалевских исходниках не смог разобраться, там кого поопытнее надо.

36

Re: Визуальный интерфейс VCLua в QUIK

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

37

Re: Визуальный интерфейс VCLua в QUIK

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

38

Re: Визуальный интерфейс VCLua в QUIK

admin спасибо.
У меня ошибка в ActionList была. Правильная запись

MAIN_ACTIONS = VCL.ActionList(MAIN_WINDOW,"mainActions")

ну и поправить, как вы и писали, добавив IS_RUN = false
С ActionList все работает, с Sender также пока никаких проблем.

39

Re: Визуальный интерфейс VCLua в QUIK

new_user,
спасибо что отписались о найденной ошибке в коде.

И не забудье ShowModal на Show поменять - иначе у вас main() не запустится.

40 (2013-06-12 19:47:37 отредактировано Arhn)

Re: Визуальный интерфейс VCLua в QUIK

Подскажите, пожалуйста, как создать поле ввода? Думал сделать таблицу с одной колонкой и строкой, но не знаю как туда данные вписывать. Может есть справочник по визуальному интерфейсу? Или это как-то по другому делается?
Спасибо.

41 (2013-06-16 02:14:36 отредактировано Arhn)

Re: Визуальный интерфейс VCLua в QUIK

Arhn пишет:

Подскажите, пожалуйста, как создать поле ввода? Думал сделать таблицу с одной колонкой и строкой, но не знаю как туда данные вписывать. Может есть справочник по визуальному интерфейсу? Или это как-то по другому делается?
Спасибо.

Сам спросил сам же и отвечаю. Оказывается все уже есть http://vclua.luaforge.net/vclua-0.3.2.html#Edit big_smile

42 (2013-06-16 13:50:40 отредактировано Arhn)

Re: Визуальный интерфейс VCLua в QUIK

Теперь другой вопрос smile. Как в StringGrid сделать одну колонку не редактируемой, вторую редактируемой по двойному клику, третью в виде CheckBox-ов? Как здесь http://vclua.99k.org/images/vclua_controls_shot.JPG

43

Re: Визуальный интерфейс VCLua в QUIK

Arhn,
по поводу Edit вот небольшой примерчик.

Выводит элементы интерфейса:

  • поле ввода Edit

  • текст Label

  • кнопку Button

Обработчики:

  • onEditBoxChange - при вводе символов в Edit ттеденный текст автоматически дублируется в Label (2 раза через тире)

  • onButtonClick - если ввести число и нажать на кнопку "х 2" - выведется окно сообщений с умноженным на 2 значением из поля ввода Edit

  • правильные обработчики закрытия окна/остановки скрипта.

require "vcl"

mainForm = VCL.Form("mainForm")
mainForm._= { position="podesktopcenter", height=200, width=300, Caption="Edit test", OnClose = "OnFormClose" }

editLabel = VCL.Label(mainForm,"editLabel")
editLabel._ = { Top=30, Left=20, Caption="Edit box:" }

editBox = VCL.Edit(mainForm,"editBox")
editBox._ = { Top=26, Left=70, width=120, height=10, onchange="onEditBoxChange" }

outLabel = VCL.Label(mainForm,"outLabel")
outLabel._ = { Top=50, Left=20, Caption="" }

button = VCL.Button(mainForm,"button")
button._ = { Top=70, Left=20, width=80, height=25, caption="x 2", onclick = "onButtonClick" }

mainForm:Show()

is_run = true    
function main()
  while is_run do
    sleep(50)
  end
end

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


function OnFormClose(Sender, CloseAction)
  is_run = false
  mainForm:Release()
end

function onEditBoxChange(sender)
  outLabel.Caption = editBox.Text .. "-" .. editBox.Text;
end

function onButtonClick(sender)
  local k = tonumber(editBox.Text);
  if k == nil then
    message("'" .. editBox.Text .. "' is not a number", 2);
  else
    message(tostring(k) .. " x 2 = " .. tostring(k*2), 1)
  end
end

https://quik2dde.ru/static-img/26/test-edit.png

Про остальное чуть позже, сорри.

44 (2013-06-20 19:26:42 отредактировано Arhn)

Re: Визуальный интерфейс VCLua в QUIK

admin пишет:

Arhn,
по поводу Edit вот небольшой примерчик.
Выводит поле ввода, при вводе в это поле символов они автоматически дублируются в Label под полем ввода (см. обработчик onEditBoxChange).
При нажатии кнопки "x2" в окно сообщений QUIK выводится результат умножения введенного числа на 2 (если введено число).

require "vcl"

mainForm = VCL.Form("mainForm")
mainForm._= { position="podesktopcenter", height=200, width=300, Caption="Edit test", OnClose = "OnFormClose" }

editLabel = VCL.Label(mainForm,"editLabel")
editLabel._ = { Top=30, Left=20, Caption="Edit box:" }

editBox = VCL.Edit(mainForm,"editBox")
editBox._ = { Top=26, Left=70, width=120, height=10, onchange="onEditBoxChange" }

outLabel = VCL.Label(mainForm,"outLabel")
outLabel._ = { Top=50, Left=20, Caption="" }

button = VCL.Button(mainForm,"button")
button._ = { Top=70, Left=20, width=80, height=25, caption="x 2", onclick = "onButtonClick" }

mainForm:Show()

is_run = true    
function main()
  while is_run do
    sleep(50)
  end
end

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


function OnFormClose(Sender, CloseAction)
  is_run = false
  mainForm:Release()
end

function onEditBoxChange(sender)
  outLabel.Caption = editBox.Text .. "-" .. editBox.Text;
end

function onButtonClick(sender)
  local k = tonumber(editBox.Text);
  if k == nil then
    message("'" .. editBox.Text .. "' is not a number", 2);
  else
    message(tostring(k) .. " x 2 = " .. tostring(k*2), 1)
  end
end

Про остальное чуть позже, сорри.

Большое Вам человеческое СПАСИБО, но даже этот небольшой примерчик очень помог cool.
А в таблице можно задать тип ячейки и её редактируемость?

45

Re: Визуальный интерфейс VCLua в QUIK

Проблему с редактированием ячеек в таблице решил кое как. Осталось решить как сделать в таблице Drag and Drop по ячейкам? Может кто подскажет?

46

Re: Визуальный интерфейс VCLua в QUIK

Может быть повторюсь и где-то это уже было,  но у кого-нибудь возникает проблема с повторным запуском скрипта?
Такое пишет: "Unknown error. Possible external module error." И еще иногда "Disk full"
Может какая-то распространенная ошибка?

47

Re: Визуальный интерфейс VCLua в QUIK

jestpounder пишет:

Может быть повторюсь и где-то это уже было,  но у кого-нибудь возникает проблема с повторным запуском скрипта?
Такое пишет: "Unknown error. Possible external module error." И еще иногда "Disk full"
Может какая-то распространенная ошибка?

У меня бывает (не всегда). Приходится перезапускать программу.

48

Re: Визуальный интерфейс VCLua в QUIK

А OnInit() нельзя вызывать из элемента интерфейса, по нажатию кнопки, например? Ну или как еще можно вклиниться в основной поток квика из интерфейса?

49

Re: Визуальный интерфейс VCLua в QUIK

jestpounder пишет:

А OnInit() нельзя вызывать из элемента интерфейса, по нажатию кнопки, например? Ну или как еще можно вклиниться в основной поток квика из интерфейса?

В общем-то никак. А Вам зачем?

50

Re: Визуальный интерфейс VCLua в QUIK

jestpounder пишет:

А OnInit() нельзя вызывать из элемента интерфейса, по нажатию кнопки, например? Ну или как еще можно вклиниться в основной поток квика из интерфейса?

Из какого элемента интенфейса? из диалога, созданного на VCLua? если да - то нпример по нажатию кнопки вполне можно. Ну после того, как скрипт запущен, разумеется.

Правда что значит "вклиниться в основной поток квика" - не очень понятно.