powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / И снова о TreeView -))
14 сообщений из 14, страница 1 из 1
И снова о TreeView -))
    #32184672
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, я наверно уже туплю под вечер, но как мне сохранить в TTreeNode, занчение поля (ключа)? Не создавать же свой класс с этим свойством..
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184676
Hammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TreeView.Items.BeginUpdate;
try
with TreeView.Items.AddObject( nil, FieldByName( 'FaceName' ).AsString, Pointer( FieldByName( 'FaceID' ).AsInteger ) ) do
begin
ImageIndex := FieldByName( 'ImageIndex' ).Value;
SelectedIndex := FieldByName( 'SelectedIndex' ).Value;
end;
finally
TreeView.Items.EndUpdate;
end;

TreeView.Items.BeginUpdate;
try
with TreeView.Items.AddChildObject( GroupsNode, ClientDataSet.FieldByName( 'FaceName' ).AsString, Pointer( ClientDataSet.FieldByName( 'FaceID' ).AsInteger ) ) do
begin
ImageIndex := ClientDataSet.FieldByName( 'ImageIndex' ).AsInteger;
SelectedIndex := ClientDataSet.FieldByName( 'SelectedIndex' ).AsInteger;
end;
finally
TreeView.Items.EndUpdate;
end;
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184677
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак, IMHO. А какие проблеммы с классом?
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184685
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Hammer
Ну твой вариант конечно работает, но проблема в том, что дерево с картинками, т.е эти свойства в классе заняты..

2pkarklin
Да в принципе ни каких, просто хотелся обойтись без этого.. В VB есть просто свойства для хранения юзерских данных, вот я и подумал что в Delphi это тоже есть, но где то глубоко зарыто -)) (что делать, чайник я в Delphi)
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184691
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ни че у Hammer не занято, он пишет значение идентификатора в свойство Data у TTreeNode, приводя integer к pointer. Вот тока при чтении тоже надо будет обратно приводить. Как я сам до этого не допер. Век живи век учись. :-)Может по тому, что тока 1 идентификатор в ветке никогда не хранил, всегда класс с несколькими полями нужен был.
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184692
Hammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык убери хрень по поводу картинок и усе
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184704
Фотография Ден
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Все понял, туплю -))
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184723
Hammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to pkarklin
А кто мешает засунуть в свойство Data весь класс целиком?
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184733
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Hammer

А кто мешает засунуть в свойство Data весь класс целиком?

Так я туда ссылку на экземляр класса и засовывал всегда.
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184749
Hammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to pkarklin
Стоп, стоп, стоп.
Я давно мучаюсь вопросом типа:
есть DataSet, у него есть FieldValues[..]
А как их усе засунуть в Data TreeView?
Что нибудь типа:
type
TMyClass = class( TObject );
public
construcrir Create;
destrustor Destroy;
property Value: Variant read FValue write SetValue;
end;

procedure TForm.BtnClick( .. )
var
MyClass: TMyClass;
FieldsNames : TStringList;
FieldsList: String;
i: Integer;
begin
FieldsNames := TStringList.Create;
DataSet.GetFieldNames(FieldsNames);
FieldsList := FieldsNames.CommaText;
FieldsNames.Free;
for i := 0 to Length(FieldsList) do if FieldsList = ',' then FieldsList := ';';
DataSet.First;
while not DataSet.Eof do
begin
MyClass := TMyClass.Create;
MyClass.Value := DataSet.FieldValues[FieldsList];
TreeView.Items.AddObject( nil, DataSet.FieldByName( 'FaceName' ).AsString, MyClass) ;
MyClass.Free;
DataSet.Next;
end;
end;

Так выйдет?
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32184884
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Hammer

Код: plaintext
MyClass.Free;


Вот это вот убери. А то что получается. Ты создал экземпляр класса, ссылку на него сохранил в свойстве TTreeNode.Data, а потом уничтожил его. Т.о TTreeNode.Data после исполнения твоего кода указывает в никуда и тебя ждет AV. И самое главное, не забывай уничтожать все экзмепляры, которые ты насоздавал когда они уже не нужны, например, при закрытии формы. Само TTreeView этого не делает. Ну примерно так:

Код: plaintext
1.
2.
...
for Counter :=  0  to TreeView.Items.Count -  1  do
  TMyClass(TreeView.Items[Counter].Data).Free;
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32185268
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрытие формы это при вызове Close?
В этом случае происходит уничтожение формы и всех контролов, которые находятся на ней.
Так при уничтожении контрола TreeView он уничтожает все свои ноды и если надо освобождать память из TTreeNode.Data, то это можно делать в обработчике TreeViewDeletion(Sender: TObject; Node: TTreeNode);

Код: plaintext
TMyClass(Node.Data).Free;
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32185296
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SmaLL

Можно и так.
...
Рейтинг: 0 / 0
И снова о TreeView -))
    #32185908
Фотография SmaLL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто таким способом можно унифицировать удаление нода при уничтожении TreeView и при работе с TreeView - удалении, добавлении, изменении Нодов
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / И снова о TreeView -))
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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