|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.02.2014, 08:27 | #1 |
Пользователь
Регистрация: 29.01.2010
Сообщений: 21
|
Связь двух массивов
Доброго времени суток всем!
Встала тут передо мной задача. Имеется форма, в модуле которой объявляется через запятую два динамических массива - абсолютно одинаковых, примерно так: Код:
Решение казалось элементарным: Перед показом модальной формы присваиваю второму (временному) массиву значение постоянного массива. Код:
Код:
Двести раз перепроверил код модальной формы - ни одного упоминания основного массива в нем точно нет. Из имеющихся у меня трех учебников по Делфи, все как один говорят, что оператор присваивания вычисляет значение правой части и присваивает его левой части. А также что к одинаковым по параметрам массивам возможно применение оператора присваивания. Всё. Ни о какой последующей связи между операндами нигде ни слова. Дебаггер показывает, что непосредственно перед операцией присваивания временный массив xfig абсолютно пуст. То есть связь появляется именно в результате присваивания. В принципе саму эту проблему я решил. Сразу после присваивания увеличил число элементов основного массива на один пустой элемент. Магическая связь разорвалась. Но: 1. Программа стала выполнять два абсолютно бессмысленных с точки зрения ее назначения действия (ведь в случае отмены надо вернуть назад число элементов основного массива). 2. Хотелось бы всё-таки знать, что это было - особенности присваивания для массивов, или я все-таки что-то упустил? Вот, решил посоветоваться с сообществом. Есть у кого мысли? Мож кто-то встречался с подобным и знает, как с этим бороться? Спасибо заранее. Последний раз редактировалось victorixx; 14.02.2014 в 08:32. |
14.02.2014, 08:51 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Код:
Поэтому в таких случаях делают сериализацию. Ну самое простое - в цикле попереганять из массива в массив. А вообще UNDO так не делается. ИМХО. xfig я кстати бы скинул в форму модальную, а не хранил в том же модуле.
I'm learning to live...
|
|
14.02.2014, 08:53 | #3 |
Заблокирован
Регистрация: 31.03.2011
Сообщений: 976
|
Код
Код:
|
14.02.2014, 09:41 | #4 | |
Пользователь
Регистрация: 29.01.2010
Сообщений: 21
|
Цитата:
|
|
14.02.2014, 09:57 | #5 | |||
Пользователь
Регистрация: 29.01.2010
Сообщений: 21
|
Цитата:
Код:
Цитата:
Цитата:
|
|||
14.02.2014, 11:01 | #6 |
Заблокирован
Регистрация: 31.03.2011
Сообщений: 976
|
Наверное это происходит потому, что ты обнуляешь не данные, а ссылку на данные. Кстати именно по этой причине не желательно чистить массивы таким методом, так как память не очищается.
А то что по другому нельзя, тебе вообще по фиг? Железобетонный подход. P.S. Копируй ручками, и не выёживайся. Последний раз редактировалось doktor255; 14.02.2014 в 11:12. |
17.02.2014, 02:51 | #7 |
Пользователь
Регистрация: 29.01.2010
Сообщений: 21
|
|
17.02.2014, 09:19 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
17.02.2014, 09:22 | #9 |
Заблокирован
Регистрация: 31.03.2011
Сообщений: 976
|
|
19.02.2014, 06:48 | #10 |
Пользователь
Регистрация: 29.01.2010
Сообщений: 21
|
Итог: Сделал цикл и счастлив. Спасибо всем за разъяснения.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
связь двух dblookupcombobox | qwertase | Общие вопросы Delphi | 1 | 23.06.2011 20:14 |
Вопрос про связь двух таблиц | Vactive | Microsoft Office Access | 1 | 27.11.2010 21:33 |
Связь двух комбобоксов!!! | viteyk | Компоненты Delphi | 13 | 18.10.2010 14:48 |
Связь двух таблиц | Denmart | БД в Delphi | 5 | 19.08.2009 10:58 |
связь двух таблиц | cub | Microsoft Office Excel | 11 | 03.08.2009 18:45 |