![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| alexgorbach |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Здравствуйте. Такая проблема: создал компонент, наследник TStringGrid, в нем есть свойство типа TStringList, в конструкторе оно создается. Оно описано как published, в инспекторе объектов появляется соответствующее свойство. Кидаю компонент на форму, заполняю это свойство, оно вполне себе корректно отображается в моем компоненте, но при запуске программы запускается конструктор моего компонента, и в нем это свойство создается заново, таким образом не отображая информацию, введенную на этапе проектирования. Код с комментариями и скриншоты прилагаются. Спасибо.
Вот скрины формы (на этапе проектирования и после запуска): ![]() |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
alexgorbach, попробуй перенести создание FFio до вызова inherited Create...
-------------------- There are always someone smarter than you... |
|||
|
||||
| alexgorbach |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
MetalFan, попробовал, ноль эмоций.
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
1. Вместо TStringList везде использовать Tstrings. Оставить TStringList только в Create, в создании FFio.
ку? 2. Посмотреть dfm - там нужные значения присутствуют? |
|||
|
||||
| alexgorbach |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
kami, поправил, теперь везде в классе TStrings, только в конструкторе оставил FFio := TStringList.Create;
А вот в .dfm, насколько я понял, не сохраняется: ввожу на этапе проектирования в мое свойство 3 строки, запускаю, потом смотрю .dfm, вот что в нем:
Не подскажете, как это поправить? Записывать явно в файл формы? |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Компонент инсталлирован в палитру?
Если да - попробуйте перебилдить пакет с ним, удалить с формы и положить обратно. И в догонку: если сделать так:
новая строка ведь не появится, так? Просто в приведенном коде не вижу обработки события TStringList(FFIO).OnChange, хотя оно мне не очень нравится. В дженериках это сделано лучше с событием OnNotify (хотя и с ним не всё гладко при удалении элемента). Имхо, обработка OnChange крайне нужна - Delphi не будет при загрузке делать новый Tstrings и заменять созданный в конструкторе на него. Добавлено через 3 минуты и 23 секунды А, у Вас же DrawCell присутствует... |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
||||
|
||||
| alexgorbach |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
Я думал, что в нем дело. Закомментировал DrawCell и SelectCell, но ничего опять же не поменялось. Насчет переноса из свойства в табличку. Я делал вот так (некрасиво, но, как я надеялся, должно бы работать):
То есть, при закрытии редактора в мой грид по идее должны занестись значения и там быть. |
|||
|
||||
| kami |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
При загрузке компонента SetFIO вызываться не будет, имхо.
Расширяя мое предыдущее сообщение, попробуйте сделать так:
В конструкторе:
Чего мы этим добиваемся: реакции компонента на изменение FFIO (не переприсваивание, а именно изменение, пример я показал в предыдущем сообщении). Как только что-то добавляется,удаляется, меняется в FFIO - вызывается MoveData
Да нет, дело не в них. Я сперва подумал, что в этих методах идет реакция на изменение FFIO.
Это по идее |
||||||||
|
|||||||||
| alexgorbach |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
kami, ух, спасибо, так заработало! А как сделать обработчик для другого свойства, Mark? Оно имеет тип TArray, определенный мной, и OnChange у него нет...
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
||||
|
||||
| alexgorbach |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 28.11.2012 Репутация: нет Всего: нет |
kami, тогда свойство Mark просто пропадет, а в редакторе свойства Fio нужно будет указывать сразу имя и значение? У меня требование - наличие свойства Mark с редактором, аналогичным редактору Fio.
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |