![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в TreeView очистить все ветки? [D5, Win95/98]
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;