Size: a a a

2020 February 27

DB

Dmitry Belkevich in Delphi & Lazarus
RusEm
Просто это одно свойство и просто строка. Из за этого городиить целый класс
да ладно, там класса - пара строк скорее всего )
источник

R

RusEm in Delphi & Lazarus
Костылик, но вроде бы проблемы решает) если не найду другого способа, то наверно так и поступлю
источник

R

RusEm in Delphi & Lazarus
Dmitry Belkevich
да ладно, там класса - пара строк скорее всего )
Ага. И ещё пара десятков на работу с ним. Хотелось бы максимально попроще
источник

DB

Dmitry Belkevich in Delphi & Lazarus
TList<TSomeClass> - уже готовый класс. бери и юзай
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Хорошая практика - не хранить данные в визуальных компонентах. А использовать списки отдельные. А с ними уже любой виртуальный список можно использовать. Если эти списки конечно не огромные.
источник

AS

Alexey Shumkin in Delphi & Lazarus
RusEm
добрый день гуру) столкнулся в очередной раз снеполноценностью этого мира. а точнее с ttreeview. Вопрос в следующем - требутся у каждой ноды хранить дополнительное поле. И тут есть как я понимаю два варианта: 1) Хранить указатель на структуру в node.data.  Из минусов вижу это следить за выделением памяти под структуру и самому ее очищать. Так же неудобен способ доступа к данным через типизированный указатель. 2) Писать свой класс как расширение базового класса, со своим новым свойством. Из минусов тут вижу это невоможность чтения нового свойства без приведения ноды к своему типа( что то вроде Node := TreeView1.Items.AddChild(Node, '...');
TMyTreeNode(Node).Toto := ...; ) кто что посоветует для решения поставленной задачи с максимальным удобством для обращения к новому свойству?
1. TreeView - это ОТОБРАЖЕНИЕ,а не модель ))
не надо делатье его контейнером для данных
данные - отдельно , их отображение - отдельно...
тогда проблема "владения данными" отпадает )

2.,...приведения ноды к своему типа( что то вроде Node := TreeView1.Items.AddChild(Node, '...');
TMyTreeNode(Node).Toto := ...; )

так не делай приведение
сделай метод этого нового класса, который будет это делать, и используй его "снаружи"
ибо TreeView1.Items.AddChild - это нарушение закона Деметры )
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Dmitry Belkevich
TList<TSomeClass> - уже готовый класс. бери и юзай
Тогда уж TObjectList<TSomeClass>
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Геннадий Малинин
Тогда уж TObjectList<TSomeClass>
а это уже по надобности
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Dmitry Belkevich
а это уже по надобности
Ну судя по TSomeClass - это класс)
Но да, иногда специально не нужно освобождать объекты.
источник

R

RusEm in Delphi & Lazarus
Alexey Shumkin
1. TreeView - это ОТОБРАЖЕНИЕ,а не модель ))
не надо делатье его контейнером для данных
данные - отдельно , их отображение - отдельно...
тогда проблема "владения данными" отпадает )

2.,...приведения ноды к своему типа( что то вроде Node := TreeView1.Items.AddChild(Node, '...');
TMyTreeNode(Node).Toto := ...; )

так не делай приведение
сделай метод этого нового класса, который будет это делать, и используй его "снаружи"
ибо TreeView1.Items.AddChild - это нарушение закона Деметры )
даже если сделать метод у нового класса, разве он будет доступен у нодов дерева?
источник

DB

Dmitry Belkevich in Delphi & Lazarus
>Ну судя по TSomeClass - это класс)
ну ок, пусть будет TSomeRecord :)
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Dmitry Belkevich
>Ну судя по TSomeClass - это класс)
ну ок, пусть будет TSomeRecord :)
😄
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
RusEm
даже если сделать метод у нового класса, разве он будет доступен у нодов дерева?
Можешь helper использовать
источник

R

RusEm in Delphi & Lazarus
и вот уже не пара строк) я про это и говорю)
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
TTreeViewItemHelper = helper for TTreeViewItem
 property Toto;
end;
источник

DB

Dmitry Belkevich in Delphi & Lazarus
RusEm
даже если сделать метод у нового класса, разве он будет доступен у нодов дерева?
так и не нужно что бы он был доступен
источник

DB

Dmitry Belkevich in Delphi & Lazarus
зачем он в отображении? а в коде будет ссылка через id
источник

R

RusEm in Delphi & Lazarus
Dmitry Belkevich
так и не нужно что бы он был доступен
а как тогда получить мое свойство основываясь на выбранной ноде?
источник

DB

Dmitry Belkevich in Delphi & Lazarus
RusEm
а как тогда получить мое свойство основываясь на выбранной ноде?
по id шнику же
источник

R

RusEm in Delphi & Lazarus
я видимо плохо понимаю механизм
источник