Hallo Leute, allen ein frohes Osterfest!
Ich hänge in meinem Projekt an einem Problem fest, das ich mit dem nachfolgenden Beispiel verdeutlichen möchte. Eine Zahl wird über zwei Button hoch- bzw. runtergezählt:
	
	
	
		
		
		
			
		
		
	
	
		
	
Wird ein Button länger gedrückt, so startet ein Timer, der automatisch weiter zählt. Lasse ich den Button danach wieder los, so wird in der Sub ButtonHochRunter_Up der entsprechende Button gesperrt, falls Null oder der Maximalwert erreicht ist. Das Problem ist, dass der Button in diesem Fall in gedrückter Form verharrt:
	
	
	
		
		
		
		
	
	
		
	
Ich habe es schon mit DoEvents und mit Invalidate versucht - beides bringt aber nichts. Kann mir da jemand weiterhelfen?
Hier der Code:
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
und hier noch mal das gesamte Beispiel:
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
			
			Ich hänge in meinem Projekt an einem Problem fest, das ich mit dem nachfolgenden Beispiel verdeutlichen möchte. Eine Zahl wird über zwei Button hoch- bzw. runtergezählt:
	Wird ein Button länger gedrückt, so startet ein Timer, der automatisch weiter zählt. Lasse ich den Button danach wieder los, so wird in der Sub ButtonHochRunter_Up der entsprechende Button gesperrt, falls Null oder der Maximalwert erreicht ist. Das Problem ist, dass der Button in diesem Fall in gedrückter Form verharrt:
	Ich habe es schon mit DoEvents und mit Invalidate versucht - beides bringt aber nichts. Kann mir da jemand weiterhelfen?
Hier der Code:
			
				B4X:
			
		
		
		Sub ButtonHochRunter_Up
   Timer1.Enabled = False
   
   DoEvents                ' bringt nichts!
   ButtonRunter.Invalidate ' bringt nichts!
   ButtonHoch.Invalidate   ' bringt nichts!
   
   If Zahl < 1 Then ButtonRunter.Enabled = False Else ButtonRunter.Enabled = True
   If Zahl < ZahlMax Then ButtonHoch.Enabled = True Else ButtonHoch.Enabled = False
   
End Sub
	und hier noch mal das gesamte Beispiel:
			
				B4X:
			
		
		
		'Activity module
Sub Process_Globals
   Dim Timer1 As Timer
   Timer1.Initialize("Timer1", 100)
   Dim Zahl, ZahlMax As Int
   Dim TimerArt As String
   
End Sub
Sub Globals
   Dim ButtonHoch, ButtonRunter As Button
   Dim Label1 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("Layout01")   'Controls laden
   Zahl = 0
   ZahlMax = 10
   Label1.Text = Zahl
   ButtonRunter.Enabled = False
End Sub
Sub Timer1_Tick()
   Select TimerArt
   Case "Hoch"
      If Zahl < ZahlMax Then
         Zahl = Zahl +1
         Label1.Text = Zahl
      End If      
   Case "Runter"
      If Zahl > 0 Then
         Zahl = Zahl -1
         Label1.Text = Zahl
      End If      
   End Select
End Sub
Sub ButtonHochRunter_Up
   Timer1.Enabled = False
   
   DoEvents                ' bringt nichts!
   ButtonRunter.Invalidate ' bringt nichts!
   ButtonHoch.Invalidate   ' bringt nichts!
   
   If Zahl < 1 Then ButtonRunter.Enabled = False Else ButtonRunter.Enabled = True
   If Zahl < ZahlMax Then ButtonHoch.Enabled = True Else ButtonHoch.Enabled = False
End Sub
Sub ButtonHochRunter_LongClick
   Dim B As Button
   B = Sender
   
   TimerArt = B.Tag
   Timer1.Enabled = True
   
End Sub
Sub ButtonHochRunter_Click
   Dim B As Button
   B = Sender
   Dim x As Int
   
   Select B.Tag
   Case "Hoch"
      If Zahl < ZahlMax Then
         Zahl = Zahl +1
         Label1.Text = Zahl
      End If      
   
   Case "Runter"
      If Zahl > 0 Then
         Zahl = Zahl -1
         Label1.Text = Zahl
      End If      
      
   End Select
   
   If Zahl < 1 Then ButtonRunter.Enabled = False Else ButtonRunter.Enabled = True
   If Zahl < ZahlMax Then ButtonHoch.Enabled = True Else ButtonHoch.Enabled = False
End Sub