dynamiczne errory?

0

tworze formy w sposob dynamiczny

array of TForm1 ...

i jak wlaczam inna jakas aplikacje to wyskakuje blad -access violation at adres...in a.exe.....

czy jakos trzeba zabezpieczyc przy dynamicznym tworzeniu pamiec?

0

...kiedys korzystalem z funkcji to chyba byla "AllocMem()".

0

a jak ja wykorzystac w odniesieniu do tworzonych form (ktorych moze byc x wielkrotnosci) ?

czy to sie tak robi ? :
forms:=AllocMem(11111)

ale teraz nie wiem jaki zromiar dac :|
bedize maxymalnie 15 okien ...

0

Najpierw ustalasz długość tablicy Form (jest to tablica wskażników do obiektów):

SetLength(forms,dlugosc);

Potem musisz każdą formę utworzyć, zanim jej użyjesz (logiczne chyba :) ) (mysle, że stąd się mógł brać twój błąd:

for i:=Low(forms) to High(forms) do
 begin
  forms[i]:=TForm1.Create(nil {albo forma glowna});
  forms[i].Caption:='blebleble'; //itp
 end;

Jeśli tworzysz formy dynamicznie, nie zapomij zwalniać pamięci. Najlepiej w OnClose każdej dynamicznej formy ustawić action:=caFree;.

0

to jest ten kod ( u mnei na kompie akurat jest dobrze ale u kumpla , gdy otwirac cos innego to jest ten blad)

procedure stworzforme(l:integer);
begin
  SetLength(Forms,l+1);
  Forms[l] := TForm1.Create(Application);
  with forms[l] do begin
  top:=random(100);
  left:=random(100);
  Caption := 'Okno wykresu ['+inttostr(l)+']';
  FormStyle := fsMDIChild;
  Show;
  Visible:=true;
end;end;
0

Widocznie gdzies wywołujesz swoją procedurę w ten sposób:

{..}
stworzforme(4);
{..}
stworzforme(2); // powoduje zmniejszenie rozmiaru tablicy z 5 do 3
{..}
Forms[4] // odowłujesz się do elementu ktory nie istnieje

Proponuję:

If Length(Forms)<(L+1) Then SetLength(Forms,l+1);

1 użytkowników online, w tym zalogowanych: 0, gości: 1