PS>> Имеется некий класс…
PS>> Если прописать одну из его очередей в качестве источника для List,
PS>> т.е. в поле From написать AnyClass.AnyQueue — компилятор,
PS>> естественно, глотает, но в runtime при открытии окна имеем:
PS>> Internal error 01: WSLDIAL
PS>> Do you want to GPF?VS> Это просто RTL так реагирает на нарушение принципа инкапсуляции данных
VS> Мол нефиг — мемберы не должны быть публичными…
VS> И может быть в этом и заключена вся серомяжная правда? 😉PS>> Естественно, клас проинициализирован на момент открытия
PS>> окна и очереди созданы, но увы…
PS>> А так хочется прописать напрямую… AnyClass.AnyQueue
PS>> Кто-нибудь решал эту проблему? Решил?VS> См. выше… Понятно, что если компилер допускает использование
VS> нерекомендуемых конструкций, от их можно использовать. Но нужно ли?
Не, Вадим, ты немного неправ. Можно. И вполне на законных основаниях. Только такую очередь надо «пристегивать» к листу НЕ на этапе дизайна, А ПОСЛЕ ОТКРЫТИЯ ОКНА!
Т.е., в данном случае, в дизайнере необходимо поле FROM оставить пустым. А во вставке «После открытия окна» надо написать:
?List{PROP:FROM} = AnyClass.AnyQueue
И все будет нормально!
А связано это с тем, что такие очереди в классах, как известно, декларируются как рефералы на типовые очереди, и ДО создания такой очереди ее рефереал = NULL. А если очередь «пристегнута» к листу на этапе дизайна, то компилятор напрямую вставляет адрес такой очереди в структуру окна. Вот и получается у Павла в структуре окна «зашит» NULL-ой адрес! Поэтому и ругается RTL!
Кстати, если мне изменяет память, то что-то подобное было (есть?) в хелпе по Клариону. Вот только, где конкретно, не подскажу — давно уже не заглядывал в разные «закоулки» хелпа.