Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
ВнизУдаление формы из динамического массива Найти похожие ветки
← →
olookin (2002-02-18 14:14) [0]Уважаемые господа, послушайте мой вопрос!
Есть динамический массив, например из 5 форм. Все формы показаны процедурой Show. Необходимо удалить произвольную форму из массива, и передвинуть все остальные формы на 1 позицию назад. Как это сделать?
Кусок моего кода, как я это делаю:
//FileWnd: array of TForm; динамический массив форм
//nTag: integer; таг текущей удаляемой формы = номеру формы в массиве
//numfiles: integer; количество форм в массиве - 1
var numfiles,i,formTag: integer;
for i:=0 to Length(Filewnd)-1 do Filewnd[i].Close;
formtag:=nTag;
numfiles:=Length(Filewnd)-1;
FileWnd[formtag].Release;
FileWnd[formtag]:=nil;
for i:=formtag to Length(FileWnd)-2 do if FileWnd[i+1]<>nil then begin
FileWnd[i]:=nil;
Move(FileWnd[i+1],FileWnd[i],SizeOf(FileWnd[i+1]));
FileWnd[i].Tag:=i;
FileWnd[i].Name:="FileWnd"+IntToStr(i); end;
if FileWnd[numfiles]<>nil then begin
FileWnd[numfiles].Release;
Filewnd[numfiles]:=nil; end;
SetLength(FileWnd,numfiles);
Заранее спасибо за ответ
← →
MBo (2002-02-18 14:33) [1]Len:=Length(FileWnd);
FileWnd[N].Release;
...может, еще чего-то для освобождения надо?
Move(FileWnd[N+1],FileWnd[N],SizeOf(pointer)*(Len-N-1));
SetLength(FileWnd,Len-1);
тэги, имена нужны?
for i:=n to len-2 do begin
FileWnd[i].Tag:=i;
FileWnd[i].Name:="FileWnd"+IntToStr(i);
end;
← →
skywalker (2002-02-18 14:34) [2]Попробуй эту функцию, если я правильно понял твой вопрос:
function RemoveForm(RForm:TFrom):boolean;
var
BackArr:array of TForm;
Len,Cnt:word;
begin
Result:=false;
Len:=Length(FileWnd);
if Len=0 then Exit;
for Cnt:=0 to Len-1 do
begin
if FileWnd[Cnt]<>RForm then
begin
SetLength(BackArr,Length(BackArr+1);
BackArr[Length(BackArr)-1]:=FileWnd[Cnt]
end
else Result:=true
end;
SetLength(FileWnd,0);
Len:=Length(BackArr);
if Len=0 then Exit;
for Cnt:=0 to Len-1 do
begin
SetLength(FileWnd,Cnt+1);
FileWnd[Cnt]:=BackArr[Cnt]
end;
SetLength(BackArr,0)
end;
← →
olookin (2002-02-18 15:03) [3]Спасибо, но все великолепно работает при присваивании FileWnd[i]:=FileWnd[i+1] и FileWnd[i].Tag=FileWnd[i+1].Tag и простом изменении длины массива SetLength(FileWnd,Length(FileWnd)-1);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c