Newsgroup: it.comp.lang.visual-basic
Titolo: Possibile Inserire un Timer ad un MsgBox

E' possibile inserire un timer in modo che dopo X secondi, anche se non si 
preme ok, il messaggio scompaia e la macro continui nella sua esecuzione?
Insomma come se il programma cliccasse ok da solo?
Grazie 



Forse fai più veloce a rifarti una form stile msgbox e chiamarla col
VbModal
-- 
DBMS Firebird
VB6 + Ado


Sì, con qualche API:
http://vbnet.mvps.org/code/hooks/messageboxhooktimerapi.htm
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.

 VbModal
Purtroppo con VBA non si puo' fare moltissima roba.
I messaggi che pubblico adesso sono del tipo
MsgBox "centenuto messaggio",, vbInformation,"Titolo" 

 Purtroppo con VBA non si puo' fare moltissima roba.
Eventualmente la prox. volta specificalo nei messaggi.
Se lo metti come firma (come ho fatto io), non ti devi ricordare di
metterlo sempre (anche io lo scordavo sempre)
Ciao!



con VBA puoi fare la stessa cosa che ti ha suggerito Andrea
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

 con VBA puoi fare la stessa cosa che ti ha suggerito Andrea
Il problema è che non ho capito come farla.
E poi io non voglio che la Form si spenga, ma solamente che il messaggio si 
spenga e continui con l'esecuzione del codice 

 ha scritto:

Devi usare il subclassing
Esempio:
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=52294&lngWId=1
--
ciao
  Stefano


Non potreste essere più chiari e concreti. Sapete che sono un po' una capra 
per le nuove scoperte (x me).
Ho provato infatti a scaricare il file zippato. A questo punto ho provato ad 
importarlo e l'unica cosa che mi fa importare è il modulo mMsgBoxEx (gli 
altri file mi dice che non sono supportati). E adesso che ho caricato questo 
modulo. Come lo chiamo e lo uso dalla mia Form?
Grazie
Tom 

Thommino ha scritto:

Anche in VBA č possibile costruirsi un messagebox personalizzato, partendo 
da una semplice form, e richiamandola con vbModal 

 da una semplice form, e richiamandola con vbModal
Si ma non ho idea di come si faccia!! 

modulo. Come lo chiamo e lo uso dalla mia Form?
Meglio che tu capisca come funziona il subclassing prima.
Qui c'č una buona spiegazione del subclassing scritta da Moreno Sirri, leggila
con attenzione:
http://www.it-lang-vb.net/Documentazione/Articoli/Subclassing.htm
qui un altro esempio di uso del subclassing  in un msgbox.
http://www.maurorossi.net/codice/msgboxhook.zip
--
ciao
  Stefano


Grazie per i link che mi state inviando, ma scusate, io ho caricato 
mMsgBoxEx.Bas (come modulo quindi) nel mio progetto.
Ho visto che al suo interno c'č la funzione pubblica MsgBoxEx che ha vari 
argomenti.
Non basterebbe a questo punto chiamarla dalla mia form, in un modo grezzo 
tipo
mMsgBoxEx.MsgBoxEx parametri1,parametro2,...,parametroultumo


E se caricassi il tutto in questo modo?
----CODE-------
Option Explicit
Option Compare Text
'Dichiara una nuova istanza di mMsgBoxEx
Dim Messaggio As New mMsgBoxEx
E poi ogni volta che volessi inserire un messaggio temporizzato facessi:
Messaggio.MsgBoxEx "testo", ,"titolo", , , , , , ,TRUE,5, 

Messaggio.MsgBoxEx "testo", ,"titolo", , , , , , ,TRUE,5, 
Hai provato?
Ti dà errori?
E quali?
--
ciao
  Stefano


A dire il vero non ho provato perchè temevo che fosse una boiata tremenda.
Perchè è corretto? 

>>Dim Messaggio As New mMsgBoxEx
Ho provato ad inserire questo e mi dice che c'è un errore di compilazione 
perchè il modulo non è di tipo valido.
Come mai? 

 Come mai?
Perchè VBA *NON* è VB.
Io continuo a ribadire che parlare di subclassing quando non si hanno le 
idee chiare nemmeno sul tipo di moduli da usare (basta aggiungere un modulo 
vuoto e copiarci il codice se l'originale non lo riconosce!!!) è solo una 
gran perdita di tempo.
VBA non permette certe cose?
O hai sbagliato strumento di sviluppo o ti adegui.
Fare un form con due bottoni come suggerito da Dexter ti avrebbe risparmiato 
un bel po' di casini.
Ciao 

Come mai? 
La sfera di cristallo non funziona bene ultimamente e non riesco a saperlo :-)
Prova iI codice di msgboxhook.zip, quello lo conosco, e vedi che errori ti da.
--
ciao
  Stefano


Come ho già più volte ripetuto, sono costretto a restare dentro VBA. Ridetto 
questo, a me pareva di aver capito che il link che conteneva il codice 
andasse bene per VBA.
Eppure in VBA riesco a caricare in qual modo i moduli di classe. Non capisco 
perchè questo modulo non si carica invece.
Si potrei creare una form senza bottoni, e invece di mettere MsgBox ...
mettere apri nuova form con questo titolo e con dentro questo messaggio e 
dopo x secondi fai chiudere la form. Ma a questo punto come temporizzo la 
chiusura automatica della form? 

 chiusura automatica della form?
Ho provato a fare come mi avete detto voi, creando una nuova form semplice.
Ho allora fatto cosě:
Option Explicit
Option Compare Text
'Dichiara una nuova istanza di CFormChanger
Dim oFormChanger As New MessaggioConfermaErrore
'Dichiara una nuova istanza di CFormChanger
Dim MessaggioForm As New MessaggioConfermaErrore
Con MessaggioConfermaErrore che il nome della nuova form, che per il momento 
al suo interno ha soltanto, la form di cornice e una label che si chiama 
Argomento. Ho a questo punto fatto:
Private Sub LanciaMessaggio(Titolo As String, Testo As String)
MessaggioForm.Show (False)
MessaggioForm.Caption = Titolo
MessaggioForm.Argomento.Caption = Testo
End Sub
Perchč il mio intento era quello poi nel codice di lanciare un messaggio in 
questo modo:
LanciaMessaggio "Tempo Atmosferico","c'č il sole"
Purtroppo pero' all'atto della compilazione ricevo errore su un'altra parte 
del codice
Private Sub UserForm_Activate()
Set oFormChanger.Form = Me
    UserForm_Resize
End Sub
Ed in particolare a questa riga Set oFormChanger.Form = Me
Nella mia ignoranza credo che il problema sia nell'uso della
Option Explicit
Option Compare Text
Secondo voi?

 Si ma non ho idea di come si faccia!!
Dicevo che come da voi suggerito ho creato la seguente nuova form:
Option Explicit
Option Compare Text
'Dichiara una nuova istanza di CFormChanger
Dim oFormChanger As New CFormChanger
'Dichiara una nuova istanza di MessaggioConfermaErrore
Dim MessaggioForm As New MessaggioConfermaErrore
e poi
Private Sub LanciaMessaggio(Testo As String, Titolo As String)
MessaggioForm.Show (False)
MessaggioForm.Caption = Titolo
MessaggioForm.Argomento.Caption = Testo
End Sub
In questo modo per lanciarla basta scrivere
LanciaMessaggio "c'è il sole","condizioni atmosferiche"
Adesso mi restano due domande:
1) Come faccio a farla chiudere dopo 5 secondi per esempio?
2) C'è modo di interrompere l'esecusione del codice principale fino a quando 
questa finestra non viene chiusa?
Grazie 

 ha scritto nel messaggio 
news:Qjykg.11771$bj6....@tornado.fastwebnet.it...
[cut]
Credo di aver risolto il tutto egregiamente in questo modo.
----CODE-------
Option Explicit
Option Compare Text
'Dichiara una nuova istanza di MessaggioConfermaErrore
Dim MessaggioForm As New MessaggioConfermaErrore
....
Private Sub LanciaMessaggio(Testo As String, Titolo As String)
Dim Inizio As Double
Dim Pausa As Double
Inizio = Timer
Pausa = 5 'sono i secondi prima di uscire dal ciclo e chiudere la form
MessaggioForm.Show (False)
MessaggioForm.Caption = Titolo
MessaggioForm.Argomento.Caption = Testo
Do While Timer < Inizio + Pausa And MessaggioForm.OptionButton1.Value = 
False
'Aspetta fino a quando non viene premuto il tasto
DoEvents
Loop
MessaggioForm.Hide
End Sub
In questo modo apre la nuova form creata e dopo 10 secondi o comunque quando 
viene premuto il tasto ok,la form viene chiusa.
Ditemi se vedete qualche ottimizzazione del tutto. Mi pare che comunque così 
funzioni bene!
Grazie
Ciao Thom