Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
ВнизПроблема при работе с TreeView Найти похожие ветки
← →
Profi © (2005-08-28 18:16) [0]Может я некорректо создал пост, тогда извините. Просто хочу обьяснить суть проблемы.\
Код:Repeat
inc(i);
Sp:=TStringList.Create;
if TreeView.Items[i].data<>nil then
Sp:=TreeView.items[i].data
else begin
if TreeView.Items[i].getFirstChild=nil then begin
If TreeView.Items[i].Parent.getFirstChild=TreeView.Items[i] then Begin
TreeView.Items[i].Delete;
i:=i-2;
end else begin
TreeView.Items[i].Delete;
i:=i-1;
end;
end;
Continue;
end;
est:=false;
if Sp.Count<0 then continue;
For j:=0 to Sp.Count-1 do
if pos(FileName,Sp.Strings[j])>0 then begin
est:=true;
Break;
end;
if not est then begin
if TreeView.Items[i].getFirstChild=nil then begin
If TreeView.Items[i].Parent.getFirstChild=TreeView.Items[i] then Begin
TreeView.Items[i].Delete;
i:=i-2;
end else begin
TreeView.Items[i].Delete;
i:=i-1;
end;
end else
TreeView.Items[i].Data:=nil;
end;
Sp.Free;
Until i>=TreeView.Items.Count-1;
Код нужен для того, что бы удалять все Item"ы, в Data которых нет строки FileName. При этом надо сохранить древовидность. Когда находится Item, в котором есть FileName, он не удаляется. При удалении следующего Item"а цикл возвращается к предыдущему (из-за вложенности) и тогда-то и возникает AV при попыткеFor i:=0 to SP.Count-1
Целый день бьюсь, может, просто глупую ошибку не вижу
← →
jack128 © (2005-08-28 20:40) [1]Profi © (28.08.05 18:16)
При этом надо сохранить древовидность
Не понятна эта фраза, но задача
Profi © (28.08.05 18:16)
Код нужен для того, что бы удалять все Item"ы, в Data которых нет строки FileName. решается так:var
i, j: Integer;
f: boolean;
begin
i := TV.Items.Count - 1;
while i >= 0 do
begin
sp := TV.Items[i].Data;
f := False;
for j := 0 to sp.Count - 1 do
begin
f := pos(FileName, sp.Strings[j]) > 0;
if f then Break;
end;
if not f then
TV.Items.Delete(TV.Items[i]);
dec(i);
if i >= TV.Items.Count then
i := TV.Items.Count - 1;
end;
end;
← →
Profi © (2005-08-28 21:06) [2]jack128 © (28.08.05 20:40) [1]
Предположим, что у нас есть:
-1
--2
--3
---4
В 4 есть FileName, а в 3 и 1 нет. Ваш код сразу удалит 1, а этого делать нельзя. Поэтому При этом надо сохранить древовидность.
← →
jack128 © (2005-08-28 21:50) [3]а-а-а..
Правда не очень понятно, как с этим связана древовидность, ну да ладно..
Что нить типа этого...
function DeleteIfNotExistsFilename(ANode: TTreeNode; const AFilename: string): boolean;
var
i, j: Integer;
sl: TStrings;
f: boolean;
begin
Result := False;
for i := ANode.Count - 1 downto 0 do
DeleteIfNotExistsFilename(ANode.Item[i], AFileName);
if ANode.Count <= 0 then
begin
sl := ANode.Data;
f := False;
for i := 0 to sl.Count - 1 do
begin
f := pos(AFilename, sl[i]);
if f then Break;
end;
if not f then
begin
ANode.Delete;
Result := True;
end;
end;
end;
var
i: Integer;
Run: TTreeNode;
begin
Run := TV.Items.GetFirstNode;
while Assigned(Run) do
begin
if DeleteIfNotExistsFilename(Run, FileName) then
Run := TV.Items.GetFirstNode
else
Run := Run.getNextSibling;
end;
end;
ps Не тестил..
← →
jack128 © (2005-08-28 22:58) [4]оп-с.. глюк.
var
i: Integer;
Run, NextRun: TTreeNode;
begin
SaveRun := nil;
Run := TV.Items.GetFirstNode;
while Assigned(Run) do
begin
NextRun := Run.getNextSibling;
DeleteIfNotExistsFilename(Run, FileName);
Run := NextRun;
end;
end;
← →
jack128 © (2005-08-28 23:00) [5]jack128 © (28.08.05 22:58) [4]
SaveRun := nil; - это лишнее естественнно.var
i: Integer;
Run, NextRun: TTreeNode;
begin
Run := TV.Items.GetFirstNode;
while Assigned(Run) do
begin
NextRun := Run.getNextSibling;
DeleteIfNotExistsFilename(Run, FileName);
Run := NextRun;
end;
end;
← →
Profi © (2005-08-29 00:49) [6]Спасибо! Но уже сделал сам. Пошел от обратного. Сначала проверял самые глубокие Item"ы, потом повыше и т.д. Просто еще замес, что это функция в движке базы данных, так что там еше и другие запарки есть. Но все равно спасибо.
← →
jack128 © (2005-08-29 00:53) [7]Profi © (29.08.05 0:49) [6]
Сначала проверял самые глубокие Item"ы, потом повыше и т.д.
ну вобщем то так и надо, я как раз это и делаю.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c