PDA

Visualizza la versione completa : [VB] modo per far avvenire più eventi con una distanza di tempo?


Adrix
17-11-2002, 17:00
c'è un modo per far avvenire con un pulsante più eventi che tra loro hanno una distanza di tempo? ES:

courier Private Sub Cmdexport_Click()
Shell "FSHTOOL " & File1

distanza di tempo

FileCopy "dir\0000.bmp", "C:\WINDOWS\DESKTOP\LAVORO\0000.bmp"
End Sub

arial potreste scrivermi il codice con una distanza di tempo frai due eventi?

Adrix

michele79
17-11-2002, 19:06
Dim primoevento As Boolean

Private Sub Form_Load()
Timer1.Interval = 900 ' Imposta l'intervallo. (900 mllisecondi)
Timer1.Enabled = False ' il timer è stoppato
End Sub

Private Sub Command1_Click()
primoevento = True 'abilito l'esecuzione del primo evento
Timer1.Enabled = True ' faccio partire il timer
End Sub



Private Sub Timer1_Timer() ' quando parte il timer eseguo questo codice

If primoevento Then
'esegui il primo evento
Label1.Caption = "Buon giorno" 'dopo 900 millisecondi nella label scrivo buongiorno

primoevento = False 'il primo evento è avvenuto quindi lo disabilito

Else 'dopo altri 900 millisecondi eseguo di nuovo questa procedure ma siccome il primo evento è avvenuto,entro dentro questo else
'esegui il secondo evento
Label1.Caption = "Buona sera" ' ora visualizzo buona sera
Timer1.Enabled = False ' ho visualizzato tutti e 2 gli eventi,quindi disabilito il timer

End If
End Sub


Spero di esser stato chiaro,da me funzia! fa sapere
Ciao

:bubu:

Adrix
17-11-2002, 20:29
Ascolta io ho questi due eventi da dividere puoi dividermeli tu con una distanza di circa due-tre secondi? In modo che incollo direttamente il codice che mi scrivi nel progetto.

__________________________________________________ _____________

Private Sub Cmdexport_Click()
Shell "FSHTOOL " & File1
__________________________________________________ _____________

FileCopy "dir\0000.bmp", "C:\WINDOWS\DESKTOP\LAVORO\0000.bmp"
End Sub
__________________________________________________ ______________


rispondi al + presto
Adrix

ddies
18-11-2002, 11:34
Puoi usare l'api WaitForSingleObject che serve ad attendere che il processo che hai eseguito con shell sia terminato.

Il tuo problema è che devi aspettare i risultati del programma che hai eseguito?

Adrix
18-11-2002, 11:51
si si proprio quello. devo attendere la fine del processo dello shell e poi eseguire altre operazioni.

mi scrivi cosa dovrei scrivere fra le due operazioni?

Adrix

ddies
18-11-2002, 11:57
Allora in testa al programma devi mettere (dove metti le variabili globali al form)


Private Declare Function WaitForSingleObject Lib "KERNEL32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "KERNEL32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long


Poi usi questa funzione per eseguire il file:



Public Sub ShellWait(ByVal FileName As String, Optional WindowStyle As Variant)
Dim idProc As Long
Dim hProc As Long

idProc = VBA.Shell(FileName, WindowStyle)

hProc = OpenProcess(&H1F0FFF, False, idProc)
'attendi fine programma
If hProc <> 0 Then
Call WaitForSingleObject(hProc, INFINITE)
Call CloseHandle(hProc)
End If
End Sub


Quindi al posto di shell usi questa sub e non devi temporizzare niente.

Adrix
18-11-2002, 12:10
si ma nel codice che mi hai dato dove la scrivo la funzione del progr in dos?

Shell "FSHTOOL " & File1

Adrix

ddies
18-11-2002, 12:12
Un po' di elasticità.

Scusa intanto la costante INFINITE vale -1

ShellWait "FSHTOOL " & File1

Adrix
18-11-2002, 12:18
scusa mi riscrivi tutto il codice con il comando che ti ho dato? in modo che lo incollo direttamente.

ddies
18-11-2002, 12:44
Se vuoi vengo la direttamente.

Private Sub Cmdexport_Click()
ShellWait "FSHTOOL " & File1

Loading