iCode – код параметра, выводимого в колонке

Страницы: 1
RSS
iCode – код параметра, выводимого в колонке
 
Это код параметра точно? Не номер колонки?



AddColumn

Функция добавляет колонки в таблицу с идентификатором «t_id».  

Формат вызова:  

NUMBER AddColumn (NUMBER t_id, NUMBER iCode, STRING name, BOOLEAN  is_default, NUMBER par_type, NUMBER width)

Параметры:  

  • iCode – код параметра, выводимого в колонке,
  • name – название колонки,
  • is_default – параметр не используется
                       
 
Подскажите пожалуйста какая последовательность создания таблицы?
Порядок функций 1,2,3,4,5,6,7,8...
                       
 
Похоже  что хотели сделать действительно код параметра, для добавления значений в ячейки было бы удобно, но передумали и сделали просто номер колонки
                       
 
Евгений, Да, это номер колонки. Можно нумеровать с нуля (у меня там невидимый столбец) или с единицы. Код -1 для столбца с номерами строк.
 
А что в колонку с номерами строк тоже можно название вставить?
                       
 
невидимый столбец создается автоматически и не имеет номера. Все что создается пользователем начинается с любого номера, главное что бы они были по возрастанию, даже 150,180,200, и тд
                       
 
AddColumn(t_id_Menu, 10, "Статус", true, QTABLE_STRING_TYPE, 20)
  AddColumn(t_id_Menu, 20, "Инструмент", true, QTABLE_STRING_TYPE, 20)
  AddColumn(t_id_Menu, 30, "Таймфрейм", true, QTABLE_STRING_TYPE, 16)
                       
 
Евгений, Не знаю, у меня не получилось. Но на клик мышкой по этому столбцу и по его заголовку события нормально обрабатываются.

Последовательность действий (у меня):
1. AllocTable
2. SetTableNotificationCallback
3. AddColumn
4. CreateWindow
5. SetWindowPos
6. InsertRow
7.  SetColor
8. SetCell
9. DestroyTable
 
Справка конечно так себе, примеров мало
                       
 
Евгений, Ничего подобного! Я невидимые столбцы создаю сам - они не для юзера, а для самого скрипта. Вот так:
AddColumn(T,0,"",true,QTABLE_STRING_TYPE,0);
AddColumn(T,1,"Тикер",true,QTABLE_STRING_TYPE,8);
...
 
Спасибо!
                       
 
Аа вон как, просто ширину 0 сделать
                       
 
Для того что бы была возможность вставлять новые колонки без переделки всей таблицы лучше нумерацию делать через 10, чтобы можно было добавлять 11,12, колонки например
                       
 
Цитата
Евгений написал:
Справка конечно так себе, примеров мало

https://arqatech.com/ru/support/files/
Документация по языку LUA в QUIK и примерыzip, 4.3 МБ
https://arqatech.com/upload/iblock/194/quik_lua.zip
"Интерпретатор языка Lua.pdf"
 
Евгений, Вот уж извините! Это источник ТАКИХ глюков, с которыми Вы потом в жисть не разберётесь! Я даже при изменении строк в таблице перебиваю её заново ( Clear + InsertRow)! А при пропадании текста в таблице и вообще приходится делать DestroyTable + AllocTable!
 
Цитата
swerg написал:
"Интерпретатор языка Lua.pdf"
стр. 112

форум просто звиздец, в любой момент написание сообщения прекращается - и всё. и только отправить можно, ничего не добавить
впрочем весь QUIK такой
 
Цитата
swerg написал:
Цитата
Евгений написал:
Справка конечно так себе, примеров мало

https://arqatech.com/ru/support/files/
Документация по языку LUA в QUIK и примерыzip, 4.3 МБ
https://arqatech.com/upload/iblock/194/quik_lua.zip
"Интерпретатор языка Lua.pdf"
Вот Спасибо!
                       
 
Цитата
Владимир написал:
Евгений, Вот уж извините! Это источник ТАКИХ глюков, с которыми Вы потом в жисть не разберётесь! Я даже при изменении строк в таблице перебиваю её заново ( Clear + InsertRow)! А при пропадании текста в таблице и вообще приходится делать DestroyTable + AllocTable!
Неужели все так плохо?))
                       
 
Евгений, Нет, всё намного хуже.  :smile: У меня четверть, если не треть всего кода посвящена именно компенсации различных глюков. Из непобеждённых остался такой: при обрыве и восстановлении связи эта скотина присылает целую колоду прерываний OnTrade,некоторые из которых были исполнены ещё вчера!
 
но он присылает вчерашние сделки вечерней сессии наверно, так задумано наверно
                       
 
можно ограничение поставить по времени на обработку
                       
 
Евгений, Ну я уж и не знаю, каким местом можно ТАКОЕ задумывать! :smile:

Для меня в своё время было шоком, что на одно событие приходят несколько прерываний, потом - что они приходят вразнобой, теперь вот это...

Да сделать-то многое можно - труднее всего выявить ошибку, исправить на порядок проще. Но мне просто противно обрабатывать подобные глюки - тем более, что они иногда резко усложняют код. Например, удаление несработавших заявок - это просто песня! Хотя я вообще никак не контролирую, сработает KILL_ORDER или нет. И прерывания OnOrder выбросил нафиг, как и подавляющее большинство остальных.
 
Выкладываю те самые файлы из документации так как потратил на их копирование из pdf кучу времени, может хоть кому то удастся его сэкономить

Скрытый текст

--quik_table_wrapper.lua


Скрытый текст

--ntime.lua

Скрытый текст

--x0x.lua

Скрытый текст
                       
 
Я правильно понимаю, что созданную таблицу нельзя сохранить вынесенной за пределы Quik ?

В принципе координаты и размер таблицы можно сохранить в файл, но она не сможет быть вынесена за пределы окна квик, так или есть какой то способ?
                       
 
Хотя нет горячие клавиши же есть ctrl +alt но как это автоматизировать?
                       
 
Евгений, что вы имеете ввиду под "вынесена за пределы квика"?

Сбросить и загрузить табличные данные нетрудно. Надо только добавлять строки и столбцы с идентификаторами идущими по порядку начиная с 1.

