Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Вниз

Как в TreeView очистить все ветки?   Найти похожие ветки 

 
neXt2   (2003-02-06 14:58) [40]

2 Digitman ©
Спасибо что помогаешь.
я использую DataModule. А Application.ProcessMessages я не использую...


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


> Skier © (06.02.03 14:57)
> >neXt2 (06.02.03 14:43)
> А ты подумай как ты освобождать данные для узла будешь.
> Все же рухнет !

Я же и сначала и задавал такой вопрос -смотри САБЖ. Говорят Items.Clear должен работать.


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


> jack128 © (06.02.03 14:43)
> я в таких слючаях комментировал участки кода и смотрел
> глюк проявился или нет. Таким образом локализововал ошибку...
>


ну и плохо ! схему/последовательность событий в приложении, даже не использующем компоненты, и встр.дебагер как наипервейший инструмент для отладки Делфи-приложений нужно знать как "Отче наш"... А поиск "глюков" вслепую никогда не избавит от "глюков"


 
Skier   (2003-02-06 15:03) [43]

>neXt2
Зависит от того используешь ли ты потом данные для узла, если да то обрушения не избежать.


 
jack128   (2003-02-06 15:04) [44]

В данном случае дебагер видимо непомог...


 
Digitman   (2003-02-06 15:05) [45]


> neXt2


долго еще будем играться в бирюльки ? приводи код, вызывающий ExpendLevel()... и более ранний, т.е. верхнеуровневую процедуру, с которой начинается вся эта "химия" по построению дерева


 
neXt2   (2003-02-06 15:06) [46]


> 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;


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

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


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

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

AddChild(ChildNode,""); ?

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


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


> Digitman © (06.02.03 15:05


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


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


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


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


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


> neXt2


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




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

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

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





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

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


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


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


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


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

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


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

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

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

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

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

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




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

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


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


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

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


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

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




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

пройтись циклом и везеде для каждого 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. вопрос явно не тянет на столько ответов)))))


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


> Skier


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

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


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

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


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


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


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


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

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


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

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

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


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

У меня при ввыборе узла, должен открыватся НД тогда, когда это конец ветки(т.е. тот кто не имеет детей).

Так что мне делать?

Что мне при onDestroy DataModule закрывать IBDataset и чистить дерево(Node.Data := nil)?


 
Digitman   (2003-02-06 15:46) [67]


> Oleon


Нет здесь никакой утечки памяти. Не выдумывай.

> neXt2 (06.02.03 15:40)
> У меня при ввыборе узла, должен открыватся НД тогда, когда
> это конец ветки(т.е. тот кто не имеет детей).


опять же - неверно !
откуда ты знаешь, конец это ветки или не конец ?
ты для чего НД в запросе формируешь ? как раз чтобы отразить изменения, произошедшие в базе с записями, ассоциируемыми тобой с данным узлом и возможно имеющимися у него на дан.момент дочерними узлами, после последнего обновления дерева


 
neXt2   (2003-02-06 15:50) [68]

2 Digitman ©
У меня есть поле child_cnt, если =0 конец, >0 - нет
В neXt2 (06.02.03 14:27) есть присутсвие это елемента.


 
Digitman   (2003-02-06 16:17) [69]

а если эта запись удалена уже ?


 
neXt2   (2003-02-06 16:25) [70]

Ее можно удалить только из этого дерева, т.е. конечно может програмер залезть и в *.gdb поправить, но не юзер. И еще у меня тригеры стоят, сами считают сколько детей.


 
Digitman   (2003-02-06 16:33) [71]

это чего такое получается ? ты пользуешь IB SS для одного-единственнгого клиента ? не жирно будет ?


 
neXt2   (2003-02-06 16:40) [72]

Нет, не для одного, просто в этой *.gdb не только эти данные(они как вспомагательные идут), а вообще это БД для Отдела труда и з/п
Там и штатное, и кадры, и норма по операциям(эта задача).


 
neXt2   (2003-02-06 16:46) [73]

Убрал DataModule вроде работает...


 
neXt2   (2003-02-06 16:54) [74]

Да! работает!!!


 
gsu   (2003-02-06 16:55) [75]

наконец то, ...
Digitman © - самый терпеливый мастер, гип-гип, ура (-:|~


 
Digitman   (2003-02-06 16:55) [76]


> Убрал DataModule вроде работает...


я ж тебе сразу сказал - смотри за порядком событий, связанных с разрушением форм/модулей данных при завершении приложения !


> Нет, не для одного


вот и представь себе - два юзера юзают одновременно твое дерево ..
один добавил узел, другой, обновив свое, увидел этот узел и удалил его, а заодно и родит.узел

теперь первый юзер сподобился щелкнуть на уже удаленном в этот момент узле..


 
Соловьев   (2003-02-06 17:03) [77]


> теперь первый юзер сподобился щелкнуть на уже удаленном
> в этот момент узле..

Ты про try..except..end? Сделаю.

>
> Digitman © (06.02.03 16:55)
>
> > Убрал DataModule вроде работает...
>
>
> я ж тебе сразу сказал - смотри за порядком событий, связанных
> с разрушением форм/модулей данных при завершении

Я так понимаю, node.Data ссылается на данные в DataModule. Она разрушается первой. А как сделать чтобы DataModule разрушалось последней? Наверное я написал бред...


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

Упс ! Уже реинкарнация приключилась) <neXt2> to <Соловьев>)


> Ты про try..except..end? Сделаю.


Я ему про фому, он - про ерему)

try .. finally/except - это безусловно, но упомянул я это по другому поводу ... ты хоть прочитай, о чем я там)

щелчек на узле у тебя зачем отрабатывается ? чтобы детей узла обновить визуально ? а если самого узла (в таблице !) уже нет - о каких его детях речь может идти ?


> node.Data ссылается на данные в DataModule


Это каким же образом ? ты ж в Data что пишешь ? просто - число некое, не более того ... число это - просто некое значение некоего перв.ключа некоей записи


 
Соловьев   (2003-02-06 17:22) [79]

:)
>
> Digitman © (06.02.03 17:15)
> Упс ! Уже реинкарнация приключилась) <neXt2> to <Соловьев>)



 
Digitman   (2003-02-06 17:38) [80]


> как сделать чтобы DataModule разрушалось последней


смотря как ты создаешь этот DataModule
от этого зависит и контроль за порядком (либо принудительное осуществление) его разрушения



Страницы: 1 2 3 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.012 c
1-52899
adolf_99
2003-02-07 15:04
2003.02.17
Помогите


3-52719
Sherbacov
2003-01-29 16:22
2003.02.17
Сетевой paradox


8-53124
Obrazer
2002-10-15 13:51
2003.02.17
звук в реальном времени


3-52788
S
2003-01-31 14:31
2003.02.17
Тупой вопрос!


4-53340
BBCHa
2002-12-29 03:25
2003.02.17
Handle активного приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский