Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.07;
Скачать: CL | DM;

Вниз

Удаление формы из динамического массива   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
1-19261
Андрей Сенченко
2002-02-11 10:27
2002.03.07
Теория и практика работы с ресурсами.


1-19164
Dan_Viking
2002-02-21 14:51
2002.03.07
Ищу компонент.


1-19269
hooky-mars
2002-02-20 19:19
2002.03.07
Tstrings


1-19198
cher_gvf
2002-02-18 18:13
2002.03.07
Можно ли..?


7-19355
bios_i_ego
2001-12-01 13:06
2002.03.07
В Паскале было Port