В связи с тем, что секция экспорта в библиотеке пользовательских контролов имеет открытый интерфейс, могу ли я, сделав к ней QLUA-бинд использовать её в своих программах на qlua?
sam063rus пишет: В связи с тем, что секция экспорта в библиотеке пользовательских контролов имеет открытый интерфейс, могу ли я, сделав к ней QLUA-бинд использовать её в своих программах на qlua?
ну тогда сделайте их доступными из QLUA сами. и сделайте уже нормальный бинд вашего qtable. пример того, как обходятся в CryEngine без метатаблиц Вам уже давали.
sam063rus пишет: ну тогда сделайте их доступными из QLUA сами. и сделайте уже нормальный бинд вашего qtable. пример того, как обходятся в CryEngine без метатаблиц Вам уже давали.
А что сейчас не устраивает в функциях работы с таблицами? Сразу повторюсь - завернуть эти функции в "класс" не сложно средствами самого Lua, тем более что пример как это можно сделать у нас есть. Тот пример что Вы прислали - это просто пример реализации наследования от базового класса. Для этого надо сначала определить сам базовый класс, о чем я и просил Вас. Напишите в свободной форме что вы хотите получить.
да что CryEngine? таже vclua. там простой и понятный интерфейс без всяких врапперов (просто разработчики изначально потрудились, а не повесили всё на пользователей). насчёт её глючности - оставим за скобками. т.к. это ещё, как посмотреть.
я напишу вам, как-раз над этим работаю. просто если всё писать - потомы вы же меня и обвините в раскрытии своих секретов. потому что мои предложения некоторые УЖЕ у вас реализованы, но не раскрыты
суть в том, чтоб скрывать в C++ коде реализацию класса, а в LUA - дёргать только функции, позволяющие создать объект, настроить его поля, вызвать некоторые методы. Ваша, в данном случае задача: реализовать развёрнутую в с++ структуру классов графических контролов, избавив пользователя от таскания многочисленных врапперов и метатаблиц в своих проектах. также, обеспечить корректное взаимодействие на уровне потоков. для этого у вас есть все ресурсы в отличии от нас - т.к. мы не знаем ни контекстов плагинов, ни других внутренних структур. Это только, что касается qctrls.dll. в остальных темах - у меня к вам другие вопросы. p.s. Нам не надо надо LUA или средствами C API проектировать/создавать/описывать новые классы - нам нужны простые функции доступа и коллбеки к ним. какие классы, какая структура/иерархия нам нужна - на том уровне, который мне доступен, постараюсь вам нарисовать. но вам это и самим должно быть хорошо известно - ведь они у вас уже есть - просто надо их больше сделать доступными на QLUA. Пока я вижу, что у вас более менее детально реализован класс qtable. НО!!! вы совершенно (прошу меня извинить конечно) наплевали на его биндинг, вы просто представили его, как некую dll, к которой можно с помощью опять же лишнего QLUA-враппера иметь доступ. А почему бы изначально не дать нам пользовать готовыми абстракциями на манер message() или, тот же самый combobox, если смотреть изнутри.
Я просто хочу показать, что сделать ОО интефейс к существующим функциям задача не хитрая. Причем нет разницы где это делать - в скрипте на Lua или в qlua.dll. API для этого используется одно и тоже. Вся проблема в том, что никто внятно не может рассказать какими объектами хочется оперировать, какими свойствами они должны обладать, какие интерфейсы предоставлять, как взаимодействовать друг с другом и т.п.
нет разницы где это делать - в скрипте на Lua или в qlua.dll.
это для Вас, Михаил, нет разницы, а нам, как трейдерам - это принципиально. Нам весь этот "мусор" с метатаблицами в программах абсолютно не нужен. поэтому. имеет очень большой смысл спрятать вам от нас его в своей qlua.dll вместе с реализацией других методов.
Цитата
Вся проблема в том, что никто внятно не может рассказать какими объектами хочется оперировать
Будут вам и свойства и классы и интерфейсы - просто Вы просите меня написать вам по сути, иерархию vcl "в моём представлении". Чем я и занимаюсь. Но, как уже писал, Вы это можете сделать и сами. vclua или, если уж, как дефакто стандарт: дельфовая vcl. Можете обойтись и своей реализацией: qctrls.dll и qlist.dll (про qchart пока молчу, но это пока). все поля и методы и события - там в них всё у вас описано - так выведете же их наконец, наружу через qlua и дайте нам ими пользоваться, КАК УЖЕ НЕ РАЗ ПОВТОРЯЛ: БЕЗ МЕТАТАБЛИЦ.
p.s. насчёт интерфейсов: я вам их опишу в своём понимании.
нет разницы где это делать - в скрипте на Lua или в qlua.dll.
это для Вас, Михаил, нет разницы, а нам, как трейдерам - это принципиально. Нам весь этот "мусор" с метатаблицами в программах абсолютно не нужен. поэтому. имеет очень большой смысл спрятать вам от нас его в своей qlua.dll вместе с реализацией других методов.
Я позволю себе встрять и высказать своё мнение.
Чем более низкоуровневые средства мне доступны, тем больше возможностей для меня сделать на их основе собственные абстракции. Удобные, понятные и приятные именно мне.
Совершенно необязательно, что мне нравится тот стиль, который кажется правильным Михаилу Булычеву или sam063rus.
Поэтому я никак не приветствую навязывание мне каких-то готовых классов с неизбежными ограничениями: на qpile мы уже писали.
Касаемо метатаблиц. Нам (мне) мусор с метатаблицами очень нужен.
а вообще-то никто и не говорил про ограничения, а наоборот. к тому же qlua развивается именно по экстенсивной модели и ничто, что до этого работало не отбрасывается.
Цитата
s_mike@rambler.ru пишет: Касаемо метатаблиц. Нам (мне) мусор с метатаблицами очень нужен.
да не волнуйтесь вы так - чтоб он исчез - потребовалось бы переписать саму LUA, что естественно делать никто не станет. Тут разговор о высокоуровневой надстройке к qlua и большей открытости её GUI.
для чего внедряют скрипты? чтоб облегчить жизнь рядовым пользователям (трейдерам), а не программистам. Программистам это облегчает жизнь - лишь отчасти. - уменьшается время на рекомпиллинг. повышается гибкость программы.
если превратить реализацию qlua в сплошные метатаблицы то, кто по вашему сможет ей пользоваться? для кого она? кто целевая аудитория? ответ: только роботорговцы, которые изначально опытней рядовых трейдеров и программисты. напрашивается тогда вопрос: а кому это надо? мои предложения направлены на соблюдение интересов основной массы пользователей - трейдеров. а если роботорговцы так хорошо разбираются то, что мешает им создать свою ТС и устанавливать свои правила? (извиняюсь если чем обидел)
Но ведь это исключительно ваше личное эстетическое восприятие, не более того. Ни какого смыслового смысла это не дает: ни в смысле быстродействия, ни в смысле работы Луа кучи. Соответственно если есть какой-то враппер, который делает желаемый вами интерфейс удовлетворяющий ваши эстетические чувства - то и пусть себе лежит. Просто не надо в него заглядывать, если если кто-то стесняется при виде метатаблиц. Ведь результат во всех смыслах - совершенно идентичен.
swerg, я, конечно, понимаю, что Вы более опытный в метатаблицах, их метаметодах, а самое главное, как это всё реализовать (забиндить) на C++ или в том же Лазарусе. Но я не думаю, что таких большинство. Суть разговора в том, что вот у нас есть qctrls.dll и есть пример обёртки на QLUA, как с ней работать, вопрос: нахрена мне, как в первую очередь, трейдеру вся эти "танцы" когда я могу по примеру всё той же vclua в достаточно в простой форме обратиться к таблице, создать/отредактировать/удалить её. и мне даже не понадобиться вникать в то, как реализовано это, главное, чтоб оно БЫЛО реализовано. Или, другой пример, есть функция QLUA message, которая на самом деле combobox с жёстко заданными свойствами (это другой пример крайности). Другая выгода: т.к. это всё будет реализовано не нами, а разработчиками (у которых по определению больше информации) то, это отчасти упростит ранее выявленные проблемы с многопоточностью.
и так с остальными контролами. потому как если разработчики решат вдруг добавить парочку деклассированных то, это выльется в штук 20 функций для работы с этими "деклассированными контролами" и их описаний в хелпе. в итоге, справка по QLUA, равно как и код на QLUA будет стремиться к роману "Война и мир" по объёму.
С другой стороны, имея AllocTable, можно воспользоваться полу-хакерским методом и создать вместо таблицы какую-нибудь тоже НАТИВНУЮ кнопку или вообще другой контрол средствами Windows API, которая будет работать в окне квика. Потому что, эта функция по сути, скорей всего возвращает хендл окна. Насчёт этого, могу, конечно, ошибаться, потому как об истинной реализации могу только догадываться, читая между строк примеры в хелпе QLUA. Но, честно говоря, не хотелось бы до этого опускаться.
sam063rus пишет: С другой стороны, имея AllocTable, можно воспользоваться полу-хакерским методом и создать вместо таблицы какую-нибудь тоже НАТИВНУЮ кнопку или вообще другой контрол средствами Windows API, которая будет работать в окне квика.
под "средствами Windows API" имелось ввиду, конечно, состряпать dll, аналог vclua.
В одной русской сказке, под названием "по щучьему велению" сидел Иван на печи и мечтал
В другом классическом произведении есть тост "Хочу чтобы Все" --------------------------------------------- мечтать оно конечно не вредно, но и бесполезно. ------------------------------- "С одной стороны....С другой стороны" -ничего не напоминает ? ( типа песню из одного классического фильма)
Michael Bulychev пишет: Тот пример что Вы прислали - это просто пример реализации наследования от базового класса. Для этого надо сначала определить сам базовый класс, о чем я и просил Вас. Напишите в свободной форме что вы хотите получить.
Например, так:
Код
QControls = class(TComponent) //что такое tcomponent - см. в Delphi VCL
и пошло
...
и поехало
...
end;
Отсюда, имеем: QControls - базовый класс для всех визуальных контролов, которые нам так сильно нужны. Либо, давайте нам хендл окна вкладок квика, относительно которого мы будем отталкиваться, строя сами окна-контролы. Далее, каждый скрипт имеет базовым: класс QScript
Код
QScript = class(QObject or QPlugin)
пока думаю над этим
...
end;
Сейчас же, Вы заставляете нас, по сути, писать свою реализацию vcl (не путать с qvclua или vclua), хотя просто могли сделать её общедоступной. Чтоб нам стабильно использовать ту "vclua", которая гуляет в интернете - надо переписать дельфовую или лазаровскую vcl (lcl). Что весьма нетривиально, т.к. придётся отказываться от многих корневых классов и переписывать их, т.к. они заточены на взаимодействие с приложением и от него они отталкиваются, а не с плагином.
Michael Bulychev пишет: Вся проблема в том, что никто внятно не может рассказать какими объектами хочется оперировать, какими свойствами они должны обладать, какие интерфейсы предоставлять, как взаимодействовать друг с другом и т.п.
Михаил, Вы почему-то бытро успокоились и забросили тему... :)))
Вы так просили, чтоб Вам всё объяснили, а в ответ - тишина... Ну ладно, не устраивает класс QScript и описанное далее то, хоть сделайте базовым класс QForm - так хоть можно будет на вполне законных основаниях от чего-то отталкиваться. Объясню, а то опять начнётся "троллинг": мне (нам) нужен этот класс для того, чтоб назначить его "родительским" и иметь возможность "ляпать" на него свои контролы, которые будут выглядеть вполне нативными и будут привязаны через него к отображению на вкладках квика, а не как сейчас (как отдельное приложение). Сделать это для Вас - не составит уймы времени, а польза будет большой. Кроме того, Вам явно задавали вопрос: почему Вы прячете "хендл" окна от таблиц - на что ты Вы опять уклонились от ответов. Я просил это для того, что если уж нет возможности привязаться к вкладке квика то, хотя бы иметь возможность создать свой контрол на базе таблицы (созданной стандартными средствами QLUA QTable).
Прошу детально (не ограничиваясь парой фраз) уже наконец объясниться.
--------------------------------- (to "всяким роботорговцам-умникам, тролльте у себя в "песочнице" и не засоряйте тему")
есть функция winAPI: CreateWindow с помощью которой я планирую создать базовый оконный класс. У ней есть параметр: HWND hWndParent, // дескриптор родительского или окна владельца
раз в квике в QLUA "окном в квик" является регистрация таблицы (например, QTable) - то, стало быть её хендл
Цитата
Michael Bulychev пишет: И что потом Вы собираетесь с ним делать?
как уже много раз писал до этого (в разных вариациях) - Михаил, мне (нам) нужен базовый оконный класс, который будет иметь возможность однозначной ассоциации с вкладкой квика и благодаря которому можно будет в случае чего переносить "окошки" моих контролов на другие вкладки (привязывать). То есть, если Вы реализуете вышеописанное то, у пользователей появится возможность писать как бы нативные контролы. т.е. по сути - дочерние окна квика.
я, конечно понимаю, что для вас, (как для программиста, по определению обладающего большей информацией о квике и о том, как это можно было правильно реализовать и уж тем более спросить на форуме) многое описанное выше кажется абсурдным. НО!!! мы всего лишь пользователи и нас тоже можно понять. и к тому же, спустя километры "писанины" - процесс - так и не сдвинулся с места.
Вы просили ответить, какой класс сделать базовым. - Сделайте базовым любой оконный класс, например QTable с параметрами описанными выше. И мы сможем писать полноценные контролы в квике на QLUA
либо, если Вы знаете более правильный и элегантный способ, как это сделать - приведите код (базового класса) на Delphi или VC++
sam063rus,почему вы свои пожелания постоянно выдаёте за требования масс? Как правило они слишком "с подвыпердотом" и подобные обращения от других не встречал...Возможно я чего-то не знаю, и мне отвечать не надо.
сергей пишет: sam063rus ,почему вы свои пожелания постоянно выдаёте за требования масс? Как правило они слишком "с подвыпердотом" и подобные обращения от других не встречал...Возможно я чего-то не знаю, и мне отвечать не надо.
возможно Вам пора перестать засорять мои топики своими суждениями. Или Ваша задача "убить" любую мою тему?
Суть описанного выше - как и комментировалось до этого в следующем: Вы создаёте класс-контейнер (аналог формы в Delphi), имеющий свою оконную функцию, зарегистрированный класс, которые пользователь потом сможет назначить "родительским" и наследовать от него свои контролы.
Почему это не можем сделать за Вас - мы (пользователи)? Ответ: потому что, также хотелось бы иметь возможность полной привязки к вкладкам квика, переназначать их, сохранять местоположение в файле info.wnd, как это делается со штатными окнами. То есть, по сути, нужен MDI-оконный базовый класс. (если можно так выразиться)
в качестве альтернативы технической реализации - можно предложить создать в классе контекста скрипта - список окон с параметрами размера и положения. Далее, сохранить параметры из него в info.wnd. Потом, при старте скрипта - восстанавливать эти параметры. А чтоб гарантированно знать, что именно (какие окна и параметры) сохранять - пользователю можно подсунуть в скрипте какую-нибудь новую функцию (чтоб он сам заполнил эти параметры, по кр. мере названия пользовательских окон).
Michael Bulychev пишет: Пожелание такого рода у нас есть и мы думаем над их реализцией.
а пока Вы думаете над их реализацией - было бы неплохо уже с чего-то начать: к примеру, если бы Вы сделали функцию в QLUA, возвращающую хендл текущей вкладки - то это бы избавило от массы проблем. функцию можно назвать например так: getActiveTabbed(). В качестве результата - можно возвращать либо таблицу с дополнительной информацией (например, название вкладки, хендл её окна и т. п.) либо же просто хендл. Хранить параметры и доставать их можно через стандартный механизм хранения таких вещей, как: LightUserData.
Сделать это для Вас - не составит великого труда (займёт не больше часа), а пользы будет действительно много. НО!!! Только не надо нам тут подсовывать, какой-то не Windows-описатель, как это сделано у Вас с QTable. Нам нужна возможность полноценной привязки к вкладке и возможность "перепрыгивать" с вкладки на вкладку.
Старатель пишет: При отсутствии возможности задавать положение окна на конкретной вкладке польза от такой функции будет сомнительной.
положение окна, его размер, обработка событий - всё это уже делается элементарно с помощью winAPI. Кроме того, можно также сделать, чтоб это всё запоминалось бо как info.wnd - это не панацея и никто не запрещает пользователям создавать/хранить свои настройки окон для своих скриптов в своих файлах.