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

Вниз

Как в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.011 c
14-53224
ZeCChiN
2003-01-30 10:54
2003.02.17
Есть ли у Интернета будущее?


14-53256
Shc
2003-01-30 20:05
2003.02.17
RTF


3-52725
Bazzilio
2003-01-30 07:21
2003.02.17
Проблема с DBGrid


1-52919
Bee
2003-02-08 20:52
2003.02.17
можно ли прочесть номер болванки CD-R?


1-53108
Бук
2003-02-07 08:02
2003.02.17
Версия проекта





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский