Вверх ↑
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
#16: 2011-06-20 18:27:42 ЛС | профиль | цитата
Demnus, поделитесь проблемной схемой
карма: 1

0
Ответов: 26
Рейтинг: 3
#17: 2011-06-20 19:23:22 ЛС | профиль | цитата
Схеммы не получается.
В начале я подумал, что могу просто передать поток из корневой схеммы в любую схемму находящуюся в одной из страниц PageControl'a и оно там выполнится. И обломался.

Потом мне посоветовали спецальные точки в рамках создавать с ##. Но в итоге выполняется только схемма в текущей странице, котоаря по совместительству текущая закладка графической части элемента. Но опять же код в неактивной вкладке я выполнить не могу. Я подумал, что мне не принцыпиально где выполняется код, мне главное обновить потом содержимое элементов интерфейса, в выбранной вкладке, и все будет ок. Но выяснилось, что могу получить данные о том какя вкладка выбрана, но эвента который бы сказал, что вкладка сменилась не существует у PageControl'а хотя есть у TabControl'a. Тут я обломался второй раз.

Потом я подумал, ладно, хрен с ним, я могу получать хотябы факт клика по элементу c помощью евента - onMouseDown и потом проверять не поменялся ли номер активной вкладки. И тут возник новый облом. Попытка вынести точку onMouseDown да и любых других точек эвентов компонента PageControl приводит к выскакиванию окна с ошибкой Access violation at address 05BF8E6 in module "HiAsm.exe" Read of address 00000028. Причем проблемная точка не сохраняется при копировании схеммы в буфер. И тут унынние меня постигло окончательно. ^^
карма: 1

0
Ответов: 3889
Рейтинг: 362
#18: 2011-06-20 19:51:56 ЛС | профиль | цитата
Demnus, всё-таки, не видя схемы, трудно однозначно что-то утверждать, но когда я писал свою на более чем 500 динамических элементов (ChildPanelEx), убедился, что переполнения стека и конфликты контекстов порою выкидывают неприятные сюрпризы. Приходилось организовывать промежуточные структуры данных, через которые основной поток программы может общаться с независимыми потоками в панелях. Похоже, именно в этом и Ваша проблема - взаимодействие с "внешним миром" динамических элементов стоит ограничивать или реализовывать другими путями. Особенно характерны проблемы с попытками одним потоком что-то менять в интерфейсе графического элемента, который обслуживается другим потоком. Вы схему-то проблемную дали бы, глядишь, решение найдётся. Не через буфер обмена, а через обменник файлами (прокрутите страницу выше, там будет "Файлообмен")

Вы поймите основной принцип - каждая вкладка - по сути - отдельная программа, которая работает условно параллельно основной и своим соседям, и подловить момент, когда, например, у одной готовы данные, а вторая ничем не занята - ваша (не всегда простая) задача
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#19: 2011-06-20 20:00:10 ЛС | профиль | цитата
1nd1g0, вот ты мне расскажи -- откуда берутся другие потоки в приложении, если ты там их не создавал
------------ Дoбавленo в 19.58:
И куда ты стер свою схему
------------ Дoбавленo в 20.00:
1nd1g0 писал(а):
Приходилось организовывать промежуточные структуры данных, через которые основной поток программы может общаться с независимыми потоками в панелях

Вот откуда это высосано, из какого пальца, сам насоздавал кучу потоков или думаешь мы каждый класс создаем в своем потоке
карма: 22

0
Ответов: 26
Рейтинг: 3
#20: 2011-06-20 20:03:29 ЛС | профиль | цитата
Первый пример, как я думал что но будет работать, в первом посте этой ветки.

Второй пример как я хотел сделать с ## опять же не могу привести, по той причине что не сущчествует точки ##execute или ##update и т.п. Равно, как не существует эвента OnChange например, который выдавал бы в поток событие по факту смены страницы, я уж не гворю о такой роскоши чтоб в потоке еще и номер страницы был бы...

3ий пример.
Add(MainForm,2953706,371,175)
{
}
Add(PageControl,10646042,504,175)
{
Selected="base"
Point(onMouseDown)
}
BEGIN_SDK
Add(EditPolyMulti,8388187,21,21)
{
}
Add(PagePanel,2188506,35,105)
{
Left=35
Top=105
}
END_SDK

В элемнте PageControl, как я написал уже выше попытка добавить точку onMouseDown приводит к тому, что при наведении на нее мыши вываливается вышеприведенная ошибка. Как я написал, проблемная точка не сохраняется ни в файл, ни при копировании в буфер, поэтому чтоб убедится вам придется создать ее все равно в ручную. Точнее судя по тексту приведенного кода, скопироватся то она скопировалась но не вставляется...
карма: 1

0
файлы: 1code_24436.txt [235B] [382]
Ответов: 16884
Рейтинг: 1239
#21: 2011-06-20 20:04:43 ЛС | профиль | цитата
1nd1g0 писал(а):
поделитесь проблемной схемой
Берешь из Wiki первый пример. Там две странички. Одна с Edit, а другая с Label и показываешь как, набраемое в Edit передается в Label.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#22: 2011-06-20 20:08:22 ЛС | профиль | цитата
Demnus писал(а):
В элемнте PageControl, как я написал уже выше попытка добавить точку onMouseDown приводит к тому, что при наведении на нее мыши вываливается вышеприведенная ошибка

