Newsgroup: it.comp.lang.visual-basic
Titolo: ERRORE BUG O ANOMALIA di VB 6 ?

Sto lavorando ad un software che utilizza DBGRID e ho appena fatto un 
aggiornamento a TrueDBGRID pro 7.0.
Bello ma sono comparse alcune anomalie strane e tutto si è un pò 
appesantito in velocità!
Si verifica una errore pazzesco!
Desidero mostrare un frame a seconda della preferenza dell'utente per 
cui ho scritto il codice seguente:
Private Sub Form_Activate()
	Me.FrameFogli.Visible = Preferenza ' true o false
	If FrameFogli.Visible = True Then
		... fai qualcosa
	End If
End Sub
Prima funzionava perfettamente, ora mi succede questo:
1) Efettuo l'assegnazione Preferenza = True
2) Entro in modalità di Debugging nella funzione Form_Activate, arrivo 
alla assegnazione incriminata e la eseguo mi aspetto che dopo l'istruzione:
	Me.FrameFogli.Visible = Preferenza
il  frameFogli diventi visibile e sia uguale a True ...
... invece no!!!
l'assegnazione viene semplicemente ignorata e Me.FrameFogli.Visible 
rimane a False !!!
Ma come è possibile ???
ciao Marco

 Sto lavorando ad un software che utilizza DBGRID e ho appena fatto un
Cut
ti confermo che
Dim preferenza As Boolean
Private Sub Form_Activate()
Me.FrameFogli.Visible = preferenza ' true o false
If FrameFogli.Visible = True Then
End If
End Sub
Private Sub Form_Load()
preferenza = True
End Sub
funziona senza problemi!
ehm...ti faccio notare(ma già lo sai no??..lo ribadisco va!) che per
Activate ci passa una volta sola eh!...se non selezioni un altra form!
se questo preferenza lo modifichi ma non ripassi per l'evento activate e
come se non l'avessi settato!
che c'entra con questo discorso le truedbgrid???propenderei per un errore
logico tuo...non è che hai una const e una var pubblica col solito nome?e
nel form "preferenza" non l'hai dichiarata come privata al form???prova a
mettere option explicit per vedere eventuali omissioni ed incongruenze!

 rimane a False !!!
Vorrei capire meglio:
Me.FrameFogli.Visible rimane False anche dopo che lo setti a true, oppure il
FrameFogli rimane non visibile, ma la proprietà è andata correttamente a
True?
Perchè, nel caso, non vorrei che tu restassi piantato con un semplice
problema di DoEvents o Refresh.
Ciao
Alberto

 True?
si rimane proprio a False nonostante l'abbia messa a True !
Ciao

 mettere option explicit per vedere eventuali omissioni ed incongruenze!
la True DBGRID c'entra in quanto prima il problema non saltava fuori !
Comunque non funziona neanche se metto direttamente:
Me.FrameFogli.Visible = True
ovvero dopo l'assegnazione rimane a false!
Ti spiego meglio i passaggi che ho fatto; dopo l'aggiornamento alla True 
DbGrid non viene più eseguito il codice contenuto dentro a Form_activate.
Allora ho inserito in Form_Initialize una chiamata forzata a 
form_Activate e si è verificata l'anomalia di cui sopra.
Il fatto è che se tolgo la chiamata forzata a Form_activate, ovvero se 
lascio fare tutto al Vb , il codice contenuto dentro a Form_activate non 
viene MAI eseguito. Ma con DBGrid "normale" veniva esguito !
Strano ma vero
Qualche suggerimento ?

 form_Activate e si è verificata l'anomalia di cui sopra.
Allora è chiaro: L'evento Initialize non ha ancora la finestra visibile
(come il Load) quindi ogni assegnazione non viene in quel momento
posizionata.

 ha scritto nel messaggio
news:3D410B6A...@libero.it...


Lupo wrote:

Allora ho fatto queste modiche:
Ho creato la sub MY_Activate
	sub MY_Activate()
		Me.FrameFogli.Visible = True
		If FrameFogli.Visible = True Then
			 ... Qui non entra MAI ...
		End If
	End Sub
Poi ho fatto le prove seguenti:
1)
Private Sub Form_Activate()
     Call My_Activate
End Sub
Lancio l'applicazione e c'è l'anomalia.
2)
Private Sub Form_Initialize()
     Call My_Activate
