Текущий архив: 2003.02.17;
Скачать: CL | DM;
ВнизКак в 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;
Скачать: CL | DM;
Память: 0.59 MB
Время: 0.013 c