Текущий архив: 2003.02.17;
Скачать: CL | DM;
ВнизКак в TreeView очистить все ветки? Найти похожие ветки
← →
neXt2 (2003-02-06 10:01) [0]Мастера, помогите, наверное вопрос уже всех задолбал, но не сердитесь...
Т.е. не Items.Clear, а Node.Delete? Я очень часто перестраиваю дерево Items.Clear не очищяет память, а Node.Delete - делает, но как удалить все корни, я про них не знаю...
← →
Song (2003-02-06 12:23) [1]Ну так тогда в цикле
← →
Digitman (2003-02-06 12:56) [2]
> Я очень часто перестраиваю дерево Items.Clear не очищяет
> память
Именно потому, что ты часто перестраиваешь дерево, следует пользоваться Items.Clear. В этом случае не будет непроизводительных расходов на бесконечную реаллокацию памяти из-за удаления/вставки узлов.
← →
neXt2 (2003-02-06 13:03) [3]Access violation ... выскакивает после нескольких запусков проги... Использую Items.Clear;
← →
Digitman (2003-02-06 13:09) [4]
> Access violation ... выскакивает
И что ? Тебе при этом явно говорится, что это из-за Items.Clear ?
ты хоть вникал в полный текст сообщения об AV ?
← →
neXt2 (2003-02-06 13:13) [5]AV at address 004869DE in module "Projeckt1.exe". Read address 00000004.
← →
Digitman (2003-02-06 13:14) [6]вот и проси дебагер, чтобы он показал тебе строчку, на который ты получаешь AV !
см. Search | Find Error ...
там и вводи это самый 004869DE
← →
gsu (2003-02-06 13:15) [7]критический код на базу ...
← →
neXt2 (2003-02-06 13:19) [8]TFields.FindField ...mov eax,[ebp+$04]
И что? Что с этим делать? Получается ошибка с БД. Ну и какого ...? БД я юзаю, дерево на основе БД.
← →
Skier (2003-02-06 13:20) [9]>neXt2
Код в студию !
← →
gsu (2003-02-06 13:22) [10]>> neXt2 (06.02.03 13:19)
>> Skier © (06.02.03 13:20)
Только не все 250 модулей (-:|~
← →
neXt2 (2003-02-06 13:23) [11]А что именно?
← →
Digitman (2003-02-06 13:23) [12]вот видишь !
Items.Clear здесь совершенно ни при чем)
какая-то лажа у тебя при работе с объектами БД
← →
neXt2 (2003-02-06 13:27) [13]БД IBDatabase->IBTrasaction->IBDataset.
Вот я проверяю все время в этой штуке:
TFields.FindField ...mov eax,[ebp+$04]
← →
Digitman (2003-02-06 13:30) [14]чего проверяешь-то ? Это что, твой СОБСТВЕННЫЙ код ??
TFields.FindField ???
← →
neXt2 (2003-02-06 13:30) [15]Когда я создаю детеныша с датой, то вот в дату я пишу -
Pointer(FieldByName("id").AsInteger)
← →
jack128 (2003-02-06 13:31) [16]2 neXt2
как предположение: ты результат FindField на nil проверяешь?
← →
Digitman (2003-02-06 13:32) [17]FieldByName("id").AsInteger какого объекта ???
← →
neXt2 (2003-02-06 13:32) [18]
> Digitman © (06.02.03 13:30)
> чего проверяешь-то ? Это что, твой СОБСТВЕННЫЙ код ??
> TFields.FindField ???
галочка View CPU Window.
TFields.FindField - это чуть выше...
← →
neXt2 (2003-02-06 13:34) [19]
> Digitman © (06.02.03 13:32)
> FieldByName("id").AsInteger какого объекта ???
IBDataset
← →
Digitman (2003-02-06 13:35) [20]значит, не существует либо полt "id" либо объект IBDataSet
← →
neXt2 (2003-02-06 13:38) [21]и то существует, и то.
Ошибка при не существовании была бы сразу при построении дерева, а то дерево строится, перестраивается,а при закрытии формы - глюк.
← →
gsu (2003-02-06 13:39) [22]>> Digitman © (06.02.03 13:09)
какой же вы терпеливый (-:|~
← →
Digitman (2003-02-06 13:43) [23]
> и то существует, и то.
глядя на приведенный тобой код, показанный дебагером, уверяю тебя - проблема с несуществованием одного из объектов БД !
> а то дерево строится, перестраивается
Давай еще в "угадайку с 3-х раз" поиграем, с недельку так примерно, чего у тебя там "строится, перестраивается"..
я буду угадывать твой код - мне это ооооочень нужно ! - а ты будешь радостно так говорить всякий раз "не-а, снова не угадал !"
))
← →
FLIZ (2003-02-06 14:02) [24]в натуре, давай сюда нам код а так клоунада какая-то.
насколько я работал с деревьями ТриВью - ничего там плохого
не происходит при работе с узлами, ну т.е. при ИтемсКлеар
и прочем никаких баг Дерева нету. это у тебя в коде
что-то не так и ошибка тобою создана. и компонент ТриВью
тут точно не причем. код в студию!
← →
neXt2 (2003-02-06 14:27) [25]Вот построение ветки:
procedure TfMain.ExpendLevel(Node:TTreeNode);
var ID:integer;
ChildNode:TTreeNode;
begin
if Node = nil then ID := 0
else
ID := Integer(Node.Data);
with dm.qName do
begin
Close;
ParamByName("PARENT_ID").AsInteger := ID;
Open;
First;
with tree.Items do
begin
BeginUpdate;
while not Eof do
begin
ChildNode:=AddChildObject(Node , FieldByName("name").AsString,
Pointer(FieldByName("id").AsInteger));
if FieldByName("child_cnt").AsInteger>0 then
begin
ChildNode.ImageIndex := 1;
ChildNode.SelectedIndex := 0;
AddChild(ChildNode,"");
end
else
begin
ChildNode.ImageIndex := 2;
ChildNode.SelectedIndex := 2;
end;
Next;
end; //while
EndUpdate;
end;
end;
end;
← →
neXt2 (2003-02-06 14:30) [26]Вот перестройка дерева:
procedure TfMain.ReBildTree;
begin
tree.Items.Clear;
ExpendLevel(nil);
tree.Items[0].Selected := true;
end;
← →
neXt2 (2003-02-06 14:31) [27]Раскрытие ветки:
procedure TfMain.treeExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
if Node.getFirstChild.Data = nil
then
begin
Node.DeleteChildren;
ExpendLevel(Node);
end;
end;
← →
Skier (2003-02-06 14:33) [28]ChildNode:=AddChildObject(Node , FieldByName("name").AsString,
Pointer(FieldByName("id").AsInteger)); - очень подозрительно !
← →
jack128 (2003-02-06 14:33) [29]AddChild(ChildNode,""); ?
У тя лишний узел появляется. И что будет если по нему кликнут?
Лудше сделать так ChildNode.HasChildren := True;
← →
Digitman (2003-02-06 14:34) [30]>>при закрытии формы - глюк.
и что делается при закрытии формы ?
p.s. ты вообще в курсе, что в Паскале есть конструкции try..finally, try..except ?
BeginUpdate;
// здесь - твой "глюк", к примеру, произошел
EndUpdate; // эта строчка при "глюке" выполнена не будет !
← →
neXt2 (2003-02-06 14:38) [31]
> jack128 © (06.02.03 14:33)
> AddChild(ChildNode,""); ?
> У тя лишний узел появляется. И что будет если по нему кликнут?
Если этого не показать, то не видно что дети, про
ChildNode.HasChildren := True я не знал :(
> Digitman © (06.02.03 14:34)
> >>при закрытии формы - глюк.
>
> и что делается при закрытии формы ?
>
> p.s. ты вообще в курсе, что в Паскале есть конструкции try..finally,
> try..except ?
конечно знаю, но тут я пока разбираюсь, и пока там глюка не было.
← →
neXt2 (2003-02-06 14:39) [32]
> Digitman © (06.02.03 14:34)
> >>при закрытии формы - глюк.
>
> и что делается при закрытии формы ?
ничего.
← →
neXt2 (2003-02-06 14:43) [33]
> Skier © (06.02.03 14:33)
> ChildNode:=AddChildObject(Node , FieldByName("name").AsString,
> Pointer(FieldByName("id").AsInteger)); - очень подозрительно
> !
Что именно подозрительно?
← →
jack128 (2003-02-06 14:43) [34]я не знаю сколько у тя кода в модуле, но
я в таких слючаях комментировал участки кода и смотрел
глюк проявился или нет. Таким образом локализововал ошибку...
← →
jack128 (2003-02-06 14:45) [35]2 neXt2, Digitman а вообще для таких разговоров есть чат
← →
Digitman (2003-02-06 14:48) [36]как это "ничего" ? компоненты доступа к БД лежат на форме ? перед разрушением формы они разрушаются, и если в этот момент ты там чего-то творишь со своим деревом (вероятно, вызываешь ExpendLevel() в каком-то внешнем цикле, где присутствует Application.ProcessMessages), вот эти "грабли" тебя и лупят в одну и ту же шишку))
← →
Digitman (2003-02-06 14:51) [37]как это "ничего" ? компоненты доступа к БД лежат у тебя на форме ? перед разрушением формы они разрушаются, и если в этот момент ты там чего-то творишь со своим деревом (вероятно, вызываешь ExpendLevel() в каком-то внешнем цикле, где присутствует Application.ProcessMessages), вот эти "грабли" тебя и лупят в одну и ту же шишку)) с завидной причем регулярностью)))
← →
Digitman (2003-02-06 14:54) [38]
> jack128
"А ты кто такой ?"
(с) М.С.Паниковский, "человек без паспорта"
← →
Skier (2003-02-06 14:57) [39]>neXt2 (06.02.03 14:43)
А ты подумай как ты освобождать данные для узла будешь.
Все же рухнет !
← →
neXt2 (2003-02-06 14:58) [40]2 Digitman ©
Спасибо что помогаешь.
я использую DataModule. А Application.ProcessMessages я не использую...
Страницы: 1 2 3 вся ветка
Текущий архив: 2003.02.17;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.011 c