powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Указать на TStringList.Object[] как?
14 сообщений из 64, страница 3 из 3
Указать на 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
14 сообщений из 64, страница 3 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Указать на TStringList.Object[] как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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