Newsgroup: it.comp.lang.visual-basic
Titolo: Un applicazione sui Timer

Ciao a tutti. Mi sono avvicinato da poco al VB6 e mi trovo di fronte al 
seguente problema... credo che per chi ha un po di esperienza il tutto sia abbastanza 
semplice da gestire... io invece non ho trovato soluzione.
Cerchero' di essere il piu' chiaro possibile.
Ho una combo cmbStatus, un command cmdStatus ed un timer timerStatus.
La combo e' riempita con gli elementi:
"Metti in moto" con (listindex = 0),
"Fermati" con (listindex = 1),
"Riparti" con (listindex = 2).
Io vorrei fare questo:
- In cmbStatus scelgo "Metti in moto", clicco su cmdStatus, il timer parte ed ogni 2 secondi fa un azione (ad es. un debug.print "HO MESSO IN MOTO")
- Il Timer continua a girare finche' posiziono cmbStatus su "Fermati", clicco su cmdStatus, il timer si ferma e stampo un debug.print "FERMATO".
- Posiziono cmbStatus su "Riparti", clicco su cmdStatus, il timer riparte ed ogni 2 secondi rifa' ad es. un'altra azione (ad es. un debug.print "RIPARTITO")
Io ho scritto questo codice ma ho il problema che la Sub timerStatus_Timer agisce (cioe' mi stampa i debug) al solo 
movimento del mouse sui vari items della cmbStatus.
Private Sub cmdStatus_Click()
  timerStatus.Interval = 2000
  timerStatus.Enabled = True
End Sub
Private Sub timerStatus_Timer()
  If (cmbStatus.ListIndex = 0) Then
	Debug.Print "HO MESSO IN MOTO"
  ElseIf (cmbStatus.ListIndex = 1) Then
	Debug.Print "FERMATO"
  ElseIf (cmbStatus.ListIndex = 2) Then
	Debug.Print "RIPARTITO"
  End If
End Sub
Il perche' e' sicuramente legato al fatto che io testo i listindex... il problema e' che non so come fare a testare sia il listi index che l'evento "Ho cliccato su cmdStatus".
Esiste una soluzione? Potrei ricevere qualche codice che mi fa capire come fare?
Grazie in anticipo
ACORN
___________________________________________________
Se vuoi un indirizzo di posta elettronica gratuito, 
iscriviti a 
http://www.katamail.com
-- 
Posted from 
c000-h015.c000.muc.cp.net
 [209.228.29.105] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

movimento del mouse sui vari items della cmbStatus.
No, lo fa ogni 2 secondi, come gli hai detto tu. Il problema è che tu non gli hai detto in nessuna
parte di fermersi se clicchi si "fermati"...
quindi:
Private Sub cmbStatus_Click()
    Select Case cmbstatus.ListIndex
        Case 1
              timerstatus.Enabled = False
              Debug.Print "INTERROTTO"
        Case 2
              timerstatus.Enabled = True
    End Select
End Sub
Private Sub timerStatus_Timer()
    Select Case cmbstatus.ListIndex
        Case 0
            Debug.Print "HO MESSO IN MOTO"
        Case 2
            Debug.Print "RIPARTITO"
    End Select
End Sub
Private Sub cmdStatus_Click()
  timerstatus.Interval = 2000
  timerstatus.Enabled = True
End Sub
Coì facndo se clicchi su interrompi, blocchi il timer e se clicchi su riavvia lo fai ripartire. Ho
scritto "ripartito nell'evento click della combo, poiché se il timer è disattivato non verrà mai
eseguito l'evento timer!!!
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

 - Posiziono cmbStatus su "Riparti", clicco su cmdStatus, il timer
riparte ed ogni 2 secondi rifa' ad es. un'altra azione (ad es. un
debug.print "RIPARTITO")
Ma lo fermi il timer quando listindex è = 1?
--
 
federic...@planet.it
Eliminare NOSPAM dall'indirizzo! Delete NOSPAM from address!

 Potrei ricevere qualche codice che mi fa capire come fare?
Oltre a quanto gia` detto dai colleghi, posto un esempio, spero utile, di
"contasecondi" che avevo incominciato qualche giorno fa per risponderti ma
che poi ero stato costretto ad abbandonare causa impegni. Questa sera,
sollecitato da altri thread sull'argomento "controlli aggiunti a runtime",
l'ho completato in maniera che possa essere utile a chi e` interessato a
questo argomento o al tuo. Incolla il codice in un form nudo e crudo, poi
esegui.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------
*** BEGIN ***
Option Explicit
Private Enum Actions
  ActionStart = 1
  ActionStop = 2
  ActionPause = 3
  ActionContinue = 4
End Enum
Private Const c_TimerInterval = 100
Private Const c_DefaultSeconds = 2 * 60 * 60 ' 2 ore
Private Const c_Start = "&Inizia"
Private Const c_Stop = "&Ferma"
Private Const c_Pause = "&Pausa"
Private Const c_Continue = "&Continua"
Private WithEvents lblTimer    As VB.Label
Private WithEvents txtTime     As VB.TextBox
Private WithEvents cmdStart    As VB.CommandButton
Private WithEvents cmdStop     As VB.CommandButton
Private WithEvents cmdPause    As VB.CommandButton
Private WithEvents cmdContinue As VB.CommandButton
Private WithEvents tmrTimer    As VB.Timer
Private m_Interval
Private Sub cmdContinue_Click( _
)
  DoEvents
  DoAction Actions.ActionContinue
End Sub
Private Sub cmdPause_Click( _
)
  DoEvents
  DoAction Actions.ActionPause
End Sub
Private Sub cmdStart_Click( _
)
  DoEvents
  DoAction Actions.ActionStart
End Sub
Private Sub cmdStop_Click( _
)
  DoEvents
  DoAction Actions.ActionStop
End Sub
Private Sub DoAction( _
  ByVal Action As Actions _
)
  Select Case Action
  Case Actions.ActionStart
    With tmrTimer
      .Enabled = False
      .Interval = c_TimerInterval
    End With
    On Error Resume Next
    m_Interval = Now + CDate(txtTime.Text)
    With Err
      If .Number _
        Then m_Interval = DateAdd("s", c_DefaultSeconds, Now)
      .Clear
    End With
    Caption = Name & " - In esecuzione"
    cmdStart.Visible = False
    cmdContinue.Visible = False
    txtTime.Visible = False
    With cmdStop
      .Cancel = True
      .Visible = True
    End With
    With cmdPause
      .Default = True
      .Visible = True
      .SetFocus
    End With
    lblTimer.Visible = True
    tmrTimer.Enabled = True
  Case Actions.ActionStop
    tmrTimer.Enabled = False
    Caption = Name
    cmdStop.Visible = False
    cmdPause.Visible = False
    cmdContinue.Visible = False
    lblTimer.Visible = False
    With cmdStart
      .Default = True
      .Visible = True
    End With
    With txtTime
      .Visible = True
      .SetFocus
    End With
  Case Actions.ActionPause
    tmrTimer.Enabled = False
    m_Interval = DateDiff("s", Now, m_Interval)
    Caption = Name & " - In pausa"
    cmdPause.Visible = False
    With cmdContinue
      .Default = True
      .Visible = True
      .SetFocus
    End With
  Case Actions.ActionContinue
    Caption = Name & " - In esecuzione"
    cmdContinue.Visible = False
    With cmdPause
      .Default = True
      .Visible = True
      .SetFocus
    End With
    m_Interval = DateAdd("s", m_Interval, Now)
    tmrTimer.Enabled = True
  Case Else
  End Select
End Sub
Private Sub Form_Load( _
)
  Set lblTimer _
    = Controls.Add("VB.Label", "lblTimer", Me)
  Set txtTime _
    = Controls.Add("VB.TextBox", "txtTime", Me)
  Set cmdStart _
    = Controls.Add("VB.CommandButton", "cmdStart", Me)
  Set cmdStop _
    = Controls.Add("VB.CommandButton", "cmdStop", Me)
  Set cmdPause _
    = Controls.Add("VB.CommandButton", "cmdPause", Me)
  Set cmdContinue _
    = Controls.Add("VB.CommandButton", "cmdContinue", Me)
  Set tmrTimer _
    = Controls.Add("VB.Timer", "tmrTimer", Me)
  With lblTimer
    .Caption = ""
    .BackColor = vbBlack
    .ForeColor = vbGreen
    .BorderStyle = vbFixedSingle
    .Alignment = vbCenter
    .AutoSize = True
    .AutoSize = False
    .Move 240, 240, cmdStart.Width
    txtTime.Move .Left, .Top, .Width, .Height
    cmdStart.Move .Left, .Top + .Height + 240
  End With
  txtTime.Text _
    = Format$( _
      DateAdd("s", c_DefaultSeconds, Date), "hh.nn.ss")
  With cmdStart
    .Caption = c_Start
    cmdStop.Move .Left, .Top
    cmdPause.Move .Left + .Width + 120, .Top
  End With
  With cmdPause
    .Caption = c_Pause
    cmdContinue.Move .Left, .Top
  End With
  cmdStop.Caption = c_Stop
  cmdContinue.Caption = c_Continue
  Show
  DoAction Actions.ActionStop
End Sub
Private Sub Form_Unload( _
  Cancel As Integer _
)
  DoAction Actions.ActionStop
  Set tmrTimer = Nothing
  Set cmdContinue = Nothing
  Set cmdPause = Nothing
  Set cmdStop = Nothing
  Set cmdStart = Nothing
  Set txtTime = Nothing
  Set lblTimer = Nothing
  Set Form1 = Nothing
End Sub
Private Sub tmrTimer_Timer( _
)
  lblTimer.Caption = Format$(m_Interval - Now, "hh.nn.ss")
  If Now >= m_Interval Then DoAction Actions.ActionStop
End Sub
Private Sub txtTime_GotFocus( _
)
  With txtTime
    .SelStart = 0
    .SelLength = Len(.Text)
  End With
End Sub
Private Sub txtTime_LostFocus( _
)
  On Error Resume Next
  With txtTime
    .Text = Format$(.Text, "hh.nn.ss")
  End With
End Sub
*** END ***