Нужно реализовать чтобы при запуске дочерней формы все компоненты в ней обнулились (поля, таймеры и т.д.) тоесть чтобы дочерняя форма как-бы стартовала все время заново. Соответственно и при закрытии дочерней формы все процессы в ней (таймеры, циклы и т.д.) убивались.
Как вариант пробовал ChildFormEx в режиме Mode=OnlyOnce с показом как модальной (doShowModal) - все хорошо и запускается по новой и убивает все после закрытия, но одна беда - в главной родительской форме стоит асинхронный COM-порт и он передает данные в дочернюю форму и дочерняя форма отправляет данные назад. Данные передаются в дочернюю форму нормально, а при попытке что-то отправить в порт - программа вываливается с ошибкой, причем непонятно какой, каждый раз по разному или с зависанием или с закрытием программы... Я так понимаю - это из-за модальности так-как процессы основной формы заморожены и чегото туда сувать в это время некоректно?
Можно как-то сделать по другому? Или всетаки придется мостить кучу линков на сбросы и остановки компонентов в дочерней форме?
------------ Дoбавленo в 20.49:
PS Походу это таки связано с работой асинхронного порта в главной форме (именно выдаче данных для дочерней формы). Я так понимаю - это тупик, так как работа в основной форме должна быть остановлена, а асинхронный порт там что-то делает, что и вызывает неадекватную реакцию... да и порт асинхронный, как а понимаю, не совсем стандартный компонент... Жалко (
Этот топик читают: Гость
|
Ответов: 53
Рейтинг: 1
|
|||
| карма: 0 |
|
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
|
Редактировалось 1 раз(а), последний 2025-01-17 15:02:06 |
|||
| карма: 0 |
|
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
|
Редактировалось 1 раз(а), последний 2025-01-17 15:02:06 |
|||
| карма: 0 |
|
|
Ответов: 9906
Рейтинг: 351
|
|||
|
Задрало уже это OnlyOnce...
Вот захотелось кому-то дать умное слово. Неизвестно зачем. Единственное использование св-ва Mode в кодах: Что означает, что даже Standart отличается от Dynamic - ТОЛЬКО стартовым созданием одного экземпляра схемы. И все. |
|||
| карма: 9 |
|
|
Ответов: 53
Рейтинг: 1
|
|||
|
Ошибка выдается следующая
Такая ошибка вываливается в момент когда с асинхронного порта приходит сообщение в МТ-потоке(зачастую сообщение об ошибке бесконечно множится, иногда просто прога закрывается со звуком ошибки и без сообщения) Это если ChildFormEx в режиме Mode=OnlyOnce с показом как модальной (doShowModal). Как только Mode=Standard - ошибка не выскакивает при том-же модальном показе. Собрал небольшую схемку с дной ChildFormEx и асинхронным портом и не смог повторить ошибку - все работает и в Mode=OnlyOnce и в Mode=Standard. Очевидно - это комплексная проблема, гдето запрятаная в переплетении схемы, и до момента пока не начну приводить схему в порядок будет проблематично ее диагностировать... Буду всетаки делать повторные инициализации при показе формы и сбросы при ее закрытии. Или есть способ как в дочерней форме все сбросить без Mode=OnlyOnce в момент ее закрытия? |
|||
| карма: 0 |
|
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
|
Редактировалось 1 раз(а), последний 2025-01-17 15:02:06 |
|||
| карма: 0 |
|
|
Ответов: 53
Рейтинг: 1
|
|||
|
Тут именно форма нужна.
Суть такая: программа-настройщик постоянно висит в UART-сети, тоесть COM-порт открыт в главной форме (и его нельзя закрыть и открыть еще гдето, так как постоянно передаются пакеты информации). Какие либо действия (посылка настроек в сетевое устройство или еще чего) выполняются в открываемых дочерних формах (так как физически это невозможно уместить на одном поле главной формы). С каждой формы мало того, что шлются пакеты информации в КОМ порт (тот что в главной форме), так еще и принимаются ответы от устройства о доставке пакета. И кстати, по пути следования пакета к дочерней форме, он пересекает еще пару панелей... Вот так выглядит дочерняя форма сохранения настроек кнопок пульта
------------ Дoбавленo в 00.24: PS. net-2-40-100-232.cust.dsl писал(а): Есть же динамические контейнеры с точками ##... отработала схема и уничтожайте экземплярВ справке написано: "Динамический - основной режим работы всех динамических элементов контейнеров. В этом режиме внутренняя схема не создается в программе до тех пор, пока не будет вызван метод ##Add(подробнее об этом читайте в справке по компоненту) и соответственно живет и работает все время до её принудительного уничтожения методом ##Delete или ##Clear." В справках на компоненты описания точек ## нет. Где можно о них почитать подробней? |
|||
| карма: 0 |
|
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
|
Редактировалось 1 раз(а), последний 2025-01-17 15:02:06 |
|||
| карма: 0 |
|
|
Ответов: 53
Рейтинг: 1
|
|||
|
Как точки поставить я знаю.
И про контейнеры документ читал. Но где более детально описание лежит? Хотябы какие точки вообще есть (перечень). Вроде как работает на элементарной схеме: code_30976.txt Буду пробовать в реальной программе... |
|||
| карма: 0 |
| ||
| файлы: 1 | code_30976.txt [3.2KB] [101] |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
|
Редактировалось 1 раз(а), последний 2025-01-17 15:02:06 |
|||
| карма: 0 |
|
|
Ответов: 3851
Рейтинг: 159
|
|||
|
%HiAsm%TutorialMultiElementEx.sha |
|||
| карма: 0 |
|
|
Ответов: 53
Рейтинг: 1
|
|||
|
Andrey писал(а): %HiAsm%TutorialMultiElementEx.shaСпасибо - это то что нужно. Andrey писал(а): А вот этого я чет не понял. Перечень каких точек имеется ввиду?Вот перечень точек, из документа выше: ##add - добавляет в массив новую копию схемы и устанавливает её текущей. ##select - устанавливает текущей схему, индекс которой указан в потоке ##delete - удаляет из массива схему, индекс которой указан в потоке. при этом текущая схема не устанавливается. ##hselect - устанавливает текущей схему, индентификатор которой указан в потоке ##clear - удаляет все схемы из элемента ##hdelete - удаляет из массива схему, идентификатор которой указан в потоке. при этом текущая схема не устанавливается. ##count - содержит количество элементов в массиве ##index - содержит индекс текущей схемы в массиве ##handle - содержит идентификатор текущей схемы |
|||
| карма: 0 |
|
12




Поиск
Друзья
Администрация