![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ООП можно ли это сделать? [D6]
Grrey © (2004-10-12 21:12:00)В TTreeView нужно добавить свойство ID:integer для каждого нода.
Можно ли это сделать не переписывая vcl исходников?
Единственный вариант - это обявить массив рядом, связать свойство Data с нужным нодом и при добавлении, удалении, изменении добавлять, удалять и изменять элементы масивчика. Но это же повторная работа. Этот код уже прописан в TTreeNodes. Вообще есть способ как-нибудь объявить потомки TTreeNode, TTreeNodes и TTreeView в соответствии с требованиями?
Mishenka (2004-10-22 22:05:00) [1]А можно ли тоже самое сделать с TMenuItem и MainMenu ???
Pentium133 (2004-10-22 10:38:00) [2]
type
MyNodeClass = class(TTreeNode)
public
id: integer;
name: string;
end;
procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
var NodeClass: TTreeNodeClass);
begin
NodeClass:= MyNodeClass;
end;
обращение:
MyNodeClass(TreeView1.Items[1]).id:= 24;
Mishenka (2004-10-22 09:24:00) [3]
> Гаврила © (12.10.04 21:16) [1]
Насколько я понял речь идёт о событии OnCreateNodeClass. Можно ли поподробнее, что писать в этом событии и как потом новый класс добавить???
Гаврила (2004-10-14 14:03:00) [4]ДЕМАГОГИЯ, демагогии, ж. (греч. demagogia) (книжн.). Потворство инстинктам и страстям малосознательных масс для достижения своих целей.
> [21] Суслик ©
ГДЕ ??? :-)
Суслик (2004-10-14 11:22:00) [5]у-у-у-у демагоги :(
Amoeba (2004-10-14 11:13:00) [6]
> Гаврила © (13.10.04 17:48) [13]
Использование Data мной предлагалось исключительно для случая одного поля, поскольку автор вопроса сразу не указал обратного (оставил догадываться объ этом телепатам). Классический пример того, что бывает, когда вопрошающий не выкладывает достаточного объема информации, чтобы можно было ответить однозначно.
and (2004-10-13 20:30:00) [7]dxDBTreeList из QuantumGrid - какие хотите поля. с какими хотите свойствами. намного удобнее TreeView, да и красивше смотрится.
Гаврила (2004-10-13 19:07:00) [8]
> [17] Defunct
Я про тот случай, когда за время жизни объектов отвечает дерево. Структура данных может быть привязана к визуальному представлению, а может быть не привязана. Если она не привязана, нам придется то же "дерево" (невизуальное) дублировать в данных, а так оно у нас одно.
В общем для разных случаев можно сделать по разному
Defunct (2004-10-13 19:04:00) [9]> ну так Free то вызвать надо, а в случае наследования все вызовется автоматом
Зачем вызывать Free?
Правильно спроектированная структура данных должна быть независимой от визуальных компонент. А вдруг я захочу те же элементы отобразить в ListView, зачем для этого при разрушении TreeView вызывать Free созданных объектов и создавать объекты заново? Можно просто отделить структуру данных от визуальных компонент и заботиться о разрушении структуры данных в самой структуре или при выходе из программы.
Гаврила (2004-10-13 18:47:00) [10]
> [14] Defunct ©
ну так Free то вызвать надо, а в случае наследования все вызовется автоматом
Defunct (2004-10-13 18:47:00) [11][14]
Оговорился, но думаю вы поняли, что я имел в виду.
> На месте Container - любой класс ...
На месте Container - экземпляр любого класса ...
Defunct (2004-10-13 18:45:00) [12]> Гаврила © (13.10.04 17:48) [13]
Да ну?
TreeView.Items.AddObject(Nil, Container.Name, Container)
На месте Container - любой класс, с любой структурой. И освобождается просто вызовом Free.
Гаврила (2004-10-13 17:48:00) [13]
> [8] Amoeba ©
Минусом использования свойства Data в случае необходимости хранения нескольких полей является необходимость следить за выделениями - освобождениям памяти.
А вот если например текст или иконка узла зависят от содержания дополнительных данных, то однозначно наследование, это просто удобнее
Grrey (2004-10-13 17:43:00) [14]Спасибо что воспринял именно так.
Постепенно начинаю убеждаться в том, что ты прав. Начинаю отвечать на вопросы.
Pentium133 (2004-10-13 17:38:00) [15]
> Вот из-за таких подсказок я в этот форум обращаюсь
> крайне редко.
:)))
Здесь приятнее отвечать чем спрашивать.
Grrey (2004-10-13 17:27:00) [16]Amoeba © (13.10.04 16:53) [8]
> Pentium133 © (13.10.04 16:46) [7]
Это мне хорошо известно. Но в вопросе не говорится, что Св-во дата уже задействовано.//
Вот из-за таких подсказок я в этот форум обращаюсь крайне редко.
Да ответ правильный и будет работать, но я действительно должен добавить не только ID. А данный пример привел только для упрощения примера.
Но все равно спасибо. В основном, что не послали.
Ega23 (2004-10-13 16:56:00) [17]А его и не надо было отменять по причине его изначального отсутствия у TTreeNode.
Смотри-ка, действительно нет...
Ну тогда Defunct © (12.10.04 21:17) [2]
Amoeba (2004-10-13 16:53:00) [18]
> Pentium133 © (13.10.04 16:46) [7]
Это мне хорошо известно. Но в вопросе не говорится, что Св-во дата уже задействовано.
> Ega23 © (13.10.04 16:45) [6]
> Э-э-э. А у TTreeNode свойство Tag уже отменили?
А его и не надо было отменять по причине его изначального отсутствия у TTreeNode.
Pentium133 (2004-10-13 16:46:00) [19]Amoeba © (13.10.04 16:40) [5]
В данном случае возможен и такой вариант. Но если нужно добавить не одно а несколько полей да еще и методов, то однозначно [1]
Иначе зачем это событие существует? :)
Ega23 (2004-10-13 16:45:00) [20]Э-э-э. А у TTreeNode свойство Tag уже отменили?