Код
local function savetable ( tbl, fname, separator )
    local file, errmsg = io.open ( fname, "w" )
    if not file then error ( errmsg ) end

    local nr, nc = GetTableSize ( tbl )
    if not nr or not nc then error ( "Invalid table handler: " .. tostring ( tbl ) ) end

    if not separator then separator = "," end
    local replace = "\\" .. separator

    local data = { }
    for r = 1, nr do
        for c = 1, nc do
            local v = GetCell ( tbl, r, c )
            data[ #data + 1 ] = tostring ( v.value == 0 and v.image or tostring ( v.value ) ):gsub ( separator, replace )
            data[ #data + 1 ] = separator
        end
        data[ #data ] = "\n"
    end
    file:write ( table.concat ( data ) )
    file:close ( )
end

local function loadtable ( tbl, fname, separator )
    local file, errmsg = io.open ( fname, "r" )
    if not file then error ( errmsg ) end

    local nr, nc = GetTableSize ( tbl )
    if not nr or not nc then error ( "Invalid table handler: " .. tostring ( tbl ) ) end

    if not separator then separator = "," end
    local replace = "\\" .. separator
    local pattern =  "[^" .. separator .. "]*"

    local r, c= 0, 0
    for line in file:lines ( ) do
        c = 0
        r = r + 1
        for tok in line:gmatch ( pattern ) do
            col = col + 1
            tok = tok:gsub ( replace, separator )
            local num = tonumber ( tok )
            if num then
                SetCell ( tbl, r, c, tok, num )
            else
                SetCell ( tbl, r, c, tok )
            end
        end
    end
end
 
Вы приводите пример сохранения таблицы Lua в файл и загрузку, это не то.

Я имел в виду видимую таблицу Quik, созданную из скрипта , которую можно вынести за пределы окна программы на другой монитор например.Сейчас это доступно для таблиц при помощи ctrl +alt и захвата таблицы мышкой с переносом за область квика, но таблица созданная из Lua не сохраняется в таком положении
                       
 
Евгений, ЗАЧЕМ?! Это же ВАШ скрипт создавал эту таблицу! Следовательно, он всё и знает. Это всего лишь таблица визуализации, она только для юзера, а "настоящие" данные должны храниться в таблицах Lua. У меня (как и у Вас, насколько я вижу) каждая строка таблицы соответствует отдельному тикеру. Вы думаете, зачем у меня невидимый нулевой столбец? Там как раз и хранится "настоящий" идентификатор этого тикера в моей Lua-таблице (точнее, дереве), и все необходимые действия с инструментом я провожу там, и ТОЛЬКО там! И там можно делать с ними, что хошь: "выносить за пределы Quik", сохранить в файл и т.д. Я сейчас делаю это каждые 5 минут (на случай падения Квика, которые происходят всё чаще).

Клава и мышь обрабатываются в прерываниях (коллбеках), установленных по SetTableNotificationCallback. Я, правда, не знаю, есть ли там комбинации с ctrl и alt, но мне пока что хватает мыши и пробела с Enter. :smile:

Артем, ЩАЗ! Что толку от Ваших "идентификаторов, идущих по порядку начиная с 1"? А ну, кликните мышой по заголовку какого-нить столбца! Что случится с Вашими "идентификаторами"? Правильно, Большая Жопа. Обсуждалось тут уже (в т.ч. с моим участием).
 
Цитата
Евгений написал:
Я имел в виду видимую таблицу Quik, созданную из скрипта , которую можно вынести за пределы окна программы на другой монитор например.
  Может быть вам подойдет следующий вариант.
  Вы оформляете функцию создания таблицы QUIK в виде отдельного файла. Далее загружаете этот файл с помощью loadfile  в нужный свой скрипт и в нужном месте запускаете байт-код, полученный в loadfile, для создания таблицы QUIK. Это можно делать на любом рабочем месте.
 
Нет это все не то, Вы не поняли то что мне надо)), мой вопрос лежит в области визуализации и размещения таблицы (окна) Quik созданной из Lua. Думаю тут надо использовать w32.dll для автоматизации переноса окна таблицы за пределы квика, методом отсылки сообщений типа  этому окну
C++
BOOL PostMessageA(   HWND   hWnd,   UINT   Msg,   WPARAM wParam,   LPARAM lParam );
                       
 
Евгений, Вот уж что меня ВААПЩЕ не интересует! Но если очень хочется - способ один: переместить туда необходимые ДАННЫЕ и там снова делать с ними, что хошь. Причём ЛЮБЫЕ данные, а не только сраную таблицу. Тем более, что сервис для визуализации в Квике достаточно убогий.
 
Владимир, действительно. Опять я наивно полагал что сделано по-человечески а не через задницу - разбалован совсем западными программистами видимо. 😐

Вопрос стоит в том, чтобы программно вывесить таблицу за пределы окна квика, и таковой функционал на стороне Lua начисто отсутствует. Если вручную его вытащить, то потом можно координаты ставить как угодно, но если этого не сделать, то таблица будет просто двигаться внутри окна квика и просто делать километровые скролбары. Тут вообще имел бы смысл чтобы квик работал в многооконном режиме, а не заталкивал все окошки в главное окно.
 
Артем, Во-первых, западные программисты ничем не лучше наших - был знаком лично с немалым их количеством, в т.ч. с виртуозами, в т.ч. с лучшим программистом мира 1993 года. Во-вторых, вопрос должен быть переформулирован как "вывесить ДАННЫЕ таблицы за пределы окна квика", и он достаточно легко может быть реализован. В-третьих, основная задача Квика - организация надёжной торговли ценными бумагами, и чем меньше он будет уметь ВНЕ этой задачи - тем лучше!
 
Владимир, было бы уместно в таком случае делать "безголовый" клиент, который по локалхосту может отправлять данные в браузер - а как пользователи будут их отображать это будет их личное дело. Как раз можно было бы делать скины, дополнительные данные отображать, с помощью WebGL рисовать, и прочие свистелки и перделки задействовать.
 
Артем, Да, "уместно в таком случае делать "безголовый" клиент", который будет принимать от юзеров заявки и давать им квитанции об их исполнении или отклонении. Это БАЗОВЫЙ уровень Квика. Ну, а дать ему дополнительно программный сервис или всякие там таблицы с графиками - это уже конкуренция между разработчиками софта для привлечения клиентов. В любом случае, базовый сервис должен работать БЕЗУКОРИЗНЕННО (по крайней мере, начиная с версии 1.1.1.3). А прочие свистелки и перделки" - это уже имеет значение только при обеспечении этого условия. А на деле что?
 
Цитата
Артем написал:
Владимир , было бы уместно в таком случае делать "безголовый" клиент, который по локалхосту может отправлять данные в браузер - а как пользователи будут их отображать это будет их личное дело.

Цитата
Артем написал:
Артем , Да, "уместно в таком случае делать "безголовый" клиент", который будет принимать от юзеров заявки и давать им квитанции об их исполнении или отклонении. Это БАЗОВЫЙ уровень Квика.

 Коротко, четко, практически манифест для разработчиков QUIK.
------
 Глядя, на такие комментарии, мне хочет завершить мой конфликт с swerg. На самом деле, он старается помочь многим пользователям форума, Кроме того, он выкладывает свои профессиональные разработки, полезные многим пользователям.
 
Можно поднять тему? Вопрос собственно по w32.dll,
вот такой код запросто находит окно QUIK:
Код
w32=nil
w32 = require ("w32")
hWnd = 0
function main(  )
hWnd = w32.FindWindow("InfoClass","")
message("hWnd= "..tostring(hWnd),1)
hWnd = w32.FindWindow("Robo","")
message("hWnd= "..tostring(hWnd),1)
end

Но мой "Robo" = 0! Проверял Spy++. Help me! Евгений, у Вас получилось PostMessage?

 
Нет не стал я этим окном заниматься пусть в квике будет
                       
Страницы: 1
Читают тему
Наверх