Простенький минимально достаточный для создания окна скрипт:
Код
is_run = true
function OnInit()
t_id = AllocTable()
CreateWindow(t_id)
SetWindowCaption(t_id, "thats my table")
end
function main()
while is_run do
sleep(100)
end
end
function OnStop()
DestroyTable(t_id)
is_run = false
return 1000
end
После его работы - создаётся большущее окно без названия и только потом - окно в один столбец но, очень длинное по вертикали. При этом, если передёрнуть скрипт несколько раз - положение окна будет всё время меняться в сторону приращения координат левого верхнего угла по X и по Y. Про функцию SetWindowPos - знаю. И о ней мне говорить не надо. Вопрос:
получается, что на самом деле, при создании окна - собирается какой-то мусор от предыдущих экземпляров - хотя, при остановке скрипта - его LUA VM должна быть полностью разрушена, равно как и переменные ею занимаемые/устанавливаемые.
Почему при создании окна таблицы вылазиет ещё одно большое окно? Внешне это выглядит, как неприятное единовременное мерцание. подозреваю, что это одно и тоже окно но, заданное с большими дефолтными размерами и только потом, они почему-то опять меняются непонятным образом.
Значит ли это, что внутри функции CreateWindow(t_id) - снова меняются размеры окна?
Пользователь
Сообщений: Регистрация: 01.02.2015
16.06.2015 07:28:45
4. Значит ли это, что реально, дескриптор окна таблицы никуда не разрушается, а окно просто "прячется" - т.е. получает сообщение WM_SHOWWINDOW с wParam = false?
Michael Bulychev
Гость
16.06.2015 10:45:51
Добрый день. Смущает что положение нового окна смещается при каждом вызове CreateWindow?
Пользователь
Сообщений: Регистрация: 01.02.2015
16.06.2015 13:36:00
Цитата
Michael Bulychev пишет: Добрый день. Смущает что положение нового окна смещается при каждом вызове CreateWindow?
Михаил, смущает односложность фраз.
Пользователь
Сообщений: Регистрация: 01.02.2015
16.06.2015 13:37:50
Были заданы вопросы, Вы, тем не менее опять занимаетесь троллингом, заставляя их снова перечислять.
Пользователь
Сообщений: Регистрация: 01.02.2015
16.06.2015 13:43:34
если не готовы дать развёрнутые ответы по каждому вопросу (Но, именно развёрнутые) - то, может и не стоит тогда?...
Michael Bulychev
Гость
16.06.2015 13:46:21
По пунктам: 1. Вы не правы 2. Такой эффект есть, подумаем как его побороть. 3. Да, можно сказать и так. 4. Вы не правы.
Пользователь
Сообщений: Регистрация: 01.02.2015
16.06.2015 14:31:41
Цитата
Michael Bulychev пишет: По пунктам: 1. Вы не правы 2. Такой эффект есть, подумаем как его побороть. 3. Да, можно сказать и так. 4. Вы не правы.
сразу бы так...
насчёт п.2.: а почему бы не сделать по дефолту создание окна нулевого размера, как это сделано в Delphi?
Пользователь
Сообщений: Регистрация: 01.02.2015
16.06.2015 14:53:16
и последнее, стоит ли заниматься сабклассингом QTable-окна или есть реальная возможность таки дождаться полноценного GUI-support в QLUA?
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:25:09
, Складывается впечатление, что Вы отвечаете только на "удобные" вопросы.
Michael Bulychev
Гость
17.06.2015 05:29:08
Добрый день. Не совсем понимаю о чем Вы. Если об этом:
Цитата
sam063rus пишет: и последнее, стоит ли заниматься сабклассингом QTable-окна или есть реальная возможность таки дождаться полноценного GUI-support в QLUA?
То как я могу вам что-то запретить, хотя я не знаю что такое QTable в Вашем понимании. Планы по реализации поддержки GUI у нас есть, но сроки мы назвать пока не можем.
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:33:42
накидал по быстрому скриптик на QLUA C API. (понятное дело, что с ошибками, НО!...)
имеется:
Код
function smthSub(L: Plua_State): Integer; cdecl;
var
t_id:integer;
begin
lua_getglobal(L, 'AllocTable');
lua_call(L,0,1);
t_id:= trunc(lua_tonumber(L,-1));
lua_getglobal(L,'CreateWindow');
lua_pushnumber(L,t_id);
lua_call(L,1,0);
lua_getglobal(L,'SetWindowCaption');
lua_pushnumber(L,t_id);
lua_pushstring(L,'thats my table');
lua_call(L,2,0);
Result:=0;
end;
ну и, почти-аналог на QLUA:
Вопрос:
Почему при нажатии на кнопку "Остановить" скрипт - окно - не исчезает, а живёт себе полноценной жизнью?????
Значит ли это, что при нажатии на кнопку "Остановить" - LUA VM скрипта не разрушается\ полностью?
Версия QUIK: 6.17.1.17
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:37:18
Цитата
Michael Bulychev пишет: о как я могу вам что-то запретить, хотя я не знаю что такое QTable в Вашем понимании.
и опять троолинг - Вам ли не знать, что такое QTable? Была идея, -> использовать окно квика, как базовый оконный класс, подменив средствами WINAPI его оконную процедуру, а ту, что штатная - оставить в качестве DefWndProc. Идея - была уже озвучена и не раз.
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:38:06
Цитата
sam063rus пишет: Была идея, -> использовать окно квика,
имелось ввиду - окно QTable-таблицы
Michael Bulychev
Гость
17.06.2015 05:38:17
Приведите полный код, пожалуйста.
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:42:05
так пойдет?:
Код
package.cpath=getScriptPath().."\\?.dll"
package.path=getScriptPath().."\\?.lua"
require "qte"
is_run = true
QTE.smthSub()
function main()
while is_run do
sleep(100)
end
end
function OnStop()
is_run = false
return 1000
end
Michael Bulychev
Гость
17.06.2015 05:42:05
Цитата
sam063rus пишет: Вам ли не знать, что такое QTable?
Это был пример на Lua который только в общих чертах описывает идею реализации таблицы как объекта. С точки зрения терминала это такая же таблица как и, например, таблица всех сделок.
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:42:57
другой код на Delphi - стандартный и не отражает сути
Michael Bulychev
Гость
17.06.2015 05:43:30
DestroyTable у Вас нигде не вызывается
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:46:01
Цитата
Michael Bulychev пишет: Это был пример на Lua который только в общих чертах описывает идею реализации таблицы как объекта.
но если с как вы говорите с "общими чертами" - столько геморроя, а потом выясняется, что "тезисы" не работают то, спрашивается, "нахрена козе баян"???
Цитата
Michael Bulychev пишет: С точки зрения терминала это такая же таблица как и, например, таблица всех сделок.
это понятно.
Michael Bulychev
Гость
17.06.2015 05:47:27
Подробнее объясните что именно вызывает у Вас сложности?
и что??? QTable - это "изобретение", порождённое в скрипте и скриптом и его LUA VM - однако это не мешает при удалении онных жить так называемому изобретению собственной жизнью?
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:49:13
Согласитесь, логично было бы предположить, что при удалении LUA VM скрипта - все его "изобретения" - также бы удалялись??? Это мировая практика.
Michael Bulychev
Гость
17.06.2015 05:51:11
Это уже обсуждалось много раз - так сделано специально. После завершения работы скрипта окна не закрываются если этого не было сделано явно.
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 05:57:43
Цитата
Michael Bulychev пишет: Это уже обсуждалось много раз - так сделано специально. После завершения работы скрипта окна не закрываются если этого не было сделано явно.
а вы с кем-нибудь советовались, чтоб это сделать? Или только с парочкой форумных "умников" предложениям/пожеланиям которых Вы, как компания весело "подмахиваете"?
..лять, программирование в так называемой QLUA - это уже даже не стандарт программирования и "тезисов" LUA и даже не программирование чисто под Windows, а - "вещь - в себе". При том, что информацию приходится выуживать не из официальной документации ("хелп"ов), а из "сопливого" непонятно форума.
Michael Bulychev
Гость
17.06.2015 05:59:39
К нашему сожалению, когда мы реализовали такое поведение Вы еще не были зарегистрированы на нашем форуме.
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 06:05:03
Цитата
Michael Bulychev пишет: К нашему сожалению, когда мы реализовали такое поведение Вы еще не были зарегистрированы на нашем форуме.
не надо мне - я прекрасно помню когда и с чего это началось и предупреждал - но всем было нас..рать...
Вы гонитесь только за сиюминутной выгодой в лице начальства -> "мол сделал для галочки - значит чота сделал". При том, что сами понимаете, что программировать и реализовывать пожелания по интерфейсу - куда проще чем заниматься действительно серьёзными вещами.
Вы плохо представляете всю картину и как это отразится на квике в целом через 1,2,-5 лет Ваших таких "поделок"
--------------- адресовано не именно Вам, а тем кто за Вами стоит.
Michael Bulychev
Гость
17.06.2015 06:22:38
Повторю еще раз - такое поведение сделано было осознанно. Есть задачи для которых удобно что-то посчитать, вывести табличку и остановить скрипт. При этом вся информация остается в терминале.
Пользователь
Сообщений: Регистрация: 01.02.2015
17.06.2015 06:51:02
ок для меня это - некритично. мне в любом случае, нужно было лишь узнать hwnd окна таблицы и я это сделал. Далее, просто переопределю оконную процедуру.
Пользователь
Сообщений: Регистрация: 01.02.2015
18.06.2015 07:29:47
Для тех, кто захочет узнать о том, как получить полный контроль над окнами квика - в пакете с Delphi - есть утилита: WinSight32 - она позволяет узнать и понять внутреннюю структуру окон в любом процессе. Дальше - дело за малым...