Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Как известно напрямую многопоточность и динамическое создание объектов не возможно в NeoBook на прямую. Но это можно обойти.
Штатными функциями и в 1 .exe это не возможно. Однако, почему мы обязаны использовать 1 .exe? Что же можно сделать? - Запускать скрыто другой exe-шник, в котором будет обрабатываться нужная нам функция. - Запускать exe-шник в объекте прямоугольник. Оба способа дают нам возможность создавать альтернативный процесс... однако а как же обмен данными между процессами? Можно:
>> Создать в главном exe скрытую кнопку с горячей клавишей и при необходимости альтернативный процесс будет посылать нажатие этой горячей клавиши через SendKeys. Минусы: - А вдруг пользователь сам случайно (или специально) нажмет "секретное" сочетание клавиш? - Некое ограничение в количестве горячих клавиш, т.к. их конечное количество, да и стандартные трогать не стоит.
>> Создать в главном exe таймер, который будет постоянно проверять наличие данных в командной строке и в зависимости от введенных данных выполнять то или иное действие. Минусы: - Нагрузка на производительность если таймер слишком частый. - Не мгновенное исполнение (не ставить же проверку на 1мс - почему смотри выше).
>> Комбинация горячей клавиши и командной строки. В данном случае шлем из вторичного процесса команду главному и после сразу шлем нажатие горячей клавиши. В итоге у нас может быть всего одна кнопка, в которой пишем скрипт обработки командной строки. Минусы: - А вдруг пользователь сам случайно (или специально) нажмет "секретное" сочетание клавиш?
>> В место горячих клавиш использовать системное меню (во многих программах оно есть, там всякие Файл, Сохранить, Настройки и т.п. - оно самое). В данном случае мы будем слать пункт меню. Исчезает минус со случайным нажатием. Однако если мы не собирались делать какое-либо там системное меню, да и как спрятать то, что пользователь не должен нажимать?.. Тоже есть выход - создаем "пустышку", через которую запускаем программу. Эта пустышка - тоже NB-приложение, в котором внутри на всё пространство объект прямоугольник. Внутри него запускаем основной exe-шник со свойством скрытия системного меню. Если у вас проект не стандартной формы - рамку надо располагать в пустышке. Если рамка предполагается сменная - для отправки данных о смене её оформления можно использовать способ с горячей клавишей.
Помимо всего прочего это дает нам модульность. При большой программе или для удобства мы можем делать по модулю, не зависящему от других и обменивающемуся с другими модулями способами, описанными выше. Причем модули легко будут в одном окне - просто запускаем где нам нужно и что нам нужно используя объект прямоугольник. Прямоугольники помещаем в рамке-пустышке, например.
Как же сделать так, чтобы пользователь не смог запустить модуль в ручную без главного exe-шника? Просто запускаем через Запуск другого проекта NB и передаем переменную, которая разрешает модулю работать. Ну или через тот же обмен данными шлем команду мол "можно работать", иначе - выход. Правда придется делать ожидание хотябы в 1 секунду на всякий случай (а точнее на время обработки команды), но с другой стороны таким способом можно запускать не только приложения созданные в NeoBook
Если вам известны ещё какие либо способы динамического создания объектов, многопоточности и модульности - пишите, скорей всего есть чем ещё дополнить.
Сообщение отредактировано Format-X22 - Пт, 26 Августа 2011, 10:51
ну, концепция совместной работы нескольких приложений. игрались так еще со времен ммб... все работает как-то тяжеловесно... а где тут про динамическое создание обьектов то?
Quote (Format-X22)
Как же сделать так, чтобы пользователь не смог запустить модуль в ручную без главного exe-шника?
нужно скомпилировать ехе в виде запускаемого модуля runtime package, специально сделанного для таких случаев (см. справку), параметры в дочерние приложения передавать через параметры комстроки при запуске
Добавлено (26 Август 2011, 12:27) --------------------------------------------- есть слабое место - это обмен инфой между такими приложениями, нужно его упростить. жаль нет системы событий в нб... наиболее подходящий способ - через буфер обмена (вроде можно поюзать монитор буфера в плаге zmFunctions)
А юзер вырубит этот скрытый?! Я всегда вырубаю, если вижу непонятный файл в процессах, да и вообще сама идея с горячими кнопками, как обмен не ахти. Слишком много "если".
Quote (DEMBEL)
а где тут про динамическое создание обьектов то?
кстати да?!
Quote (DEMBEL)
наиболее подходящий способ - через буфер обмена
тогда уж лучше альтернативный поток, можно избежать участия юзера... Самый нормальный вариант по обмену, это юзать плаг
Можно обзывать их ИмяОсновнойПрограммы_ИмяМодуля.exe Будет понятно что это.
Quote (DEMBEL)
а где тут про динамическое создание обьектов то?
Объекты в прямом смысле этого слова создавать нельзя, однако можно в прямоугольники запихивать exe и с ними играться. Да, это нифига не объекты и использование жестоко ограничено. Но хоть так, костыли, но ходить всё-же как-то и можно.
Quote (DEMBEL)
через буфер обмена
Тоже вариант, накатаешь описание? Хотя минусы есть сильные, однако имеются и плюсы.
Quote (Сергей)
идея с горячими кнопками, как обмен не ахти.
Это почему? Всё ок!
Quote (Сергей)
это юзать плаг
Про плаг тоже не плохо бы описание и ссылку.
Quote (DEMBEL)
в виде запускаемого модуля runtime package
А вот это интересно, решает проблемы, надо будет поправить в шапке мне. Мой сайт - http://фирмы.онлайн
А почему бы не попробовать воспользоваться, например, этим плагином? Буфер обмена - штука крайне ненадежная.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Да он в курсе. Это просто тема - способы передачи данных между проектами, т.е. не вопрос по сабжу, а так, вата-катание Его тоже есть смысл перевести, он полезен при больших проектах и особенно, когда проект разделен на несколько, которые выполняют свою работу не мешая главному
Сообщение отредактировано Сергей - Пт, 26 Августа 2011, 21:56
Сергей, Ок. А почему вата-катание? Да и тут мы обсуждаем немного другое, однако без связей модулей ничего не выйдет. С другой стороны тот плагин делает не актуальным все эти способы как я понимаю.
Quote (Сергей)
Его тоже есть смысл перевести
Вот с этим согласен. Мой сайт - http://фирмы.онлайн
И данный вопрос остается актуальным, как ни как уже больше года прошло, может появились более надежные и быстрые способы много поточной работы программ написанными на NB ?
И данный вопрос остается актуальным, как ни как уже больше года прошло,
Ничего не изменилось и ничего не изменится. Уж сколько раз обсуждали эту тему. Создание многопоточных приложений В ПРИНЦИПЕ НЕВОЗМОЖНО в NeoBook!
Ситуация с динамическим созданием объектов тоже не изменилась. Все вопросы на эту тему просьба поднимать на оффоруме.
============================
Тема временно закрыта до внесения соответствующих изменений в NeoBook самими разработчиками. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться