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. https://yadi.sk/d/JBdtL8_XoWArq

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

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