Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
mgw писал(а): Хитро! А строку чем выполняете EVALUATE или дополнительным интерпретатором?
EVALUATE. В dll (Quark-Forth, например) такая функция экспортируется, в qt-версии это h-файл, где Evaluate - просто функция, которая при необходимости подключается к какому-либо классу.
[quote="mgw"]Хитро! А строку чем выполняете EVALUATE или дополнительным интерпретатором?[/quote]
EVALUATE. В dll (Quark-Forth, например) такая функция экспортируется, в qt-версии это h-файл, где Evaluate - просто функция, которая при необходимости подключается к какому-либо классу.
|
|
|
|
Добавлено: Пт мар 05, 2010 19:20 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Хитро! А строку чем выполняете EVALUATE или дополнительным интерпретатором?
Хитро! А строку чем выполняете EVALUATE или дополнительным интерпретатором?
|
|
|
|
Добавлено: Пт мар 05, 2010 18:58 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mgw писал(а): Красиво, но наверное очень трудоёмко. Больше подходит к Форт ОС. Я бы не сказал, что особо трудоемко. Сейчас библиотека имеет размер порядка 30 кб, но элементы там самые простые - кнопки, bmp, статический текст, чекбокс. mgw писал(а): Зачем строки? Это динамический поиск в форте, а это время. Быстрее осуществлять вызов CALLBACK слова форта, передавая ему параметры при необходимости. Таким образом форт будет обрабатывать события QT (пример на Linux и SPF выше).
Callback тоже пробовали, но какой-то принципиальный выигрыш при этом не наблюдается. Общение с помощью текста получается более регулярным, к тому же допускает массу интересных интерфейсных бонусов. Например, в свойствах элемента управления можно посмотреть, что он вызовет, отредактировать эту строку, или сбросить ее в буфер, чтобы собрать макрос из строк, принадлежащих нескольким элементам управления.
[quote="mgw"]Красиво, но наверное очень трудоёмко. Больше подходит к Форт ОС. [/quote] Я бы не сказал, что особо трудоемко. Сейчас библиотека имеет размер порядка 30 кб, но элементы там самые простые - кнопки, bmp, статический текст, чекбокс. [quote="mgw"]Зачем строки? Это динамический поиск в форте, а это время. Быстрее осуществлять вызов CALLBACK слова форта, передавая ему параметры при необходимости. Таким образом форт будет обрабатывать события QT (пример на Linux и SPF выше).[/quote]
Callback тоже пробовали, но какой-то принципиальный выигрыш при этом не наблюдается. Общение с помощью текста получается более регулярным, к тому же допускает массу интересных интерфейсных бонусов. Например, в свойствах элемента управления можно посмотреть, что он вызовет, отредактировать эту строку, или сбросить ее в буфер, чтобы собрать макрос из строк, принадлежащих нескольким элементам управления.
|
|
|
|
Добавлено: Чт мар 04, 2010 20:37 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Цитата: Первое: реализовывать элементы управления непосредственно на Форте. Красиво, но наверное очень трудоёмко. Больше подходит к Форт ОС. Цитата: Следующий шаг, который сейчас "образмеривается" - двусторонняя клиент-серверная модель общения между Фортом и Qt. То есть Форт вызывает программу-сервер, которая динамически создает элементы управления Qt. А эти элементы, в свою очередь, будут передавать строки Форту.
Зачем строки? Это динамический поиск в форте, а это время. Быстрее осуществлять вызов CALLBACK слова форта, передавая ему параметры при необходимости. Таким образом форт будет обрабатывать события QT (пример на Linux и SPF выше).
[quote]Первое: реализовывать элементы управления непосредственно на Форте.[/quote] Красиво, но наверное очень трудоёмко. Больше подходит к Форт ОС. [quote]Следующий шаг, который сейчас "образмеривается" - двусторонняя клиент-серверная модель общения между Фортом и Qt. То есть Форт вызывает программу-сервер, которая динамически создает элементы управления Qt. А эти элементы, в свою очередь, будут передавать строки Форту.[/quote]
Зачем строки? Это динамический поиск в форте, а это время. Быстрее осуществлять вызов CALLBACK слова форта, передавая ему параметры при необходимости. Таким образом форт будет обрабатывать события QT (пример на Linux и SPF выше).
|
|
|
|
Добавлено: Чт мар 04, 2010 20:09 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mgw писал(а): Под графикой я понимаю библиотеку элементов графики, ориентированную на построение пользовательского интерфейса, причем кросплатформенную, ориентированную на ту же QT например. Причем, она должна быть доступна в исходных кодах и входить как рекомендованное расширение в дистрибутив. Сделать её на чистом форте не представляется возможным (хотя могу и ошибаться) вот и вижу пока единственный путь в написании на C++ загружаемой библиотеки, выступающей прослойкой между SPF и QT.
Тут у меня пока два соображения/направления. Первое: реализовывать элементы управления непосредственно на Форте. Так сказать, наперекор всему. ( http://www.msyst.ru/qide.jpg )
Второе - привязывать слова Форта к элементам управления Qt. Это уже было реализовано в среде Proton в рамках пробы и в САПР QuarkCAD. Общая идея - нажатие на кнопку (и прочие действия) не вызывают некий фиксированный код, а сбрасывают в Форт-машину строку вида "ACTION-BUTTON1". Соответственно, Форт-машина должна сначала определить такие слова, а при необходимости привязать к ним что-то другое.
Следующий шаг, который сейчас "образмеривается" - двусторонняя клиент-серверная модель общения между Фортом и Qt. То есть Форт вызывает программу-сервер, которая динамически создает элементы управления Qt. А эти элементы, в свою очередь, будут передавать строки Форту.
[quote="mgw"]Под графикой я понимаю библиотеку элементов графики, ориентированную на построение пользовательского интерфейса, причем кросплатформенную, ориентированную на ту же QT например. Причем, она должна быть доступна в исходных кодах и входить как рекомендованное расширение в дистрибутив. Сделать её на чистом форте не представляется возможным (хотя могу и ошибаться) вот и вижу пока единственный путь в написании на C++ загружаемой библиотеки, выступающей прослойкой между SPF и QT.[/quote]
Тут у меня пока два соображения/направления. Первое: реализовывать элементы управления непосредственно на Форте. Так сказать, наперекор всему. ( http://www.msyst.ru/qide.jpg )
Второе - привязывать слова Форта к элементам управления Qt. Это уже было реализовано в среде Proton в рамках пробы и в САПР QuarkCAD. Общая идея - нажатие на кнопку (и прочие действия) не вызывают некий фиксированный код, а сбрасывают в Форт-машину строку вида "ACTION-BUTTON1". Соответственно, Форт-машина должна сначала определить такие слова, а при необходимости привязать к ним что-то другое.
Следующий шаг, который сейчас "образмеривается" - двусторонняя клиент-серверная модель общения между Фортом и Qt. То есть Форт вызывает программу-сервер, которая динамически создает элементы управления Qt. А эти элементы, в свою очередь, будут передавать строки Форту.
|
|
|
|
Добавлено: Чт мар 04, 2010 19:32 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Под графикой я понимаю библиотеку элементов графики, ориентированную на построение пользовательского интерфейса, причем кросплатформенную, ориентированную на ту же QT например. Причем, она должна быть доступна в исходных кодах и входить как рекомендованное расширение в дистрибутив. Сделать её на чистом форте не представляется возможным (хотя могу и ошибаться) вот и вижу пока единственный путь в написании на C++ загружаемой библиотеки, выступающей прослойкой между SPF и QT.
Под графикой я понимаю библиотеку элементов графики, ориентированную на построение пользовательского интерфейса, причем кросплатформенную, ориентированную на ту же QT например. Причем, она должна быть доступна в исходных кодах и входить как рекомендованное расширение в дистрибутив. Сделать её на чистом форте не представляется возможным (хотя могу и ошибаться) вот и вижу пока единственный путь в написании на C++ загружаемой библиотеки, выступающей прослойкой между SPF и QT.
|
|
|
|
Добавлено: Чт мар 04, 2010 19:10 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mgw писал(а): Нужна ли форту кросплатформенная графика? Допустимо ли ввести в дистрибутив форта DLL или SO для вызова графики?
www.msyst.ru/quark.pdf
Вобщем-то целый Форт в виде dll, который работает с виртуальной графической поверхностью, отображаемой в OpenGL. На Qt оно тоже есть, но несколько не так, как заявлено в теме.
[quote="mgw"]Нужна ли форту кросплатформенная графика? Допустимо ли ввести в дистрибутив форта DLL или SO для вызова графики?[/quote]
http://www.msyst.ru/quark.pdf
Вобщем-то целый Форт в виде dll, который работает с виртуальной графической поверхностью, отображаемой в OpenGL. На Qt оно тоже есть, но несколько не так, как заявлено в теме.
|
|
|
|
Добавлено: Чт мар 04, 2010 16:34 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Нужна ли форту кросплатформенная графика? Допустимо ли ввести в дистрибутив форта DLL или SO для вызова графики?
Нужна ли форту кросплатформенная графика? Допустимо ли ввести в дистрибутив форта DLL или SO для вызова графики?
|
|
|
|
Добавлено: Чт мар 04, 2010 14:25 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Удалось получить первый результат в Linux. Из формы QT, определенной в DLL по нажатию кнопки вызвать
слово SPF. Таким образом, совершенно реально изготовить DLL с графикой для SPF.
Эту DLL можно дописывать на С++ при необходимости в новых графических функциях, т.к. она фактически
обертка для Qt. Изобретать велосипед не охота, неуже ли нет готовой?
Код: USE libQtGui.so.4 USE libgena.so.1.0.0 S" adrExecZIM" DROP dlsym2 CONSTANT adrExecZIM \ Адрес callback S" adrForthWord" DROP dlsym2 CONSTANT adrForthWord \ Адрес выполняемого слова forth : hello S" Привет из SPF ... " TYPE ; ' hello adrForthWord ! \ Запишем в переменную которая в dll : e DUP EXECUTE 0 ; ' e 1 CELLS CALLBACK: Test \ Процедура, которая будет вызвана из dll ' Test adrExecZIM ! \ Запишем в переменную которая в dll (( ARGC ARGV )) init_qt DROP \ Инициализируем QT (( )) f2 DROP \ Вызыаем форму и реагируем на нажатие кнопки
Выдержки из кода С++ загружаемой libgena.so.1.0.0 Код: typedef void (*ExecZIM)(void *); // определим тип для вызываемой функции extern "C" { void *adrExecZIM; } // Адрес под Вызов CALLBACK extern "C" { void *adrForthWord; } // Адрес под аргумент CALLBACK QApplication *qt_app; // Указатель на приложение MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setFixedSize(200, 120); QPushButton *quit = new QPushButton("Quit", this); quit->setGeometry(62, 40, 75, 30); connect( quit, SIGNAL(clicked()), this, SLOT(tt()) ); } void MyWidget::tt(void) { ((ExecZIM)adrExecZIM)((void *)adrForthWord); } extern "C" void *init_qt(int qargc, char *qargv[]) { qt_app = new QApplication(qargc, qargv); return (void *)qt_app; } extern "C" void f2(void) { MyWidget *wf1; wf1 = new MyWidget(); wf1->show(); qt_app->exec(); }
Удалось получить первый результат в Linux. Из формы QT, определенной в DLL по нажатию кнопки вызвать
слово SPF. Таким образом, совершенно реально изготовить DLL с графикой для SPF.
Эту DLL можно дописывать на С++ при необходимости в новых графических функциях, т.к. она фактически
обертка для Qt. Изобретать велосипед не охота, неуже ли нет готовой?
[code] USE libQtGui.so.4 USE libgena.so.1.0.0 S" adrExecZIM" DROP dlsym2 CONSTANT adrExecZIM \ Адрес callback S" adrForthWord" DROP dlsym2 CONSTANT adrForthWord \ Адрес выполняемого слова forth : hello S" Привет из SPF ... " TYPE ; ' hello adrForthWord ! \ Запишем в переменную которая в dll : e DUP EXECUTE 0 ; ' e 1 CELLS CALLBACK: Test \ Процедура, которая будет вызвана из dll ' Test adrExecZIM ! \ Запишем в переменную которая в dll (( ARGC ARGV )) init_qt DROP \ Инициализируем QT (( )) f2 DROP \ Вызыаем форму и реагируем на нажатие кнопки [/code] Выдержки из кода С++ загружаемой libgena.so.1.0.0 [code] typedef void (*ExecZIM)(void *); // определим тип для вызываемой функции extern "C" { void *adrExecZIM; } // Адрес под Вызов CALLBACK extern "C" { void *adrForthWord; } // Адрес под аргумент CALLBACK QApplication *qt_app; // Указатель на приложение MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setFixedSize(200, 120); QPushButton *quit = new QPushButton("Quit", this); quit->setGeometry(62, 40, 75, 30); connect( quit, SIGNAL(clicked()), this, SLOT(tt()) ); } void MyWidget::tt(void) { ((ExecZIM)adrExecZIM)((void *)adrForthWord); } extern "C" void *init_qt(int qargc, char *qargv[]) { qt_app = new QApplication(qargc, qargv); return (void *)qt_app; } extern "C" void f2(void) { MyWidget *wf1; wf1 = new MyWidget(); wf1->show(); qt_app->exec(); } [/code]
|
|
|
|
Добавлено: Ср фев 24, 2010 21:20 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
А ещё лучше замастрячить Форт под Symbian!!!
А ещё лучше замастрячить Форт под Symbian!!!
|
|
|
|
Добавлено: Ср фев 24, 2010 20:15 |
|
|
|
|
|
Заголовок сообщения: |
C++ -> Qt, Python -> PyQt, SPF -> ??? |
|
|
Может кто делал что то похожее? Нужна DLL или SO, как промежуточный слой перед Qt. Причем не обязательно делать привязку ко всей Qt, хоть примерчик но именно с SPF.
Может кто делал что то похожее? Нужна DLL или SO, как промежуточный слой перед Qt. Причем не обязательно делать привязку ко всей Qt, хоть примерчик но именно с SPF.
|
|
|
|
Добавлено: Ср фев 24, 2010 14:29 |
|
|
|
|