End Sub
Lancio l'applicazione e c'è l'anomalia.
3)
Private Sub Form_Load()
    Call My_Activate
End Sub
Lancio l'applicazione e c'è l'anomalia.
Ho esaurito i posti !!!

 Private Sub Form_Load()
[SNIP]
L'unico evento tra questi dove puo' funzionare e' Activate, negli altri due
vale quanto detto da Lupo; qualsiasi controllo restituisce Visible=False,
indipendentemente dal valore memorizzato nella property, fintanto che la
finestra non viene caricata.
Il fatto e' che, in Form_Activate, i medesimi controlli restituiscono
correttamente True, cosi' come faceva il DBGrid e come invece sembra non
fare TrueDBGRID
Onestamente propenderei per un anomalia del controllo, per verificare prova
a invocare la tua MY_Activate a "bocce ferme", cioe' quando sicuramente la
form e' visibile; per esempio crea un command temporaneo e metti la chiamata
nel click... cosi' funziona?
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

Luca Dormio wrote:
 > L'unico evento tra questi dove puo' funzionare e' Activate, negli 
altri due
 > vale quanto detto da Lupo; qualsiasi controllo restituisce Visible=False,
 > indipendentemente dal valore memorizzato nella property, fintanto che la
 > finestra non viene caricata.
 > Il fatto e' che, in Form_Activate, i medesimi controlli restituiscono
 > correttamente True, cosi' come faceva il DBGrid e come invece sembra non
 > fare TrueDBGRID
 >
 > Onestamente propenderei per un anomalia del controllo, per verificare 
prova
 > a invocare la tua MY_Activate a "bocce ferme", cioe' quando 
sicuramente la
 > form e' visibile; per esempio crea un command temporaneo e metti la 
chiamata
 > nel click... cosi' funziona?
se faccio come dici tu, ma anche sono se rimpicciolisco la finestra e
poi la ingrandisco... funziona !
Probabilmenete quando si apre il form la prima volta viene saltata la
Form-Activate!
Ci sono 4 grid indipendenti in quel form, è  possibile che ci metta
troppo tempo ad aprirsi e non chiami la form_activate ???
ciao
Marco

 Lancio l'applicazione e c'è l'anomalia.
Tanto per togliersi ogni dubbio (se ne sono viste di tutti i colori con
controlli proprietari...)
sub MY_Activate()
    Me.FrameFogli.Enabled = 1
    Me.FrameFogli.Visible = 1
    If FrameFogli.Visible <>0 Then
    '... Qui, accipicchia e poffarbacco, DEVE entrare, se no butta (ho detto
butta!) quel controllo
    End If
End Sub
Poi, se va, prova a concentrarti sul quel Enabled e, in subordine, prova a
rimettere "Me.FrameFogli.Visible = True" e "If FrameFogli.Visible=True Then"

 troppo tempo ad aprirsi e non chiami la form_activate ???
Non credo... d'altra parte lo verifichi immediatamente inserendo un
Debug.Print oppure un MsgBox se provi con il compilato


 Debug.Print oppure un MsgBox se provi con il compilato
Ho messo debug.print "ciao" dentro la form_Activate e...
...sono arrivato ad una certezza:
Quando lancio l'applicazione e mi appare il form dell'applicazione con 
tutte le sue belle icone, bottoni, grid e tutto quanto ...  il codice in 
form_activate NON è stato eseguito!
Infatti il debug.print non stampa nulla nella finestra Immediate, fino a 
quando non iconizzo e re-ingrandisco il form, o comunque faccio una 
operazione che forza il ri-disegno del form.
Ciao
 

Lupo wrote:

Grazie succede questo:
se chiamo forzatamente MY_Activate da dentro Form_initialize or da 
dentro Form_load (ma non dovrei farlo!) l'anomalia rimane!. Anche usando 
  il sistema che mi hai indicato, non c'è verso NON ENTRA.
Se invece lascio MY_Activate dentro a Form_Activate (come dovrebbe 
essere) succede che la prima volta che lancio l'applicazione, il codice 
presente dentro Form_Activate non viene eseguito!
Ho già fatto la coversione DBgrid -> TrueDBgrid in altri programmi e non 
mi aveva dato problemi, del resto non veniva sfruttata così pesantemente 
come in questo!
ciao

 form_activate NON è stato eseguito!
