Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в TreeView очистить все ветки? [D5, Win95/98]


Страницы:   1 2 3 4 5

neXt2 ©   (2003-02-06 10:01:00) 

Мастера, помогите, наверное вопрос уже всех задолбал, но не сердитесь...
Т.е. не Items.Clear, а Node.Delete? Я очень часто перестраиваю дерево Items.Clear не очищяет память, а Node.Delete - делает, но как удалить все корни, я про них не знаю...


Oleon   (2003-02-06 15:37:00) [21]

тут проблемма, не в том как заносить, а как потом память отчистить....!!!!!!!

Skier, Digitmen вы не тем занялись...


Skier   (2003-02-06 15:35:00) [22]

>neXt2
Если данные для узла - просто целое число (как у тебя), то
всё правильно- выделение памяти не нужно, хватит и кастинга.
Не туда зарулил...Sorry !


Digitman   (2003-02-06 15:35:00) [23]


> только те кто не имеет детей.


непонятно.
узел, не имеющий "детей", не имеет первич.ключа ?
а если юзер сделает его Selected ? ты ж тут же начинаешь читать его data (там - 0) и тут же запрос выполняешь для parentkey = 0. В результате - хрень несусветная


Skier   (2003-02-06 15:32:00) [24]

>Digitman
Если целое, то достаточно. Согласен.


Digitman   (2003-02-06 15:28:00) [25]


> Skier


да целое у него оно)
использует как перв.ключ записи в НД

вполне достаточно Integer(Node.Data)


Oleon   (2003-02-06 15:27:00) [26]

пройтись циклом и везеде для каждого NODe сделать Free, а потом Nil...

for i := Node.count downto - 1 downto 0 do
Begin
Node.Item[i].Free;
Node.Item[i].Data := nil;
End;

разве так нельзя написать? или что-то типа того,

P.S. вопрос явно не тянет на столько ответов)))))


Skier   (2003-02-06 15:24:00) [27]

>neXt2 (06.02.03 15:21)
Если строка то :
if Node.Data <> nil then
ASomeStrVar := PString(Node.Data)^;
Если целое то :
ASomeIntVar := PInteger(Node.Data)^;



neXt2   (2003-02-06 15:22:00) [28]


> Digitman © (06.02.03 15:20)
>
> > я уже сделал ChildNode.HasChildren := True
>
>
> А это здесь причем ? Насколько я понял, каждый добавляемый
> узел у тебя в Data обязан содержать уник.идентификатор

только те кто не имеет детей.


Skier   (2003-02-06 15:22:00) [29]

>neXt2
Поправка :
AStr^ := FieldByName("id").AsString;
Если используешь AsInteger, то объяви PInteger = ^Integer и дальше по анологии...


Oleon   (2003-02-06 15:21:00) [30]

я не понял, что-то очень много всего понаписали...

у него в Data записано что-то постоянно, он удаляет Node а ссылки остаются...

вот, наверное, из-за этого и весь гемморой...

почему вы не воспользовались советом от Song?

>>Song © (06.02.03 12:23)
>>Ну так тогда в цикле



neXt2   (2003-02-06 15:21:00) [31]

2 Skier © (06.02.03 15:18)
а как потом оттуда считывать?


Digitman   (2003-02-06 15:20:00) [32]


> я уже сделал ChildNode.HasChildren := True


А это здесь причем ? Насколько я понял, каждый добавляемый узел у тебя в Data обязан содержать уник.идентификатор.
В случае с AddChild() ты всегда получишь Data = 0 (nil)


neXt2   (2003-02-06 15:19:00) [33]

Я уже все привел, этот код выше.


Skier   (2003-02-06 15:18:00) [34]

>neXt2
Ну...короче заносить строку нужно примерно так :

type
PString = ^String;
var
AStr : PString;
begin
//...............
New(AStr);
AStr^ := Pointer(FieldByName("id").AsInteger);
ChildNode:=AddChildObject(Node , FieldByName("name").AsString, AStr);
//...............




Digitman   (2003-02-06 15:17:00) [35]


> neXt2


Охх)... ну давай сюда и ReBildTree() , до кучи)



neXt2   (2003-02-06 15:16:00) [36]


> Digitman © (06.02.03 15:12)
> кр.того, непонятно, почему
>
> AddChild(ChildNode,""); ?


я уже сделал ChildNode.HasChildren := True


neXt2   (2003-02-06 15:14:00) [37]


> Digitman © (06.02.03 15:05


Отсалось только:
procedure TfMain.DBGridCellClick(Column: TColumn);
begin
ReBildTree;
end;


Digitman   (2003-02-06 15:12:00) [38]

кр.того, непонятно, почему

AddChild(ChildNode,""); ?

соданный таким образом узел будет иметь Data = nil


Skier   (2003-02-06 15:09:00) [39]

>neXt2
Горе тебе ! :)


neXt2   (2003-02-06 15:06:00) [40]


> Skier © (06.02.03 15:03)
> >neXt2
> Зависит от того используешь ли ты потом данные для узла,
> если да то обрушения не избежать.

Да использую:
procedure TfMain.treeСhange(Sender: TObject; Node: TTreeNode);
var ID : integer;
begin
with (Sender as TTreeView) do
if Selected <> nil Then
begin
with dm.qRate do
begin
Close;
ParamByName("ID").AsInteger := Integer(Selected.Data);
Open;
end;
end;//if and with
end;


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо