Newsgroup: it.comp.lang.visual-basic
Titolo: Chiudo finestra e si chiude tutto il programma... bug vb6 o bug mio ????

Boh... ragazzi, non so piu' che pesci pigliare...
sono appena tornato dalle ferie (ero fresco e
riposato... in due giorni ho annullato tutto ;) )
e mi trovo davanti a un problema che non riesco a spiegarmi...
Da finestra principale carico una finestra secondaria con
     frmGestisciPreventivo.Show 1
teoricamente cliccando la X oppure facendo "Unload me"
si dovrebbe rilasciare la finestra e ridare il controllo a
quella che l'ha chiamata....
Fatto sta che, al contrario, si esce completamente dal programma:
quando lancio il programma compilato, in Win XP semplicemente
chiude tutto, in Win98 salta fuori la finestrella che
chiede se mandare una segnalazione dell'errore a Microsoft;
quando lancio il programma da sistema di sviluppo (la maggior
parte delle volte, visto che sto programmando), addirittura
si chiude anche quello e va riavviato!!!!!
Uso VB6 SP6 su WinXP pro... avete qualche idea di cosa
potrebbe essere ???
E' un baco di VB6 ???
Sono io che sono demente ???
In realta' questa finestra pesca informazioni da matrici e
ci fa un po' di elaborazioni, quando le matrici non hanno
nulla da elaborare, effettivamente tutto si chiude normalmente,
quando invece c'e' del lavoro da fare succede il patatrac...
Pero' ho seguito il flusso del programma passo passo e sembra
essere tutto perfettamente regolare, le elaborazioni danno
i risultati voluti e tutto viene caricato bene (carico degli
array di controlli), ma quando decido di chiudere la finestra....
zzzap.... tutto chiuso....
Vi ringrazio comunque (anche se siete solo arrivati a leggere fin qui!)
Ciao!
Hiho

 Hiho
Prova a mettere una gestione degli errori in modo da non far chiudere il
programma e intercettare l'errore.
Hai controllato gli eventi Unload e Teminate del form?
Se non ho capito male, in debug funziona tutto... nelle macchine di
distribuzione ci sono tutti i controlli/librerie del tuo progetto?
Ciao, Vincenzo

 distribuzione ci sono tutti i controlli/librerie del tuo progetto?
Si, ma lo fa anche da me sulla macchina su cui programmo!
Grazie!
Hiho

 Hiho
Una volta mi č successa una cosa simile. Non so per quale motivo, ma un file
.frm al suo interno aveva dei caratteri strani (l'ho aperto con Notepad, da
VB sembrava tutto normale). Io ho risolto creando un Form nuovo e copiando
tutti i controlli con codice. (Se hai MZTool lo puoi fare tranquillamente)
Ciao, Vincenzo

 tutti i controlli con codice. (Se hai MZTool lo puoi fare tranquillamente)
mi sa che provero' a fare coma hai fatto tu, poi, eventualmente
provero' anche a rifare il codice del form...
MZTool non lo conosco, provo a cercarlo e vediamo
che succede! ;)
Grazie!
Hiho

 provero' anche a rifare il codice del form...
Usi delle funzioni API come CopyMemory(), VarPtr() o SetWindowLong()?
E' molto probabile che non rimetti le cose a posto dopo aver pasticciato con
la memoria e quando chiudi la finestra windows si accorge che hai lasciato
disordine e ti piglia a calci.
Ciao
-- 
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 disordine e ti piglia a calci.
Ma... guarda... ho controllato un sacco di volte e non mi sembra di
aver combinato pasticci...
Ma mi pare che sia proprio la gestione degli array di controlli che
non viene digerita.... sto cercando di isolare il problema...
Grazie!
Hiho

Ciao!
A un mio collega succedeva una cosa del genere tempo fa; dopo un po' di
prove ho capito che era dovuta al fatto di richiamare il form dopo la
chiusura.
Era una cosa del tipo:
Sub Pinco()
    ....
    MioForm.Show 1
    MiaVar = MioForm.Text1
    ....
End Sub
In questo modo, il fatto di far riferimento al campo Text1 del form dopo che
questo era stato scaricato, causava il crash dell'ambiente di sviluppo.
L'errore non si verificava dal programma compilato ne' in fase di debug, ma
solo durante l'esecuzione, senza punti d'interruzione, all'interno
dell'ambiente di sviluppo.
Non so se questo puo' essere il tuo caso. In alternativa, mi viene in mente
che possa attivarsi un qualche evento legato al form dopo il suo
scaricamento... Possibile...?
In bocca al lupissimo! ;)
Ciao!
    Alex

 scaricamento... Possibile...?
Si... puo' essere, anche se non riesco a capire cosa....
E' sicuramente un problema legato alla creazione (o meglio al
rilascio) degli array di controlli....
Anzi... sono convinto che sia dovuto proprio al rilascio,
in quanto ho alcuni array di controlli che sono messi su
alcuni frames anch'essi array (costruiti a run-time)...
ho paura che non vengano rilasciati con lo stesso ordine
in cui sono stati fatti e forse succede un casino con
i controlli che magari dovrebbero essere su quei frame
che vengono rilasciati prima....
Ma e' solo un'ipotesi campata in aria...
Rileggendomi, ho fatto un gran casino a spiegarmi....
spero si capisca cosa voglio dire...
Non trovo un'altra spiegazione plausibile....
Se e' vero questo.... e' possibile dare un'ordine
al rilascio degli array di controlli quando rilascio
il form ???
Mazza che casino....
Ripeto che dal punto di vista logico del programma
sembra tutto corretto....
Grazie per la dritta!
Hiho

...

Io proverei prima a mettere dei Doevents sulle parti principali di
calcolo,
se non dovesse funzionare proverei a mettere la proprietą del form
controlbox
= false e a far chiudere la finestra da un pulsante, sul click
attivare un timer di 100 ms che chiude la finestra dare il tempo
quindi di scaricare la memoria al pc.

 il form ???
Intendi scaricare i controlli creati a run-time?
Li hai creati press'a poco cosi'?
Load MioControllo(indice)
Forse ti dico una cosa ovvia, ma... facendo una cosa di questo genere...?
Unload MioControllo(indice)
Boh...
L'errore te lo da' anche facendo il debug? Se no, mettendo un punto
d'interruzione sull'unload del form e andando avanti passo passo succede
qualcosa...?
Cmq. se scopri il problema (e una soluzione) fammi sapere.
Ciao!!
    Alex

 quindi di scaricare la memoria al pc.
Piu' o meno avevo gia' provato quello che mi suggerisci,
inserendo un msgbox sia nell'evento "unload" che nel "terminate"...
succede che clicco su "OK" e si chiude il programma (tra gli
eventi "unload" e "terminate").
Ho provato a mettere anche "doevents" appena prima della
chiusura della funzione "unload" del form, ma e' sempre
troppo presto.... il casino succede appena dopo....
Boh ?!
Grazie!
Hiho

 Cmq. se scopri il problema (e una soluzione) fammi sapere.
Pare che il problema sia causato dal fatto di spostare e ridimensionare
una textbox a runtime.... se la textbox non la tocco sembra non
faccia il problema....
Indago un'altro po', poi cio' che scatena il tutto lo isolo....
Ma a questo punto sono convinto al 90% che sia un bug di VB6....
Hiho

> Cmq. se scopri il problema (e una soluzione) fammi sapere.
Sono convinto che il problema sia parente stretto di questo:
http://support.microsoft.com/default.aspx?scid=kb;en-us;190519
che, a quanto pare, non e' ancora (se mai lo sara') stato risolto...
Utilizzando un codice tipo
         Load txtNote(pos)
         Set txtNote(pos).Container = fraModulo(pos)
         With txtNote(pos)
             .Top = 2160
             .Width = 5295
             .Visible = True
         End With
dove fraModulo e' un frame, eliminando
	Set txtNote(pos).Container = fraModulo(pos)
il problema sparisce....
Ho dovuto modificare la struttura del form e tutto
quello che era correlato, ma ora non ci sono problemi....
Anche se ho buttato via un bel po' di tempo....
Ciao!
Hiho