Вверх ↑
Ответов: 1841
Рейтинг: 369
#1: 2012-07-05 13:47:33 ЛС | профиль | цитата
Обнаружил очень хитрую ошибку в последнем билде RTCG...
Т.к. в CNET не реализовано изменение z-порядка контролов (передний/задний план), то воспроизвести в пакете CNET его не выйдет...

Расширенное описание структуры тестового пакета:
hiSys.hws:
func create(entry)
 gvar(blk_gadget)
//blk_gadget = block.reggen()
end

hiProject.hws (EntryPoint); Class: WinElement
func doStart()
 this.parent.initall()
end

hiOpenWindow.hws; Class: MultiElementEx; Sub: MainForm
func init
 this.parent.initall_sdk()
end

hiMainForm.hws; Class: WinElement
func init()
 blk_gadget = block.reggen()

this.parent.initall()
trace(blk_gadget.ascode())
end

hiButton.hws; Class: WinElement
func init()
 blk_gadget.println('name:button; id:', this.id, '; text:', this.props("Text"), ';')
end
Порядок действий с элементами такой:
1) Добавляем визуальный контейнер OpenWindow.
2) Добавляем в контейнер 2 элемента Button.
3) Компилируем и получаем в отладке:
name:button; id:5; text:"1";
name:button; id:6; text:"2";
4) Изменяем z-порядок одного из элементов Button (Обязательно выбрать "Задний план") 5) Компилируем и смотрим отладку:
name:button; id:6; text:"1";
Т.е. как видим, кодоген проглотил данные элемента который был перемещён на задний план.
Причём замечу, что, в случае единичной регистрации блока blk_gadget именно в системном модуле hiSys.hws, данной ошибки не возникает...


Так же специально для этого случая, подготовил специальную сборку HiAsm, с минимальным к-вом пакетов (2) и тестовых элементов (5) представленных выше (компилятор пустышка - cmd).

Схема описанная выше, и наглядно демонстрирующая ошибку (только для для спец. сборки):
code_28407.txt
Собственно сама сборка (portable+7z): Скачать HiAsm_RTCG_bug.7z (2 мб)

p.s. Вот как-то так...
------------ Дoбавленo в 13.47:
Ещё один баг-репорт.
block.delete(<name>) - работает не корректно (точнее вообще не работает).

Выполнив следующий код:
blk_test = block.reggen()
blk_test.print('TestStr')

trace('status_block_delete: ' && block.delete(blk_test))
trace('block_link: ' && blk_test)
trace('block_begin:' && blk_test.ascode() && ':block_end')
Кодоген вернёт нам следующий результат:
status_block_delete: 1
block_link: block_1
block_begin:TestStr:block_end
карма: 1
1
файлы: 1code_28407.txt [478B] [343]
Голосовали:ser_davkin