226

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

CyberTrader пишет:

Если в цикле с определённой периодичностью происходит замена параметра Text какого-либо элемента, в целях уменьшения нагрузки имеет ли смысл проверять, что элемент уже содержит данный текст?

if control.Text ~= Text then control.Text = Text end

Точный ответ даст только тест. В одном случае вы затрачиваете время на поиск Lua-переменной (если вставляете проверку), во втором случае - есть проверки в коде визуальной библиотеки Lazarus, при этом добавляется еще накладные расходы на вызов "метода" control.Text.
Что будет в итоге быстрее - кто его знает.

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

227

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

CyberTrader пишет:

GREEN_X5, если вы не поняли, можете не обращать внимания ))

Да, сразу недопёр, сорри, потому что сложно было проникнуться нужностью этих манипуляций. )
Предложу Вам свою модель. Вообще не будете дергать лишний раз библиотеку, ни на запись, ни на чтение

function OnParam(c,s)

  local var = (getParamEx(c,s, "LAST").param_value or 0)+0
  if var ~= Trade.LAST then Trade.LAST=var; Edit1.Text=var; end
  
  var = Trade.LAST/2
  if var ~= Trade.HALF then Trade.HALF=var; Edit2.Text=var; end

end

228

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

У MessageDlg существует параметр "Заголовок"?

229 (2015-12-24 10:44:33 отредактировано GREEN_X5)

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

CyberTrader пишет:

У MessageDlg существует параметр "Заголовок"?

Two versions of this function, ie first 'Caption' parameter is optional; if omitted, caption is missing from box
This is the most complete and elaborate of the message dialogs, and allows the programmer considerable control over the appearance of the dialog box. The parameters defining the kind of box and its icon are types rather than integer constants, and the buttons can be specified as a set in square brackets eg [mbRetry, mbIgnore, mbAbort, mbCancel]. The HelpCtx parameter is not currently implemented and should be set to zero. The return value from the Function is the identity of the button pressed, expressed as an integer (see the definitions below, [mrNone..mrAll]).
Допиливать нужно библиотеку, тогда можно будет

uses 
  Forms, Dialogs, LCLType, Controls;
 
procedure TryMessageDlg;
begin
  if MessageDlg('Question', 'Do you wish to Execute?', mtConfirmation, 
   [mbYes, mbNo, mbIgnore],0) = mrYes
  then { Execute rest of Program };
end;

230

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

Есть ли способ в этой библиотеке получить HWND окна/контрола?

231

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

Готового, доступного в Lua свойства для получения HWND нет, но вытянуть просто при желании.
Подскажите, а оно вам зачем? может есть другие средства для решения вашей задачи.
Ну или наоборот, станет понятно, что это нужно всем - тогда сделать будет смысл.

232 (2016-02-08 20:53:01 отредактировано Kerber)

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

Это мне нужно потому что я собираюсь писать с помощью этой библиотеки программу и мне нужен доступ к HWND для WinAPI. Это не связано с QUIK. Я вообще толком не знаю что это такое. Просто нашёл этот форум в поисковике. Здесь эта библиотека обсуждается более-менее активно.

Тем не менее после того как я написал то сообщение я решил попытаться добыть нужное самому. В итоге пришёл к двум вполне рабочим решениям.

1. Модификация самой библиотеки, благо есть исходный код.

Было решено добавить поле с числовым значением HWND к каждому контролу. Для этого после строки 410 в файле "src\LuaControl.pas" (вот эта строка).

LuaSetTableLightUserData(L, Index, HandleStr, Pointer(Sender));

Я добавил это:

LuaRawSetTableNumber(L, Index, 'WindowHandle', TWincontrol(Sender).Handle);

В итоге теперь у каждого контрола будет поле WindowHandle, наряду с просто Handle. Впрочем число в этом поле будет некорректным для объектов, которые его не имеют. Мне было лень делать проверку на это. Если надо, то смотрите второй способ.

2. Написание дополнительной библиотеки.

Этот способ мне нравится больше так как он позволяет не модифицировать основную библиотеку. А я не могу использовать модифицированную версию, так как при этом происходит баг с ListView. В него не добавляется текст, хотя сами строки появляются. Этого не происходит если использовать загрузчик (.exe) из примера docdemo (в нём VCL.dll уже встроена внутрь .exe). Странная ошибка и я не знаю как это исправить.

Вот DLL плюс её исходный код для Lazarus. Собрана для использования с файлом Lua52.dll. [url]https://yadi.sk/d/JBdtL8_XoWArq[/url]

Загрузка и использование.

VCLuaWin = require("VCLuaWin");
local hWindow = VCL.Form(nil, {Position = "poDesktopCenter"});
local hWnd = VCLuaWin.GetHWND(hWindow.Handle);
--> hWnd - число в десятичной системе, например 2099834. Возвращает nil при ошибке.

233 (2016-02-08 23:30:55 отредактировано swerg)

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

