powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Указать на TStringList.Object[] как?
64 сообщений из 64, показаны все 3 страниц
Указать на TStringList.Object[] как?
    #40027824
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то туплю, как взять указатель на ссылку на объект в TStringList.Object[]
так не катит @(TStringList.Objects[i]), ошибка variable required
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027829
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Index
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027831
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin,

"указатель на ссылку на объект" - в данном случае - никак, ибо TStringList.Objects[i] - свойство, возвращающее указатель на i-й объект списка.
Указатель на сылку" в данном случае - зачем? Указатель на свойство должен вернуть - что? Ссылку на метод-геттер, ссылку на метод-сеттер - ?

Если хочешь заменить один объект другим - просто присваиваешь Список.objects[i] := новое_значение, и всё.
И - не TStringList, а конкретный экземпляр класса.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027834
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

типа "дерево" - указатель на ссылку нужен в другом TStringList, который строится на этом TStringList с его Objects, чтобы меняя в дочернем объекты - это отражалось на родителе без поиска по Index родителя.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027835
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*удалено
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027836
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
свойство, возвращающее указатель на i-й объект списка

как тогда взять указатель на этот указатель?
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027837
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получается мне надо в TStringList.Object[] сувать не ссылки на объекты, а сразу брать указатель на ссылку и тогда можно будет тупо присваивать
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027838
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя не, фигня, объекты же появляются в процессе произвольно, а не сразу (
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027841
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

да точно, логично, вместо таскание в дочерний список объектов, можно просто передавать их Index родителя
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027842
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,

Приличным способом никак. Но как говорится, если очень хочется...
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027844
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

да обойдусь уж передачей Index родителя, без указателей конструкция обращения стала огромной, но полагаю что "неприличный" способ еще более громоздкий ) уже очень не хочется наследовать TStringList и там кучу всего переписывать )
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027845
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin
ъъъъъ
свойство, возвращающее указатель на i-й объект списка

как тогда взять указатель на этот указатель?


У вас бред, пациент.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027846
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

в чем бред то, двойной указатель потеря потерь в дельфах? ))
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027848
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin
ъъъъъ,

типа "дерево" - указатель на ссылку нужен в другом TStringList, который строится на этом TStringList с его Objects, чтобы меняя в дочернем объекты - это отражалось на родителе без поиска по Index родителя.

И зачем тут ссылка на указатель?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var 
 o : TObject;
  list1, list2 : TStringList;
  i, j : integer;
begin
...
list1.objects[i] := o;
list2.objects[j] := o;


И о, и list1.objects[i] и list2.objects[j] указывают на один и тот же объект.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027850
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

объекты появляются в list1 в ходе работы, их там нет с общей инициализацией

если нужна конкретика, то list1 это глобальный список, который используется для заполнения и удаления объектов в других потоках, а list2 расширенный локальный список, который используется в основном потоке, где Objects "ПОЧТИ" те же самые что и в list1 + еще и дублируются.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027851
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

поэтому и хотелось получить указатель на переменную, которая хранит указатель на объект
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027854
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin
ъъъъъ,

поэтому и хотелось получить указатель на переменную, которая хранит указатель на объект

Почему "поэтому"?
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027855
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ

Почему "поэтому"?

потому что при двойном указателе можно всегда ссылаться на один и тот же объект, а не присваивать его по нескольку раз
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027856
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

т.е. если б можно было

инициализация
list1.objects[i] := nil;
list2.objects[j] := @list1.objects[i];

затем где то
list1.objects[i] := o

и еще где то
Assigned(list2.objects[j]^) = true
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027857
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,

По-моему с такой задачей проще свой велосипед написать...
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027861
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

если выяснится, что это не потокобезопасно, то придется ))
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027873
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin
ъъъъъ,

т.е. если б можно было

инициализация
Код: pascal
1.
2.
list1.objects[i] := nil;
list2.objects[j] := @list1.objects[i];


...

Что это должно означать? Ну, какое действие должно выполняться, в чем отличие
Код: pascal
1.
list2.objects[j] := @list1.objects[i];


от
Код: pascal
1.
list2.objects[j] := list1.objects[i];



?
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027877
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ

Что это должно означать? Ну, какое действие должно выполняться, в чем отличие
Код: pascal
1.
list2.objects[j] := @list1.objects[i];


от
Код: pascal
1.
list2.objects[j] := list1.objects[i];


?

Он думает, что objects[] - это массив, тогда бы это имело смысл.
Но это индексное свойство, вот в чём облом.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027878
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

все равно непонятно, что бы ему дало копирование адреса массива.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027881
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
alekcvp,
все равно непонятно, что бы ему дало копирование адреса массива.

Ну я, например, иногда храню данные (записи) в одном массиве, а в другом - адреса ячеек в первом, отсортированные в нужном мне порядке - такой себе аналог индексов в БД. Суть в том, что физически у тебя хранится одна копия данных, а получить доступ к ней и изменить её ты можешь из разных мест.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027885
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ

Что это должно означать? Ну, какое действие должно выполняться, в чем отличие
Код: pascal
1.
list2.objects[j] := @list1.objects[i];


от
Код: pascal
1.
list2.objects[j] := list1.objects[i];



?


после list2.objects[j] := list1.objects[i];

попробуйте list1.objects[i] := nil сделать (объект уничтожен), а потом проверить Assigned(list2.objects[j]) и узнаете
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027890
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
wolverin
ъъъъъ

Что это должно означать? Ну, какое действие должно выполняться, в чем отличие
Код: pascal
1.
list2.objects[j] := @list1.objects[i];



от
Код: pascal
1.
list2.objects[j] := list1.objects[i];




?


после list2.objects[j] := list1.objects[i];

попробуйте list1.objects[i] := nil сделать (объект уничтожен), а потом проверить Assigned(list2.objects[j]) и узнаете


если ты присваиваешь NIL, то никакой объект не уничтожается
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027893
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

да это детали, пусть будет Free сначала иль деструктор, а потом nil

можно даже не мудрить с list2, просто уничтожить O

nil мне нужен для проверки существования объекта в TStringList.Object[]
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027899
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin
defecator,

да это детали, пусть будет Free сначала иль деструктор, а потом nil

можно даже не мудрить с list2, просто уничтожить O

nil мне нужен для проверки существования объекта в TStringList.Object[]

Короче, афтору - букварики читать.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027901
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

вы не понимаете, а мне читать ))
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027902
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin
ъъъъъ,

вы не понимаете, а мне читать ))


Не хочешь, чтобы тебя понимали - не читай.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027906
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспоминается этот топик, после которого "указатель на ссылку на объект в TStringList.Object[]" уже не удивляют
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027907
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

да куда уж проще объяснил, бывает и тройной указатель нужен, когда нужно описать что то 3х мерное.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027909
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

)) бида пичаль, теперь в этой теме на 4 страницы холивала похоже будет
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027910
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

да и в чем собсна удивление в вопросе? TStringList.Object[] это элементарный TStringItemList = array[0..MaxListSize] of TStringItem, что и имел очевидно ввиду SOFT FOR YOU, получать указатели на элементы которого уже можно без проблем.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027911
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
Вспоминается этот топик, после которого "указатель на ссылку на объект в TStringList.Object[]" уже не удивляют

Просмотрел... фу... зря я сюда влез, тут дохтур нужон...
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027912
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

точно, тем более что вместо совета тупили страницу )))
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027916
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
DimaBr,
да и в чем собсна удивление в вопросе?

У меня удивления нет, я ответ уже дал, причём два. Один во втором сообщении, дугой выше.
Вот вам третий ответ. Вам сюда .
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027919
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr

У меня удивления нет, я ответ уже дал, причём два. Один во втором сообщении, дугой выше.
Вот вам третий ответ. Вам сюда .

что то со счетом у вас плохо только, совет один, выше ничего нет, "третий" ссылка по которой и переходить смысла нет
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027920
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бывают же какие обидчивые )) я даже ник его не запомнил, а он помнит что потратил много сил на бесполезные советы, потому что я плохо сформулировал вопрос )) ужсбл ))
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027921
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
"третий" ссылка по которой и переходить смысла нет

Советую перейти и прочитать полостью. Там написано про вас.
Вы пытаетесь решить задачу X, при этом формулируете Y. "У всех Понимающих людей вопрос "как сделать Y?" вызывает недоумение: зачем это нужно? Это же бессмысленно."
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027922
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

"у всех" в данном случае 1 человек, помимо счета тут опять вопрос вашего непонимания возникает, оттого и смысла читать глубокие философские рассуждения никакого нет.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027925
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вижу смысла отвечать автору, который пытается изобрести пятиколесный велосипед (с колесами в разные стороны), и который при этом яростно игнорирует советы взять в гараже готовый нормальный двухколесный велосипед.

