![]() |
|
![]() ![]() ![]() |
|
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Здравствуйте. Делаю учебное задание: есть несколько объектов некоторого класса, каждый содержит несколько полей. Нужно занести в StringGrid (1 строка = 1 объект) мои объекты. Казалось бы, ничего сложного, но! На одном требовании я заступорился. Цитирую: "для отображения полей объектов не использовать свойства Cells, Cols, Rows". Есть ли другие способы обращения к ячейкам StringGrid-а?
Это сообщение отредактировал(а) alexgorbach - 10.12.2012, 20:37 |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Может ещё и Билдером пользоваться нельзя?
![]() По теме: я других способов не знаю. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Riviero |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 25.3.2010 Репутация: 2 Всего: 3 |
Может DBGrid нужен? Или объекты не из базы данных?
|
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Riviero, именно StringGrid, точнее, даже его наследник, собственноручно разработанный. Объекты из текстовых файлов, предварително должны быть считаны в объекты класса.
|
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Так бы сразу и сказали. Сделайте обёртки над Cells, Cols, Rows и будет вам счастье ) -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Видимо вам нужно сделать Owndraw производную от StringGrid. Правда непонятно, зачем тогда именно StringGrid - делали бы сразу от его родителя (не помню, как он назывался)
|
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Это использование внутри класса. Будем надеяться, что никто не узнает ![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Сделал обертку в моем классе. Заполняет, естественно, но теперь отчего-то вылетать программа начала. Сейчас будет немного оффтопа, простите:
в конструкторе всё того же грида пишу:
а в деструкторе:
fTitles - поле класса типа TStringList*. В деструкторе вылетает программа - Access Violation. Вроде бы, 3 строчки кода, но где-то что-то упустил. |
||||
|
|||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
fTitles член класса TOwnThingGrid?
Деструктор ~TOwnThingGrid() виртуальный? Как создаёте объект TOwnThingGrid? Не удаляете ли вы fTitles ещё где-нибудь? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Хм. Обнаружил, что если закомментировать удаление моих объектов, то не вылетает. Но когда вылетает - все равно почему-то на удалении fTitles.
Регистрирую компонент, кидаю на форму в design-tme. Деструктор же вроде в TCustomGrid еще виртуальным объявлен, стало быть, у меня тоже виртуальный. .h
.cpp
Вот так заполняю его из формы: formUnit.cpp
Это сообщение отредактировал(а) alexgorbach - 12.12.2012, 09:11 |
||||||
|
|||||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Да, точно. Вроде бы, всё правильно. А зачем вам вообще нужен fTitles? В вашем случае, можно легко обойтись методом SetTitles(TStringList* t). Попробуйте в деструкторе дебагером пройтись. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
alexgorbach |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
artsb, путем нестандартных отладочных работ и с помощью всевозможных ошибок, вылетающих поочередно в разных местах, удалось привести код к работоспособному виду. Ошибки еще каким-то образом зависели от способа вызова формы, на которой мой стринггрид лежит - в немодальном варианте форма удаляется нормально и компонент не вылетает.
Кстати насчет использования Cells и прочего. Узнал подробнее, что требовалось. Оказалось, нужно текст выводить вручную в грид, перекрыв DrawCell. Жуть. Ага, вопрос все-таки появился. Можно ли в StringGrid передать значение? Пробовал в конструктор ему, но тогда невозможно его во время проектирования поместить на форму - сигнатура конструктора не подходит. Это сообщение отредактировал(а) alexgorbach - 12.12.2012, 19:52 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Насколько я помню у каждого Cellа в StringGrid кроме строки есть еще указатель на TObject. Сам StringGrid этот указатель никак не использует, так что туда можно записать все, что угодно (конечно размером не больше поинтера)
Я вам тут и предлагал это сделать. Только не перекрывать DrawCell, а сделать обработчик события OnDrawCell и поставив в пропертях StringGrid соответствующий флаг. В этом случае вам не придется делать свой компонент - можно воспользоваться оригинальным StringGrid |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Создать второй конструктор с нужным параметром или сделать специальный метод для установки значения. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ 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. |