Demnus, я так понимаю, что у вас версия с инсталлятора Настоятельно рекомендуется обновиться до самой последней ночной сборки -- http://hiasm.com/down/night-builds/HiAsm_4.04b185_2011-06-19.exe
карма: 22

0
Ответов: 3889
Рейтинг: 362
#23: 2011-06-20 20:17:17 ЛС | профиль | цитата
nesco, так он же их создаёт, я так понимаю.
Схема стёрлась из-за одного из багов движка форума - прилипла как вложение к сообшению совершенно в другой ветке, при чистке сообщения стёрлась и там, и тут(
Там простейшее создание новых вкладок по ##Add с примером передачи данных внутрь текущей вкладки, а человеку тут надо ручное создание, похоже, а не автоматическое. Жду, когда схему покажут, наконец.

Человека можно понять, почему он недоумевает. Я вот когда шарики писал, словил их пачку, фатальные ошибки переполнения стека возникали там, где не ждали, как будто паразитная рекурсия вылезала, хотя я простейшую схему со счётчиками в контейнере делал, без связей с внешним миром на тот момент (то есть сама себя она не вызывала, естественно). Просто внутри схемы ставишь ещё одну связь на счётчик - всё, стека не хватает. Убирал - пропадал вылет. Триггер в текущей выбранной вложенной схеме было невозможно опросить точкой состояния снизу (выходил NULL, хотя на трассировке с дебагом выходило правильное значение). Обошёл все глюки, и заработало. Ньюансов много, потому надо посмотреть схему и разобраться, какая из "особенностей" вылезла на этот раз. Со своей схемой я только в полноценном дебаггере с дизассемблером нашёл причину вылетов, разобрав код классов, которые на деле, в машинных кодах, реализуются обычными процедурами с параметрами на стеке, вот стека-то и не хватало при определённом уровне вложенности и количестве объектов.

Ладно, не будем человека пугать заранее.
карма: 1

0
Ответов: 26
Рейтинг: 3
#24: 2011-06-20 20:18:25 ЛС | профиль | цитата
Обновился, появились новые компоненты у некоторых иконки сменились, но ошибка при наведении на точку onMouseDown компонента PageControl осталась.
Хочу обратить внимание это ошибка не скомпилированной програмки, не ошибка при компиляции, а ошибка среды, в момент простого наведения мыши на точку.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#25: 2011-06-20 20:26:24 ЛС | профиль | цитата
Demnus писал(а):
Хочу обратить внимание это ошибка не скомпилированной програмки, не ошибка при компиляции, а ошибка среды, в момент простого наведения мыши на точку

У меня нет такого при открытии точки onMouseDown, никакой ошибки не выдает. Сборка ставилась заново или поверх, если поверх, то такое может затесаться из старой версии
------------ Дoбавленo в 20.26:
1nd1g0 писал(а):
Просто внутри схемы ставишь ещё одну связь на счётчик - всё, стека не хватает

Давно известная проблема, колцевать у нас в схемах нельзя, если удалять самого себя, то только из другой очереди событий
карма: 22

0
Ответов: 3889
Рейтинг: 362
#26: 2011-06-20 20:32:25 ЛС | профиль | цитата
Demnus, добавляете точку, сохраняете схему, перезапускаете среду, открываете, наводите - если вылетает, дайте нам через файлообменник Вашу схему в виде SHA

------------ Дoбавленo в 20.32:
nesco писал(а):
если удалять самого себя, то только из другой очереди событий

Так я это понимаю, и что такое контекст потока знаю, потому в стеке копил идентификаторы потоков на смерть и подчищал их ресурсы перед созданием новых шариков уже в основном цикле. Вылетал он не от рекурсии, а от большого количества инстанций и общего стека, т.к. на стеке контексты каждой машиннокодовой процедуры элемента, выглядящей в схеме как очередная его копия, хранятся и где-то что-то забывало подчищать стек после выхода из одной такой процедуры, он тёк, тёк да и утекал до переполнения.
карма: 1

0
Ответов: 26
Рейтинг: 3
#27: 2011-06-20 20:34:24 ЛС | профиль | цитата
Переставил начисто. Тоже самое.
Win7sp1 x86, cor2quad q6600, 4gb ram
скрин http://forum.hiasm.com/forum_serv.php?q=56&id=2510
схемма http://forum.hiasm.com/forum_serv.php?q=56&id=2511
карма: 1

0
Ответов: 3889
Рейтинг: 362
#28: 2011-06-20 20:43:39 ЛС | профиль | цитата
Demnus,
Так делать?
карма: 1

0
файлы: 1onmousedown.png [12KB] [626]
Ответов: 26
Рейтинг: 3
#29: 2011-06-20 20:50:20 ЛС | профиль | цитата
Нет, так ошибку не выдает, но эвент не срабатывает.
Ошибку выдает если точку создавать у элемента в корневой схемме.
карма: 1

0
Ответов: 3889
Рейтинг: 362
#30: 2011-06-20 21:04:23 ЛС | профиль | цитата
Demnus, да, не срабатывает, Вы правы. В общем, Вы не пробовали использовать TabControl + статическиединамические панели? Почему выбран именно этот компонент?
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)