Dunque....
Il form_activate deve eseguire.
Il fatto che prima di inserire quel controllo TrueDBGRID pro 7.0 tutto
andasse bene, mi fa pensare che questo oggetto sia in realtà una sorta di
demonio.
A meno che tu non abbia WindowState=VbMinimized, ma non credo, perchè tu
dici "Quando lancio l'applicazione e mi appare il form...", per cui mi
sembra tutto molto strano...
Alberto

 sembra tutto molto strano...
Ho fatto una copia del progetto e delle 4 grid ne ho individuato quella 
che crea il problema, l'ho tolta e adesso si entra in Activate.
Peccato però che la grid mi serva!
ora si tratta di capire perchè proprio quella crea problemi...

Risolto ma non so come....
Chi ha mai detto che l'informatica è una scienza esatta?! Nessuno vero!
Bene, preciso solo che ho fatto il processo di conversione da DBgrid a 
TrueDbgrid usando un'utility automatica fornita insieme al pacchetto 
della Apex (ditta prodittrice del pacchetto)
Allora dopo prove e controprove ho individuato la griglia che faceva i 
capricci fra le 4 del form, poi ho fatto taglia e incolla su un form 
temporaneo.
ho mandato in esecuzione l'applicazione (commentando il codice che 
faceva riferimento alla griglia) e non c'erano più anomalie, ovviamente!
Poi ho rifatto cut & paste all'inverso e ho rimesso tutte le cose a 
posto togliendo i commenti... e ora funziona tutto! sempre!
Quindi non è un problema di codice!
praticamente ho solo tolto e rimesso lo stesso controllo nella stessa 
posizione !
ora funziona senza anomalie!
e io penso di avere visto proprio di tutto ormai!
ciao e grazie a tutti
Marco Cattaneo

 Risolto ma non so come....
abbi pazienza Marco eh.....
tu ci hai parlato per un thread che è anche diventato abbastanza lungo di
Frame
abbiamo pensato e suggerito "ma come prova così e prova cosà"...e non
capivamo cosa c'entravano le TrueDBGrid...
Ora dal tuo ultimo post..
senti Marco non è che erano frame lisci vero?...dentro ci avevi messo le
truedbgrid?
Beh allora senti questa ....saranno comode ed alla moda...ma la fatica di
padroneggiarle è tanta...fai prima a prenderti la "grid32"(te la ricordi?era
di vb4)e farti su di essa un controllino...son più veloci e si "incriccano
meno"
Ti posso dire che io le odio ( a proposito ora ci son le nuove della
ComponentOne)...a me il tuo problema non è mai capitato....ma a me è
abbastanza normale che nello sviluppo dei pochi progetti in cui ci sono
(vecchi progetti di altri che devono essere ritoccati)...è normale che
perdano i diritti di registrazione 3/4 volte .
E' normale anche che talvolta si pianti il form... devi rifarne uno
esattamente uguale...(esattamente per modo di dire perchè da qualche parte
son convinto perde i CLSID del form o di qualche componente...e ho un
sospetto di sapere quale!)...
www.componentone.com
periodicamente tirano fuori dei service pack!

 sospetto di sapere quale!)...
Forse il problema è nei file che descrivono il form, quelli con estensione
.frm o .frx . Anche a me in passato è capitato e, almeno un paio di volte,
ho dovuto rifare un form perchè si era incasinato da solo e non c'era modo
di farlo tornare allo stato precedente.
Nel progetto dei giorni scorsi però nulla lasciava pensare che il problema
fosse causato dalla nuova griglia, se non il fatto che era stata l'unica
cosa nuova di quel progetto! Non ho appurato se, durante l'esecuzione,
l'anomalia era causata da VB o dalla griglia, so soltanto che l'interazione
dei due portava l'anomalia, e che una volta "registrato" meglio il controllo
(con il cut & paste) l'anomalia è scomparsa.
Perciò mi resta una domanda:  "Come può un controllo come la griglia
influire sul flusso di esecuzione VB ed inibire la chiamata di
form_Activate?"
Più in gererale, se la stessa cosa si verificasse anche con altri tipi di
controllo e su altre funzioni potrebbero saltare fuori bug molto difficili
da individuare!
Ciao a tutti
Marco Cattaneo