Newsgroup: it.comp.lang.delphi
Titolo: Stack overflow

Compilo e avvio il mio programma (in fase di sviluppo) dall'IDE di Delphi 6. 
Appena il mio MainForm viene visualizzato, lo chiudo usando l'icona X 
(Chiudi) di Windows. A questo punto esce il messaggio di Stack Overflow.
Ho provato a introdurre un exit subito all'ingresso nella routine 
dell'evento OnShow che è la prima eseguita, in modo che in effetti il 
programma non apra files etc., cioè non faccia nulla. Il problema rimane.
Che cosa può causare una stack overflow ? Pensavo ad un problema di loop 
infinito o roba del genere, ma non mi pare venga eseguito nulla ..
Come cercare l'origine del problema ? 


potrebbe trattarsi di due eventi che finiscono per chiamarsi uno
con l'altro. Prova a sganciarli o a mettere un breakpoint su
tutti gli eventi di chiusura (onclosequery, onclose, ondestroy, ...)
ciao
Giacomo

 ha scritto nel 
messaggio news:f_exk.57369$Ca.1...@twister2.libero.it...


 
Prova a postare qualche riga del codice che scrivi nell'OnClose, e 
nell'OnCellClick forse è li' l'errore
Goblin
-- 
Ibis et redibis non morieris in bellum
http://goblinland.myminicity.com/

Nell'On Close:
   Close;
   MyStringList.Free;
Nell'OnCellClick c'è la seguente routine, ma l'ho tolta e ho tolto la 
referenza all'evento, avendo comunque lo stesso risultato.
var
  i: integer;
 begin
  // GRID DETTAGLIO DI MOVIM DI UN ANNO E DI UNA CAT
  // (Pagina Dettaglio, DBGridDet)
  QryMovim.DatabaseName := BudgetTable.DatabaseName;
  if not GetMovimDetail ( QryMovim,                  //Query dataset
              CbAnni.Items[CbAnni.ItemIndex],        //Anno
              BudgetTable.fieldByName('ID').AsString)then //Categoria
  begin
     showmessage('Non esistono righe dell''anno 
'+CbAnni.Items[CbAnni.ItemIndex]+
                 ' con categoria '+BudgetTable.fieldByName('ID').AsString);
     exit;
  end;
"^_Goblin_^" <^__^Nic_^__^sab_^__^@^__^Libero_^__^.it> ha scritto nel 
messaggio news:_M9yk.10298$YZ3....@tornado.fastwebnet.it...


    MyStringList.Free;
mmm Domanda: Perchè nell'evento OnClose richiami il Close ????
E' implicito, se vuoi gestire la chiusura devi gestire la variabile 
'CanClose' nell'evento CloseQuery. Il close lo metti sull'evento Onclick 
di qualche bottone. Piccolo esempio.
procedure TForm13.Button1Click(Sender: TObject);
begin
   close; // qui dico di chiudere
end;
procedure TForm13.FormCloseQuery(Sender: TObject; var CanClose:Boolean);
begin
// chiedo conferma di chiusura
canclose :=  MessageDlg('Chiudo la form', mtConfirmation, [mbYes, mbNo], 
0) = mrYes;
end;


Scusa, hai ragione. Non era Close, ma Dataset.Close....
"^_Goblin_^" <^__^Nic_^__^sab_^__^@^__^Libero_^__^.it> ha scritto nel 
messaggio news:2poyk.10986$YZ3....@tornado.fastwebnet.it...


E invece avevi proprio ragione. Il Close del dataset era scritto male:
 with MyDB do
    ....
   close;
Senza il begin,end, il close che intendeva essere riferito al MyDB, si
riferiva effettivamente al form, determinando lo stack overflow !!
Davvero grazie! Ho riguardato il codice per una settimana e proprio non ero
riuscito a cogliere la svista..
"^_Goblin_^" <^__^Nic_^__^sab_^__^@^__^Libero_^__^.it> ha scritto nel 
messaggio news:2poyk.10986$YZ3....@tornado.fastwebnet.it...