Смотрел, откуда же у всех объектов VCLua берётся свойство Handle, но в котором некая lightuserdata. Просто  в Delphi/Lazarus'е свойство Handle - это как раз и есть HWND.
Потом нашел: его специально добавляют в LuaProperties.pas, но хранят в нём ссылку на Delphi-объект.
Причем это имя задано как константа HandleStr = 'Handle' в Lua.pas, неожиданное место.

Наверное для QVCLua это всё можно поменять и наружу сделать именно свойство Handle, которое стандартно будет возвращать HWND окна.

Жаль только, Kerber, что вы так и не сказали зачем же вам поверх этой библиотеки понадобилось еще и WinAPI. Чего именно вам в ней не хватает, что хочется еще и через WinAPI поуправлять?

234 (2016-02-09 01:25:25 отредактировано Kerber)

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

Например для этой функции.

LRESULT iRet = SetWindowTheme(hWnd, L"Explorer", NULL);

Чтобы делать объекты красивее (строчки в ListView как в диспетчере задач).
http://jpegshare.net/images/e4/f7/e4f7205681d2298526f647d4e31e66cc.png

К тому же у меня есть одна библиотека для упаковки/распаковки 7-Zip архивов, и она требует чтобы ей передали hWnd для корректной работы Callback функции.

235

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

Kerber, спасибо за уточнение.
Хотя уж если библиотеку пересобирать - то может такие вещи в неё и добавлять... Но это дело вкуса конечно.
Правда не забывать, что SetWindowTheme применима только, наверное, с Windows Vista

236

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

Привет всем. подскажите пожалуйста у меня не работает выдает ошибку vcl.dll не является приложением  как это исправить версия квика 8.1.0.30
Все сделал согласно первой страници этой темы.

237

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

Пока что версия для x64 этой библиотеки не пересобрана. Т.е. нет версии для QUIK 8.
Вы первый, кто пожаловался на это wink
Пересоберу, выложу.

238

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

Благодарю заранее за труды. С нетерпением жду.

239

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

а можно на гитхабе сделать репу? будет проще коммитить исправления.

240 (2019-12-31 16:19:08 отредактировано toxa)

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

собрал из оригинальных исходников для x64: [url]https://www.dropbox.com/s/3e3cqb31mkgly6v/lua_vcl_x64.zip?dl=0[/url]
[s]работает, но валится при уничтожении форм. надо разбираться в чем дело.[/s] разобрался, проблема с фонтами. просто жесть как криво написано. в общем, пользуйтесь, кому нужно, с наступающим.

241

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

toxa пишет:

собрал из оригинальных исходников для x64: [url]https://www.dropbox.com/s/3e3cqb31mkgly6v/lua_vcl_x64.zip?dl=0[/url]
[s]работает, но валится при уничтожении форм. надо разбираться в чем дело.[/s] разобрался, проблема с фонтами. просто жесть как криво написано. в общем, пользуйтесь, кому нужно, с наступающим.

Спасибо, попользовался и в корзину, это какая то жесть.

242

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

kalikazandr пишет:

Спасибо, попользовался и в корзину, это какая то жесть.

именно с моей сборкой какая-то проблема?

243

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

toxa пишет:

именно с моей сборкой какая-то проблема?

Оно и так не стабильная версия, но лучше оригинальной, а х64 версия только ваша сборка из оригинальной версии. Оригинальную тут сильно правили, чтоб хоть мальца оно в квике работало, но заброшено, т.к. вышло обновление и продолжились исправления новой версии.
Стабильная версия x86 в соседнем топике [url]https://quik2dde.ru/viewtopic.php?id=111[/url]
На нее многие уже перешли и она не совместима с vcl, и нет х64 сборки.
квик7 загружается за 15-20 сек, а квик8 за 1-2 минуты, желание напрочь отбивает писать гуи))

244

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

я пересобрал под x64 из исходников отсюда: [url]https://quik2dde.ru/viewtopic.php?id=111[/url]
скачать x64 версию: [url]https://www.dropbox.com/s/3e3cqb31mkgly6v/lua_vcl_x64.zip?dl=0[/url]

245

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

toxa пишет:

я пересобрал под x64 из исходников отсюда: [url]https://quik2dde.ru/viewtopic.php?id=111[/url]
скачать x64 версию: [url]https://www.dropbox.com/s/3e3cqb31mkgly6v/lua_vcl_x64.zip?dl=0[/url]

Странно, но х64 не поддерживает кирилицу, в message знаки вопроса, а в х86 работало.
В любом случае эта ветка заброшена давно. библиотека не стабильна, не помогает даже отсутствие явных имен компонентов.
5-10 минут, терминал крошит. с таймерами быстрее крошит, а в main нельзя почти ничего делать.

246

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

kalikazandr пишет:

Странно, но х64 не поддерживает кирилицу, в message знаки вопроса, а в х86 работало.

воспользуйтесь вот этим:

local ansi_decode={
  [128]='\208\130',[129]='\208\131',[130]='\226\128\154',[131]='\209\147',[132]='\226\128\158',[133]='\226\128\166',
  [134]='\226\128\160',[135]='\226\128\161',[136]='\226\130\172',[137]='\226\128\176',[138]='\208\137',[139]='\226\128\185',
  [140]='\208\138',[141]='\208\140',[142]='\208\139',[143]='\208\143',[144]='\209\146',[145]='\226\128\152',
  [146]='\226\128\153',[147]='\226\128\156',[148]='\226\128\157',[149]='\226\128\162',[150]='\226\128\147',[151]='\226\128\148',
  [152]='\194\152',[153]='\226\132\162',[154]='\209\153',[155]='\226\128\186',[156]='\209\154',[157]='\209\156',
  [158]='\209\155',[159]='\209\159',[160]='\194\160',[161]='\209\142',[162]='\209\158',[163]='\208\136',
  [164]='\194\164',[165]='\210\144',[166]='\194\166',[167]='\194\167',[168]='\208\129',[169]='\194\169',
  [170]='\208\132',[171]='\194\171',[172]='\194\172',[173]='\194\173',[174]='\194\174',[175]='\208\135',
  [176]='\194\176',[177]='\194\177',[178]='\208\134',[179]='\209\150',[180]='\210\145',[181]='\194\181',
  [182]='\194\182',[183]='\194\183',[184]='\209\145',[185]='\226\132\150',[186]='\209\148',[187]='\194\187',
  [188]='\209\152',[189]='\208\133',[190]='\209\149',[191]='\209\151'
}
local utf8_decode={
  [128]={[147]='\150',[148]='\151',[152]='\145',[153]='\146',[154]='\130',[156]='\147',[157]='\148',[158]='\132',[160]='\134',[161]='\135',[162]='\149',[166]='\133',[176]='\137',[185]='\139',[186]='\155'},
  [130]={[172]='\136'},
  [132]={[150]='\185',[162]='\153'},
  [194]={[152]='\152',[160]='\160',[164]='\164',[166]='\166',[167]='\167',[169]='\169',[171]='\171',[172]='\172',[173]='\173',[174]='\174',[176]='\176',[177]='\177',[181]='\181',[182]='\182',[183]='\183',[187]='\187'},
  [208]={[129]='\168',[130]='\128',[131]='\129',[132]='\170',[133]='\189',[134]='\178',[135]='\175',[136]='\163',[137]='\138',[138]='\140',[139]='\142',[140]='\141',[143]='\143',[144]='\192',[145]='\193',[146]='\194',[147]='\195',[148]='\196',
    [149]='\197',[150]='\198',[151]='\199',[152]='\200',[153]='\201',[154]='\202',[155]='\203',[156]='\204',[157]='\205',[158]='\206',[159]='\207',[160]='\208',[161]='\209',[162]='\210',[163]='\211',[164]='\212',[165]='\213',[166]='\214',
    [167]='\215',[168]='\216',[169]='\217',[170]='\218',[171]='\219',[172]='\220',[173]='\221',[174]='\222',[175]='\223',[176]='\224',[177]='\225',[178]='\226',[179]='\227',[180]='\228',[181]='\229',[182]='\230',[183]='\231',[184]='\232',
    [185]='\233',[186]='\234',[187]='\235',[188]='\236',[189]='\237',[190]='\238',[191]='\239'},
  [209]={[128]='\240',[129]='\241',[130]='\242',[131]='\243',[132]='\244',[133]='\245',[134]='\246',[135]='\247',[136]='\248',[137]='\249',[138]='\250',[139]='\251',[140]='\252',[141]='\253',[142]='\254',[143]='\255',[144]='\161',[145]='\184',
    [146]='\144',[147]='\131',[148]='\186',[149]='\190',[150]='\179',[151]='\191',[152]='\188',[153]='\154',[154]='\156',[155]='\158',[156]='\157',[158]='\162',[159]='\159'},[210]={[144]='\165',[145]='\180'}
}

local nmdc = {
  [36] = '$',
  [124] = '|'
}

function AnsiToUtf8(s)
  local r, b = ''
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      r = r..string.char(b)
    else
      if b > 239 then
        r = r..'\209'..string.char(b - 112)
      elseif b > 191 then
        r = r..'\208'..string.char(b - 48)
      elseif ansi_decode[b] then
        r = r..ansi_decode[b]
      else
        r = r..'_'
      end
    end
  end
  return r
end

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ''
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r..'_'
    end
  end
  return r
end

247 (2020-03-03 15:45:14 отредактировано kalikazandr)

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

toxa пишет:

воспользуйтесь вот этим:

Спасибо,  воспользуюсь встроенными убогим квиковским решением.

248

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

Доброго здравия всем. Прочитал ветку до конца и накачал скрипт всеми фитчами, вроде бы работает. Если кто-то еще поддерживает проект ответьте пожалуйста, как работает Progress Bar? Или по другому: Как в динамике отобразить количество считываемых записей из AllTrade потока. Записи отфильтровываются по нужным тикерам .

249

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

Flagrum пишет:

Или по другому: Как в динамике отобразить количество считываемых записей из AllTrade потока.

в смысле? много или мало сделок идет по инструменту за промежуток времени? это называется volume smile

250

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

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