![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
padla |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 25.6.2006 Где: Москва Репутация: нет Всего: нет |
Моя проблема:
есть TreeView и RichEdit. Мне нужно для каждого элемента TreeNode хранить RichEdit.Lines, и соответственно загружать при щелчке на ноде. Я так прикинул - выделяем в куче память, кидаем в нее содержимое RichEdit.Lines, ссылку на данные в куче кидаем в TreeNode.Data. Казалось бы все просто, но не получается это реализовать. Уважаемые гуру, помогите пожалуйста! |
|||
|
||||
dvamaster |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 30.6.2004 Где: Россия : Курган Репутация: 3 Всего: 10 |
Добавлено @ 09:56 Не забывай потом ручками почистить все TStrings(TreeNode.Data)
Для всех TreeNode Это сообщение отредактировал(а) dvamaster - 14.8.2006, 09:54 -------------------- Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/ Что же я сделал не так? /Король Лир/ Я делаю это для твоего же блага! /Любой родитель и палач/ PKUNZIP.ZIP /неизвестный/ |
||||
|
|||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
dvamaster, нет, так неправильно.
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Snowy, а чё так?
![]() Извините что леузу не в свой монастырь. Но строки, обычно, не ссылочный тип данных. И получить ссылку на конкретню строку не получится. (Если не пользоваться именно !ссылками!) При выполнении кода newString = oldString создается новый экземпляр строки и в него копируется все данные из строки oldString. По этому это будут разные строки ![]() P.S. Это так в .Net ![]() ![]() P.P.S. Если я СОВСЕМ не прав, то сильно меня не ругайте, а считайте пост за офтопп. (Но ситуация описанная в первом посте очень смахивает на эту ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
В том то и дело, что нужно запоминать строку, а не ссылку на неё.
Иначе при чистке рича, накроются и данные. Добавлено @ 10:19 Вот так мы запомним данные, а не ссылку:
|
|||
|
||||
Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 8 Всего: 13 |
ivashkanet,
newString := oldString; в Delphi в этом случае указатель на строку oldString создается. Это не .Net ![]() -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
padla |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 25.6.2006 Где: Москва Репутация: нет Всего: нет |
Хм... У меня появилась еще одна мысль:
а если сопоставить дереву TreeView дерево XML??? Думаю прокатит.... и не так критично к памяти. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
||||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
||||
|
||||
Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 8 Всего: 13 |
По данным литературы, которой я на данным момент располагаю, в этом случае увеличивается счетчик ссылок строки oldString.
Меньше всего в этом сомневался ![]() ![]() -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Fedia, Глядя на этот пример, создаётся впечатление о том, что это контекст описания работы внутренней реализации.
Потому что сам по себе кусок - полный бред. А внутренняя реализация - это совершенно другой вопрос. То как дельфи оптимизирует наши действия - не должно нас беспокоить. Сейчас мы говорим про логику построения списка. |
|||
|
||||
dvamaster |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 30.6.2004 Где: Россия : Курган Репутация: 3 Всего: 10 |
Snowy, зато работает Добавлено @ 11:35 Так TObject есть указатель, а он размерностью с Pointer, что и есть Data Добавлено @ 11:35 Сам понимаю, что это не красиво, но помогает -------------------- Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/ Что же я сделал не так? /Король Лир/ Я делаю это для твоего же блага! /Любой родитель и палач/ PKUNZIP.ZIP /неизвестный/ |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Совершенно верно, но в случае удаления исходной строки, предварительно делается копия для каждой ссылки. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Fedia |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 465 Регистрация: 2.8.2006 Где: первым встречаю р ассвет Репутация: 8 Всего: 13 |
Да, копируется. Сейчас проверил. В этом примере выдается сообщение: "test1".
Хех. А ведь я был почти уверен в своей правоте ! -------------------- Накануне решающей битвы Я иду, и надеждою зыбкой Озаряется эта дорога, Я мечтаю увидеть улыбку На лице победившего Бога… |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
dvamaster, я ж говорю - это указатель.
А нужно строку хранить, а не указатель. Если использовать указатель на RichEdit.Lines, то при чистке рича почистится и по указателю. А смысл в том, что рич один. А узлов с данными много. И в каждый должен попасть разный текст, а не один и тот же указатель на рич. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |