Newsgroup: it.comp.lang.delphi
Titolo: ancora create

ho aggiunto al mio programma questa procedura
-----------------------------------------------------------------------
procedure TForm1.creamattoncini;
var k,r,c:integer;
begin
 SetLength(aMAT,iNM);
 r:=1;c:=1;
 for k:=0 to iNM do begin
  aMAT[k]:=TShape.Create(Form1);
  with aMAT[k] do begin
   parent:=Form1;
   height:=17;
   width:=33;
   left:=33*r;
   top:=17*c;
  end;
   r:=r+1;
   if r>iNC then begin r:=1;c:=c+1; end
   end;
end;
-----------------------------------------------------------------------
iNM,iNC sono due interi dichiarati in precedenza(dove iNM è il numero totale
di TShape meno 1 e iNC è il numero di colonne in cui dividerli
aMAT : array of TShape <-array dinamico di TShape
ora quando faccio eseguire la procedura tramite un bottone tutto va bene e
disegna i TShape. quando pero chiudo il programma genera un errore  ve lo
riporto...
in compilazione è
project blok.exe raised an exception class EInvalidPointer with message
'Invalid pointer option'. process stopped. use step or run  to continue.
mentre a runtime da
 runtime errore 216 at 000036fe
non so che fare?
mi è stato suggerito di fare .free sui componenti ma non so quando farlo o
di mettere tra try except ma non so cosa
secondo voi che dovrei fare?
grazie mille!

Nell' evento OnDestroy della form cicla sull'array, fai il free di
tutti i suoi componenti e poi poni a zero la lunghezza dell'array
(oppure metti mioarray := nil).
Ciao, Rocco

 Ciao, Rocco
Ciao Fiz

 ha scritto nel messaggio
news:WNvV6.2645$Ea.1...@news.infostrada.it...


 ha scritto nel messaggio
news:_fFV6.4509$Ea.1...@news.infostrada.it...
: > Nell' evento OnDestroy della form cicla sull'array, fai il free di

:
:

iNM č gia diminuito di 1

grazie ged :) avevo fatto un po di casini consideravo iNM gia diminuito di 1
per fare il ciclo (facendolo partire da 0) pero quando settavo la lunghezza
lo settavo con 1 elemento in meno :)
ehehe grazie a tutti!

 end;
Ciao,
 mi sono accorto ora che hai già risolto (eh... ho sonno ;PP), cmq visto 
che avevo già scritto del codice, te lo propongo lo stesso.
Ha un'impostazione differente e, secondo me, più ordinata ... ma e' 
questione di gusti !! 
Type TMattoncini = Array of Array of TShape;
VAR aMAT : TMattoncini;
Procedure CreaMattoncini (iNM, iNC : cardinal; aParent : TWinControl);
var szY, szX, y, x : integer;
Begin
  if iNC = 0 then exit;
  if iNM = 0 then exit;
  sZY := iNM div iNC;
  if (iNM mod iNC) <> 0 then System.Inc (szY);
  SetLength (aMAT, szY);
  for y := Low (aMAT) to High (aMAT) do begin
    if y+1 <> szY then szX := iNC
      else if iNM <> iNC then szX := iNM mod iNC
        else szX := iNC;
    SetLength (aMAT[y], szX);
    for x := Low (aMAT[y]) to High (aMAT[y]) do begin
      aMat[y,x] := TShape.Create (Form1);
      with aMat[y,x] do begin
        parent := Form1;
        height := 17;
        width := 33;
        left := 33*x;
        top := 17*y;
      end;
    end;
  end;
End;
procedure TForm1.bCreaMattoncini(Sender: TObject);
Begin
 CreaMattoncini (130, 12, Form1);
End;
Procedure TForm1.bDistruggiMattoncini(Sender: TObject);
Var y,x : integer;
Begin
 for y := Low (aMAT) to High (aMAT) do begin
   for x := Low (aMAT[y]) to High(aMAT[y]) do begin
     if assigned (aMAT[y,x]) then aMAT[y,x].Free;
     aMAT[y,x] := nil;
   end;
   SetLength (aMAT[y], 0);
 end;
 SetLength (aMAT, 0);
End;
ciao, Davide DG.

questione di gusti !! 
A proposito di gusti, io preferisco sempre dare numi un po' piu'
significativi alle mie variabili, anche a costo di dover scrivere
qualche carattere in piu'  (alla fine scrivo piu' io di King :-))
Ciao, Rocco