Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.07.2012, 10:58
iosfixed iosfixed вне форума
Прохожий
 
Регистрация: 21.07.2012
Сообщения: 5
Репутация: 10
По умолчанию array of TStrings

Просто впал в ступор. Проблема в следующем: суть - есть массив из элементов TStrings. Через диалог открытия файлов в каждый элемент массива должен записываться список из нескольких файлов, полученных через диалог открытия:
Код:
if OpenDialog1.Execute = true
then fls[Current] := OpenDialog1.Files
else ShowMessage('Загрузка отменена');
Но затем обнаруживается, что когда я, допустим, забил пять элементов списками файлов, вызвав любой с первого по пятый я получу результат последнего забитого элемента. Циклов в программе нет. И когда я заменил содержание строк на количество строк в элементе:
Код:
if OpenDialog1.Execute = true
then tmp[Current] := OpenDialog1.Files.Count
else ShowMessage('Загрузка отменена');
Где tmp - массив целых, работало всё как надо. Соответственно возникает вопрос - собака зарыта в типе данных TSrings? Надо как-то по другому с ними работать?
Ответить с цитированием
  #2  
Старый 22.07.2012, 11:08
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

инкремента Current нет
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 22.07.2012, 11:19
iosfixed iosfixed вне форума
Прохожий
 
Регистрация: 21.07.2012
Сообщения: 5
Репутация: 10
По умолчанию

Есть, но он несколько в другом месте программы. Всё сюда тащить бессмысленно.
Я не зря указал, что если массив из TSrings заменить массивом целых, всё записывается как надо и куда надо
Ответить с цитированием
  #4  
Старый 22.07.2012, 11:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

упс, про Assign то не написал
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 22.07.2012, 11:42
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
с первого по пятый я получу результат последнего забитого элемента.
во всех элементах записана ссылка на один и тот же объект
Ответить с цитированием
  #6  
Старый 22.07.2012, 11:56
iosfixed iosfixed вне форума
Прохожий
 
Регистрация: 21.07.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
упс, про Assign то не написал
Можно подробнее, пожалуйста?
Ответить с цитированием
  #7  
Старый 22.07.2012, 12:09
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Используй
Код:
tmp[current].AddStrings(OpenDialog1.Files);
а то у тебя, как писал Pyro, элементы ссылаются на список файлов, который каждый раз меняется при новом открытии диалога.
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
iosfixed (22.07.2012)
  #8  
Старый 22.07.2012, 12:13
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
tmp[Current].Assign(OpenDialog1.Files);
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
iosfixed (22.07.2012)
  #9  
Старый 22.07.2012, 12:27
iosfixed iosfixed вне форума
Прохожий
 
Регистрация: 21.07.2012
Сообщения: 5
Репутация: 10
По умолчанию

Спасибо большое, теперь всё работает
Если не затруднит, объясните на пальцах, что значит "ссылается на один и тот же объект?". Я понимаю, что OpenDialog1.Files каждый раз новый, но ведь элементы же тоже меняются.
Ответить с цитированием
  #10  
Старый 22.07.2012, 12:36
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Используя оператор ":=" в случае обьектов (не переменных), ты передаешь ссылку на обьект. Проще говоря, обьекты в Delphi - это ссылки на диапазоны памяти, ты этим ":=" первой "ссылке" присваиваещь значение "второй", как результат, обе они ссылаются на один и тот же обьект. Кхм
Ответить с цитированием
  #11  
Старый 22.07.2012, 14:13
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
Я понимаю, что OpenDialog1.Files каждый раз новый
видимо нет
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter