Как объявить свойство для грида в VCX | |
---|---|
Бураков Сергей Автор Сообщений: 280 Откуда: Calgary Дата регистрации: 07.02.2005 |
В .PRG все делалось просто, присваивал значения при объявлении класса.
А как быть при визуальном программировании? |
Re: Как объявить свойство для грида в VCX | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Вызови класс на редактирование, поменяй что надо и сохрани.
Или ты о другом? ------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Как объявить свойство для грида в VCX | |
---|---|
Бураков Сергей Автор Сообщений: 280 Откуда: Calgary Дата регистрации: 07.02.2005 |
А где вводить свойства, если в окне FORMS->NEW PROPERTIES, то вводятся свойства формы, а не грида?
|
Re: Как объявить свойство для грида в VCX | |
---|---|
AleksM Сообщений: 17881 Дата регистрации: 11.11.2003 |
Э, батенька так не годиться. На основе грида, создай свой класс (закладка Classes) и вот его уже вставляй в форму. А нужно что к собственному классу прибавить/убавить/изменить, опять же меняешь все на закладке Classes.
------------------ Лучше переесть, чем недоспать. Не спеши, а то успеешь. |
Re: Как объявить свойство для грида в VCX | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, Сергей!
Дело в том, что можно задавать новые свойства и методы только для КЛАССА - соответственно ни в prg, ни в vcx ты не сможешь описывая класс формы добавить свойство или метод её члену (гриду в частности). Соответственно надо завести класс грида, как и советует AleksM и уж там заводить свойства и методы. А вот присвоить какие-то значения свойствам (уже имеющимся конечно!) member-объектов (или переопределить их методы/обработчики событий) - можно на уровне класса-контейнера. Причём для prg уровень вложения ограничивается 1-цей (т.е. скажем из связки Форма-грид-колонка-текстбокс можно лишь для первых двух уровней задать свойства/методы, для колонки уже нельзя - максимум - это в Init класса присваивать значения свойствам, но это конечно сильно ограниченно) А вот для vcx уровень вложения теоретически никак не ограничен (ну можно конечно сказать что ограничен глубиной вложенности вызовов процедур, но и то не факт) - т.е. можно в одном классе задать и свойства для грида, и для колонок и для текстбоксов в них... Это вызывает порой трудности - т.к. не все понимают, что невозможно сделать простой трансформации vcx в prg - как раз по этой причине - то что в vcx 1 класс в prg может вылиться в целую кучу классов. ------------------ WBR, Igor |
Re: Как объявить свойство для грида в VCX | |
---|---|
Rustam Сообщений: 235 Откуда: Иркутск Дата регистрации: 14.10.2000 |
Если создать свой класс потомок не очень хочется, можете пользоваться методом AddProperty
Желательно добавить новое свойство в методе Init Gridа, хотя это необъязательно. Удачи ------------------ |
Re: Как объявить свойство для грида в VCX | |
---|---|
Бураков Сергей Автор Сообщений: 280 Откуда: Calgary Дата регистрации: 07.02.2005 |
Спасибо, ребята. Как-то сбивает с толку то, что в VCX можно, в отличие от PRG , не создавая нового класса, описывать обработку событий, поэтому казалось, что и свойства так же просто можно добавлять. Как только доберусь до работы, сразу же проверю, как работает Addproperty в Init.
|
Re: Как объявить свойство для грида в VCX | |
---|---|
Aijik Сообщений: 2145 Откуда: Ростов-на-Дону Дата регистрации: 08.01.2002 |
Igor Korolyov
Цитата: Для PRG сможет Для VCX в дизайн-тайме члену тоже можно добавить свойсва и методы, но только программно (ASELOBJ/AddProperty/WriteMethod), и такие свойства и методы даже сохраняются в структуре SCX/VCX если посмотреть поля Properties и Methods (хотя конечно же, для структуры SCX/VCX этого мало, для всех "индивидуальных" свойств/методов там дожна еще присутствовать запись в декларирующем поле Reserved3). Однако, впоследствии в рантайме ни один из этих "хакерозачатых" свойств и методов не работает, к тому же фокс постоянно пытается стереть такие свойства из структуры при следующем открытии формы/класса на редактирование. Для PRG же, напротив, нижеследующая конструкция явялется абсолютно рабочей:
Понятия не имею с т.з. классического ООП багофича это или нет, но факт остается фактом... Цитата:Ты не прав. В общем случае ничем он не ограничивается. Вот пример из четырех вложенных друг в друга контейнеров, в последнем из которых сидит текстбокс. Для чистоты эксперимента форма унаследована целиком и именно в наследнице для свойства текстбокса прописывается портянка из вложений
Тот же пример "из жизни гридов", который привел ты, касается только одного из частных случаев, а именно когда потроха колонки не описаны явно (т.е. когда фокс сам домысливает, а что же там должно быть). При этом, заметь, для мембера 3-го уровня (колонка) всё еще можно прописать свойства (ты же утверждаешь обратное), а вот дальше (текстбокс/хедер) уже облом:
Если же начать описывать объекты явно, то проблемы с пропертями вложенных объектов у Column испаряются. Пример ниже: текстбокс явно описан в классе колонки, и поэтому ошибка с присвоением ему цвета из прошлого примера исчезла. Хедер же так и остался не описанным явно, поэтому на нем мы имеем ту же ошибку ("Header1 не найден"). Ошибка исчезнет только когда хедер также будет описан явно:
|
Re: Как объявить свойство для грида в VCX | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, Aijik!
Ну насчёт описания НОВЫХ свойств для member-object в prg ты совершенно прав, это я упустил из вида. Для всего-же прочего... Цитата:Посчитай сколько там классов? И описывается ли в ОДНОМ классе иерархия вложенности >2 уровней... нет, ибо ПОКА фокс такого не поддерживает (хотя я например не вижу никаких "идеологических" причин сдерживающих такое дополнение синтаксиса ADD OBJECT). Насчёт "задания свойств" через уровень - да оно работает, но как видишь не совсем стабильно. Почему - тоже интуитивно понятно - очерёдность создания member-объектов и очерёдность "присвоения свойств описанных в DEFINE CLASS" видать входят в конфликт друг с другом - как раз в случае НЕЯВНО создаваемых member-объектов - вот колонка успела создаться - может потому что ColumnCount=2 отработал раньше чем MyGrid.Column1.BackColor = 255 может по какой-то иной причине... Кстати интересно посмотреть на поведение при ColumnCount = -1 - тогда грид тоже автоматом создаёт кучу объектов, но видимо в несколько другой момент времени Аналогично наверное будет и с методами member-объектов. Но что самое печальное - я нигде не нашёл даже слабого описания того что и как происходит "внутрях" фокса в процессе инстанциации объектов - когда "можно" обращаться к подобным свойствам/объектам, а когда нет, когда можно написать PROCEDURE Container1.Grid1.Column1.Header1.MyMethod ... а когда нет. Так что думаю не проиграет тот, кто ограничится самым простым, документированным и прозрачно-понятным способом использования ООП в фоксе - пускай это и приведёт к увеличению на порядок числа "простых" классов (я почему-то думаю что создаваемый при работе vcx/scx конгломерат вложенных member-объектов для ОДНОГО класса не сильно проще/меньше/лучше чем твои 5 КЛАССОВ в примере на вложенность). ------------------ WBR, Igor |
Re: Как объявить свойство для грида в VCX | |
---|---|
Aijik Сообщений: 2145 Откуда: Ростов-на-Дону Дата регистрации: 08.01.2002 |
Мне тут подумалось, что в принципе присутствие записей текстбокса и хедера в дефолтном гриде все же оправдано. Базовый класс Column - по-умолчанию всё же пустой класс, без единого объекта, и автоматически подсовываемые фоксом textbox1 и header1 (последний так вообще удалить нельзя) все же формально добавляемые (хоть и не явно, хоть и автоматически) объекты, а потому в принципе их присуствие в структуре SCX/VCX дефолтного грида всё же объяснимо. Но в любом случае, общего смысла это не меняет, самый главный трабл не в этом, а в более серьёзном нарушении структуры - отсутствии записи для колонки
|
© 2000-2024 Fox Club  |