"Я ХОЧУ ТАК, ПОЧЕМУ ВЫ НЕ ХОТИТЕ МНЕ ПОМОЧЬ?", и бесполезно обьяснять. Пофлудить разве что, счетчик постов накрутить чутка))
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027926
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r,

)) вот чо к чему, какой велосипед, уже даже давно все переделано, хотя Бох с ним, флудите, будет что DimaBr в следующий раз запостить.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027934
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin,

забудь про указатель на указатель. при добавлении новых записей внутренний массив будет ролоцирован и все указатели полетят на юг.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027935
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,

новых записей нет, список1 строками инициализируется при старте приложения, появляются и освобождаются только объекты в нем.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027938
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wolverin
Zelius,

новых записей нет, список1 строками инициализируется при старте приложения, появляются и освобождаются только объекты в нем.

ОК, содержимое контейнера не меняется. Так зачем тебе указатель на его внутреннюю прайвед структуру?
Чем плох указатель на сам контейнер?
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027944
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

список2 содержит множество объектов и их дубликатов списка1, работа выполняется одновременно как со списком1 так и со списком2 в разных кусках кода, объекты в списке1 могут быть, а может и нет, при этом список2 всегда знает об этом

извините, но уже не знаю как объяснить!!!

Сейчас я сделал в списке2 объекты не объектами списка1, а объектами с Index списка1 (по совету DimaBr), выглядит рабоче, просто строка обращения к объекту длинная и все, в типизированном указателе это было бы намного короче.

В чем вопрос то ваш???
Почему мне нужны именно объекты? Потому что они полностью с атрибутами и методами описывают предметную область для строки списка1/2
Почему не создать новые объекты для списка2? Потому что объекты привязаны к физическому оборудованию, их нельзя создать больше чем железок!

Ничего больше не нужно мне, спасибо! так сойдет!!!
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027951
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
Что то туплю, как взять указатель на ссылку на объект в TStringList.Object[]
так не катит @(TStringList.Objects[i]), ошибка variable required

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Classes, System.Rtti;

begin

 var st := TStringList.Create;
 st.Add('hello');
 st.Objects[0] := TInterfacedObject.Create;

 var ListFieldOffset := TRttiContext.Create.GetType(TStringList).GetField('FList').Offset;

 writeLn(PStringItemList(NativeInt(st) + ListFieldOffset)^[0].FString);
 writeLn(PStringItemList(NativeInt(st) + ListFieldOffset)^[0].FObject.QualifiedClassName);
 writeLn('address of [0]: ', IntToHex(NativeInt(@PStringItemList(NativeInt(st) + ListFieldOffset)^[0].FObject), 0));
 readln;

end.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027960
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

спасибо!!! в целом уже понял, что надо обращаться через PStringItemList

...вообще где то я уже похоже делал, когда нужно было получить доступ к одноименным свойствам всех объектов с непересекающейся иерархией классов
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027963
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
использовать TStringList как хранилище обьектов - это сильный ход.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40027967
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r,

и чем он плох? то вам почему велосипед нештатный, то этот велосипед уже какой то не такой.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028026
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
Vizit0r,

и чем он плох? то вам почему велосипед нештатный, то этот велосипед уже какой то не такой.


TList?
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028069
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TObjectList вообще пушка
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028200
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r,

меня вполне устраивает функционал работы со списками строк, которые я загружаю из реестра и выгружаю в визуальные компоненты одной строкой кода.

такой себе совет, как и следующий за ним.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028294
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
Потому что объекты привязаны к физическому оборудованию, их нельзя создать больше чем железок!
Вас никто не заставляет создавать лишние объекты. Еще раз
Код: pascal
1.
2.
3.
4.
Idx := List1.AddObject('Str', TMyObject.Create);
List2.AddOnject('Str2_1', List1.Objects[Idx]);
List2.AddOnject('Str2_2', List1.Objects[Idx]);
List2.AddOnject('Str2_3', List1.Objects[Idx]);

