Простенький минимально достаточный для создания окна скрипт:
Код
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) - снова меняются размеры окна?
4. Значит ли это, что реально, дескриптор окна таблицы никуда не разрушается, а окно просто "прячется" - т.е. получает сообщение WM_SHOWWINDOW с wParam = false?
Добрый день. Не совсем понимаю о чем Вы. Если об этом:
Цитата
sam063rus пишет: и последнее, стоит ли заниматься сабклассингом QTable-окна или есть реальная возможность таки дождаться полноценного GUI-support в QLUA?
То как я могу вам что-то запретить, хотя я не знаю что такое QTable в Вашем понимании. Планы по реализации поддержки GUI у нас есть, но сроки мы назвать пока не можем.
Michael Bulychev пишет: о как я могу вам что-то запретить, хотя я не знаю что такое QTable в Вашем понимании.
и опять троолинг - Вам ли не знать, что такое QTable? Была идея, -> использовать окно квика, как базовый оконный класс, подменив средствами WINAPI его оконную процедуру, а ту, что штатная - оставить в качестве DefWndProc. Идея - была уже озвучена и не раз.
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
sam063rus пишет: Вам ли не знать, что такое QTable?
Это был пример на Lua который только в общих чертах описывает идею реализации таблицы как объекта. С точки зрения терминала это такая же таблица как и, например, таблица всех сделок.
и что??? QTable - это "изобретение", порождённое в скрипте и скриптом и его LUA VM - однако это не мешает при удалении онных жить так называемому изобретению собственной жизнью?
Michael Bulychev пишет: Это уже обсуждалось много раз - так сделано специально. После завершения работы скрипта окна не закрываются если этого не было сделано явно.
а вы с кем-нибудь советовались, чтоб это сделать? Или только с парочкой форумных "умников" предложениям/пожеланиям которых Вы, как компания весело "подмахиваете"?
..лять, программирование в так называемой QLUA - это уже даже не стандарт программирования и "тезисов" LUA и даже не программирование чисто под Windows, а - "вещь - в себе". При том, что информацию приходится выуживать не из официальной документации ("хелп"ов), а из "сопливого" непонятно форума.
Michael Bulychev пишет: К нашему сожалению, когда мы реализовали такое поведение Вы еще не были зарегистрированы на нашем форуме.
не надо мне - я прекрасно помню когда и с чего это началось и предупреждал - но всем было нас..рать...
Вы гонитесь только за сиюминутной выгодой в лице начальства -> "мол сделал для галочки - значит чота сделал". При том, что сами понимаете, что программировать и реализовывать пожелания по интерфейсу - куда проще чем заниматься действительно серьёзными вещами.
Вы плохо представляете всю картину и как это отразится на квике в целом через 1,2,-5 лет Ваших таких "поделок"
--------------- адресовано не именно Вам, а тем кто за Вами стоит.
Повторю еще раз - такое поведение сделано было осознанно. Есть задачи для которых удобно что-то посчитать, вывести табличку и остановить скрипт. При этом вся информация остается в терминале.
ок для меня это - некритично. мне в любом случае, нужно было лишь узнать hwnd окна таблицы и я это сделал. Далее, просто переопределю оконную процедуру.
Для тех, кто захочет узнать о том, как получить полный контроль над окнами квика - в пакете с Delphi - есть утилита: WinSight32 - она позволяет узнать и понять внутреннюю структуру окон в любом процессе. Дальше - дело за малым...