Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизУдаление ветки с дочерними элементами TTreeView Найти похожие ветки
← →
TechnoDreamer © (2004-11-22 02:22) [0]Надо функция удаляющая TTreeNode со всеми дочерними элементами. Причем она должна быть не рекурсивной и удалять каждый элемент по одному (потому что вместе с элементом надо удалять и связанные с ним данные). Поможет кто-нибуть с этим?
← →
jack128 © (2004-11-22 02:30) [1]TechnoDreamer © (22.11.04 2:22)
Причем она должна быть не рекурсивной
Чем вызвано это ограничение ? В принципе рекурсию можно развернуть, но в плане кодирования это на порядок сложнее.
← →
TechnoDreamer © (2004-11-22 02:36) [2]Знаю, что сложнее, потому и спрашиваю, рекурсивная есть. Работает с ошибками (идет работа с базой данных через ADO) и медленно. Т.е. на небольших ветках всё нормально, а с большими пробела, и именно с базой, при чём ошибка именно ADO.
← →
jack128 © (2004-11-22 03:52) [3]Вообще лудше почитать теорию на этот счет, а вот вот что надумал.
Алгоритм беру из головы, ни разу на практике не применял, но идею, думаю, подскажет..
label lb1, lb2;
begin
//Заводишь стек для всех переменных, используемых в процедуре.
lb1:
//выполняешь код, до рекурсивного вызова.
// вместо рекурсивного вызова делаешь:
// кладешь все переменные в стек
// и подменяешь входные параметры на новые
// goto lb1;
lb2:
//...
//вместо завершения процедуры
if not стек_переменных_пустой then
begin
//извлекаешь переменные из стека
goto lb2;
end;
end;
Но лудше по подробнее задачу опиши.. Может удастся оптимизировать так, что и рекурсия прокатит.
зы: а с чего ты вообще решил, что проблема именно в рекурсии???
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.029 c