Теперь у вас в List1 и три раза в List2 лежит один и тот же объект. Это не четыре разных объекта. Это - один объект
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028295
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
wolverin
Потому что объекты привязаны к физическому оборудованию, их нельзя создать больше чем железок!
Вас никто не заставляет создавать лишние объекты. Еще раз
Код: pascal
1.
2.
3.
4.
Idx := List1.AddObject('Str', TMyObject.Create);
List2.AddOnject('Str2_1', List1.Objects[Idx]);
List2.AddOnject('Str2_2', List1.Objects[Idx]);
List2.AddOnject('Str2_3', List1.Objects[Idx]);

Теперь у вас в List1 и три раза в List2 лежит один и тот же объект. Это не четыре разных объекта. Это - один объект


Только что с ними будет, тогда он сделает:
Код: pascal
1.
2.
List1.Objects[Index].Free;
List1.Objects[Index] := nil;

?
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028311
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp

Только что с ними будет, тогда он сделает:
Код: pascal
1.
2.
List1.Objects[Index].Free;
List1.Objects[Index] := nil;

?

С ними будет всё нормально. Указатели указываю на место. Если в том месте ЖИВОГО объекта уже нет, указатель не виноват.
Простой пример - ссылка на веб странице. Ссылка есть, а вот есть ли страница куда она ссылается - не факт.
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028382
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Вас никто не заставляет создавать лишние объекты. Еще раз
Код: pascal
1.
2.
3.
4.
Idx := List1.AddObject('Str', TMyObject.Create);
List2.AddOnject('Str2_1', List1.Objects[Idx]);
List2.AddOnject('Str2_2', List1.Objects[Idx]);
List2.AddOnject('Str2_3', List1.Objects[Idx]);

Теперь у вас в List1 и три раза в List2 лежит один и тот же объект. Это не четыре разных объекта. Это - один объект

вы и заставляете делать лишние объекты своим TMyObject.Create
нет никакого Idx := List1.AddObject('Str', TMyObject.Create);
есть Idx := List1.AddObject('Str', nil);
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028384
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr

С ними будет всё нормально. Указатели указываю на место. Если в том месте ЖИВОГО объекта уже нет, указатель не виноват.
Простой пример - ссылка на веб странице. Ссылка есть, а вот есть ли страница куда она ссылается - не факт.

ну если для вас это нормально такое на веб странице, то для меня нет ))
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028455
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
С ними будет всё нормально. Указатели указываю на место. Если в том месте ЖИВОГО объекта уже нет, указатель не виноват. Простой пример - ссылка на веб странице. Ссылка есть, а вот есть ли страница куда она ссылается - не факт.

Ну а ТС хочет что-то вроде:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
 PObj: PPointer;
begin
  New(PObj);
  Idx := List1.AddObject('Str', PObj);
  List2.AddOnject('Str2_1', PObj);
  List2.AddOnject('Str2_2', PObj);
  List2.AddOnject('Str2_3', PObj);
  PObj^ := TMyObject.Create;


Тогда если сделать
Код: pascal
1.
PPointer(List1.Objects[Index])^ := nil;

оно, внезапно, станет nil во всех списках.

Но всё равно остаётся проблема: кто будет освобождать PObj?..
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028594
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp

Но всё равно остаётся проблема: кто будет освобождать PObj?..

нихто, потому что не создается он отдельно )

идея не проверенная и отличается от фактической реализации, но вижу так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
  PMyObject = ^TRMyObject;
  TMyObject = class...

  TList1 = class(TStringList)
  private
    FList: PStringItemList;
    function GetPointer(Index: Integer): PMyObject;
  public
    property Pointers[Index: Integer]: PMyObject read GetPointer;
...
  TList2 = class(TStringList)
  private
    function GetObject(Index: Integer): PMyObject ;
    procedure PutObject(Index: Integer; AObject: PMyObject );
  public
    property Objects[Index: Integer]: PMyObject read GetObject write PutObject;
...

function TList1.GetPointer(Index: Integer): PMyObject;
begin
Result := @(FList^[Index].FObject);
end;
....
List2.Objects[j] := List1.Pointers[i];
....
List2.Objects[j]^.Free;
List2.Objects[j]^ := nil;



компилятор вродь не ругается, но доедет ли до Киева!?
...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028599
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolverin
Код: pascal
1.
TList1 = class(TStringList)


...
Рейтинг: 0 / 0
Указать на TStringList.Object[] как?
    #40028602
Фотография wolverin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,
)))
...
Рейтинг: 0 / 0
64 сообщений из 64, показаны все 3 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Указать на TStringList.Object[] как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]