Всех приветствую. Только учусь работать с динамическими объектами, объясню суть вкратце: необходимо реализовать отрисовку на ScrollBox компонентов Panel,на которых будет помещён компонент WebBrowser. Создал процедуру,которая это делает,однако она зависит от количества,которое нужно создать. Если количество маленькое,например, 7 он может создать,но при закрытии приложения выводится ошибка: "Прекращена работа приложения" и ошибки. Но,например,с 20 работает и закрывается всё идеально.Прошу помощи доработать или указать на недостатки.
Код:
..
{ Private declarations }
public
//массив компонентов webbrowser
web: array of TWebBrowser;
//массив компонентов Panel
panel:array of Tpanel;
//общее количество,которое нужно создать
const allcount=14;
//количество объектов,которое поместится в строке в зависимости от размеров экрана
var count:integer;
//отступ сверху
toppos:integer;
//параметры объектов
const widthweb=200;
const heightweb=100;
const interval=30;
..
procedure TForm1.WebCreate();
var i,j,a,z,count:integer;
begin
showmessage(inttostr(allcount));
Form1.ScrollBox1.Width:=screen.Width;
Form1.ScrollBox1.Height:=screen.Height-Scrollbox1.Top;
Form1.toppos:=20;
showmessage(inttostr(Screen.Width));
//расчет штук в строке
count:=Floor(Screen.Width/(Form1.widthweb+Form1.interval));
showmessage(inttostr(count));
//расчёт сколько строк нужно нарисовать
a:=floor(allcount/count);
//задание размеров массивов
SetLength(Form1.web,Form1.allcount-1);
SetLength(Form1.panel,Form1.allcount-1);
for j := 0 to a do begin
for i :=j*count to ((j*count)+count-1) do
begin
Form1.panel[i]:=TPanel.Create(self);
Form1.panel[i].Parent:=Form1.scrollbox1;
Form1.web[i]:=TWebBrowser.Create(Form1.panel[i]);
TWinControl(Form1.web[i]).Parent := Form1.panel[i];
if i=j*count then begin
Form1.panel[i].Left:=74 ;
end
else begin
Form1.panel[i].Left:=Form1.panel[i-1].Left+Form1.widthweb+Form1.interval;
end;
Form1.panel[i].Top:=Form1.toppos;
Form1.web[i].Left:=0;
Form1.web[i].Top:=0;
//Form1.web[i].Navigate('google.com');
Form1.web[i].Silent:=true;
Form1.panel[i].Width:=Form1.widthweb;
Form1.web[i].Width:=Form1.widthweb;
Form1.panel[i].Height:=Form1.heightweb;
Form1.web[i].Height:=Form1.heightweb;
//уборка лишних компонентов
if i>Form1.allcount-1 then begin
Form1.web[i].Free;
Form1.panel[i].free;
end;
end;
Form1.toppos:=Form1.toppos+Form1.heightweb+Form1.interval;
end;
end;