![]() |
|
![]() ![]() ![]() |
|
alexgorbach |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Как раз сделать свой компонент - обязательное условие ![]() Боюсь, что такое не прокатит - использовать сендер не по назначению...
Так даже если создам, когда компонент на форму ставлю, вызывается же конструктор по умолчанию? И мне нужно, чтобы как только форма с компонентом открылась, выполнились некоторые действия, использующие данные, которые необходимо передать в грид, то есть после создания формы с гридом динамически вызывать метод установки значения уже поздно, если в конструкторе выполнять эти самые действия. Или как достичь нужной последовательности действий? Upd. Попробовал с перерисовкой. Не работает. Вот почему: я в DrawCell проверяю, считаны ли объекты из файла. Если нет - считываю. При создании формы с гридом вписываю в поле грида путь к файлу, по которому в перерисовке по идее откроется файл и считается информация. Потом рисую. Но дебаггер говорит, что мой DrawCell не выполняется при появлении формы с гридом, таким образом, грид пустой. Это сообщение отредактировал(а) alexgorbach - 12.12.2012, 21:33 |
||||
|
|||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
А xvr про Sender ничего не говорил ![]() Тогда объясните, что за действия вы хотите сделать и какие данные хотите передать. Нет ли возможности в конструкторе по умолчанию заполнить эти данные значениями по умолчанию, а потом изменить их через ObjectInpector в Design Time или программно через метод во время выполнения программы? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Вот полная история: 1) есть программа, в ней главная форма и несколько дочерних, которые создаются динамически 2) двое из дочерних форм - экземпляры одного класса формы, содержат на себе OwnThingGrid - компонент, мною созданный 3) этот компонент должен содержать свойство - адрес отображаемого объекта-коллекции 4) объект-коллекция содержит в себе объекты другого класса (не суть важно) 5) из главной формы по кнопочкам я создаю дочернюю форму с гридом, который уже на ней лежит, и нужно, чтобы при открытии в грид сразу занеслись данные из объекта-коллекции, используя DrawCell. Для этого я пытаюсь как можно быстрее занести адрес коллекции в соответствующее свойство грида, чтобы оно уже было перед перерисовкой и соответственно данные правильно занеслись в грид. Еще коллекции бывают 2х типов. Поэтому хотелось бы в грид извне наравне с адресом передать также идентификатор типа коллекции. |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Тогда годится ![]()
Сделайте проперть у вашего контрола. В дезайн тайме поставите в нее что надо. Если же надо именно в run-time, то запишите в нее (проперть) что надо в event'е OnFormCreate формы, куда вы вставляете свой контрол Добавлено через 4 минуты и 45 секунд
Это обычно делается немного не так. В вашем OwnThingGrid делаете проперть типа коллекции, которую нужно отображать. Реализация OwnThingGrid должна нормально показывать грид при отсуствии коллекции (не падать), а так же опознавать присваивание новой коллекции и обновлять свое экранное представление. При создании дочерней формы вы ее создаете (конструктором), потом присваиваете необходимую коллекцию в проперть OwnThingGrid, а затем вызываете Show() или ShowModal() от созданной формы. |
||||
|
|||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Хм. То есть, можно в метод SetПропертя, отвечающий за установку нового значения свойства-адреса, запихнуть перерисовку грида, так? Это ей какой-то Инвалидейт надо вызвать там, или я не так понял? |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Собственно, xvr уже всё рассказал )
Ога.
Так же, перерисовка сама вызывается, если вы меняете количество строк или столбцов, или значение в одной из ячеек. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Так, вроде заносит данные, как и нужно было, но теперь опять появилась старая ошибка, не знаю даже, как отладить... Попробую проверить пока все очистки памяти.
Это сообщение отредактировал(а) alexgorbach - 12.12.2012, 23:41 |
|||
|
||||
Aligofren |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 13.12.2012 Репутация: нет Всего: нет |
Вы передаёте значения в OnCreate?
Я всё правильно понял? |
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Возникла очередная проблема. Вывожу в грид данные при перерисовке. Периодически программа падает с сообщением Access Violation на строчке, указанной в листинге. Ничего сомнительного там не вижу.
|
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Почему не обрабатывается ситуация, когда строка пустая? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
||||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Можно про эти ситуации поподробнее? Что за ситуации и как часто возникают? Не может ли ошибка возниать строкой выше? Например по причине выхода индекса за пределы диапозоно? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
У меня есть формочка (не главная) с этим мои гридом. У грида есть свойство Titles - заголовки столбцов, заполняется на этапе проектирования. Есть также свойство Col - указатель на коллекцию, которую он, грид, отображает. В DrawCell грида, который выложен выше, вручную рисуются в грид заголовки и данные из коллекции. Запускаю программу, открываю форму, всё хорошо, отображается. Закрываю. Открываю еще раз - вылетает Access Violation. Опытным путем выявлено, что вылетает именно на той самой строке, при ACol = 4 (последний столбец). За шаг до вылета смотрю отладчиком str - все нормально, он равен нужному заголовку. TextWidth (а я так подозреваю, здесь кроется подвох) использую для выравнивания текста по центру. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
||||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
xvr, в деструкторе-то грида да, удаляется fTitles, но при новом открытии формы конструктор создает снова грид, в конструкторе которого в свою очередь создается fTitles.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |