Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo

Ich habe einen Countdown. Ich möchte gerne das dieser Countdown per Tastenkombination von vorne anfängt.

Wie mache ich denn das ?

frmTimer:


Option Explicit


Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long


Private Const WIN_LOGOFF = 0


Dim s As Integer

Dim m As Integer

Dim h As Integer

Dim sec As Integer

Dim min As Integer

Dim hour As Integer

Dim Abbruch As Boolean

Dim frmontop As Double



Private Sub Form_Load()

  ' Minimieren/Maximieren Buttons zur

  ' Laufzeit anzeigen

  MinMaxButton Me


  ' Fenster immer im Vordergrund anzeigen

  TopWindow Me.hwnd

End Sub


Private Sub close_Click()

Dim F As Form


Abbruch = True


For Each F In Forms

  Unload F

  Set F = Nothing

Next



End Sub


Private Sub cmdStartTimer_Click()


Abbruch = False

Timer1.Interval = 1000

Timer1.Enabled = True

'fester Wert eintragen

s = 0

m = 1

h = 0

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

Do

If Abbruch = True Then Exit Do

DoEvents

cmdStartTimer.Enabled = False

If h = 0 And m = 3 And s = 0 Then

     MsgBox "15 minutes allowance are over. Please finish your work now.", vbOKOnly + vbSystemModal

 End If

Loop Until s = 0 And m = 0 And h = 0

Label1.ForeColor = vbRed

'MsgBox (NameC1 & "abgelaufen")

Timer1.Enabled = False

'Call ExitWindowsEx(WIN_LOGOFF, &HFFFF)

frmLock.Visible = True

Unload Me

End Sub


Private Sub Label9_Click()


End Sub


Private Sub Timer1_Timer()

s = s - 1

If s < 0 And m > 0 Then

m = m - 1

s = 59

ElseIf m <= 0 And h > 0 And s < 0 Then

h = h - 1

m = 59

s = 59

End If

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

End Sub


Ich habe was gefunden aber nur mit ner MsgBox:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


 If Shift = vbCtrlMask And KeyCode = vbKeyQ Then

   MsgBox "Strg - Taste + Q wurde gedrückt"

 End If

Kann ich da ansatt der MsgBox auch die Form aufrufen damit der Timer wieder von vorne anfängt oder klappt das so nicht?

lg

Sunflower84

Geschrieben
Kann ich da ansatt der MsgBox auch die Form aufrufen damit der Timer wieder von vorne anfängt oder klappt das so nicht?

das Timer-steuerelement wirft ja in diesem sinne nur in abständen, die .Interval vorgibt, den _Timer event.

d.h. ich verstehe das so, dass du eigentlich in der ereignisprozedur Timer1_Timer alle variablen auf 0 stellst. somit ist dein "timer" eigentlich resettet.

eine sauberere lösung wäre allenfalls, das in ein klassenmudul zu packen und eine eigene timerklasse zu erstellen, die ihre eigenschaften und methoden anbietet.

s'Amstel

Geschrieben

Der Countdown ist für ein Internetcafe. Da jeder Benutzer nur 15 Minuten Zeit hat. Den Countdown starte ich mit einen Button. Kann ich nicht den Button per Tastenkomibnation aktivieren?

Lg

Sunflower84

Geschrieben

doch...

ich stell mir das in etwa so vor:



Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyf2

                    'Timer starten

            End Select

    End Select

End Sub


oder moment:

ich weis nicht genau wo dein problem liegt...

wenn du den timer starten willst, dann füge statt der msgbox einfach ein timer.interval ein

vor dem aufruf schaust du halt wie spät es ist...

im timer zählst du diese zeit + 15 minuten...

wenn die zeit erreicht ist --> timer stop; programm ende

Geschrieben

ok

das musst du in dein frmLock einbaun, dann gehts:

in diesem fall wäre die tastenkombination shift & f2

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyF2

                    Form1.Show

                    Unload Me

                    Call Form1.cmdStartTimer_Click

            End Select

    End Select

End Sub

Geschrieben

Hallo

Erstmal danke für eure Hilfe. Aber leider klappt es so nicht.

Was ich vielleicht noch dazu sagen muss, wenn die Zeit abgelaufen ist erscheint ein Fullscreen der erst wieder weg geht mit einem Passwort. Hier mal mein kompletter Code.

frmTimer:


Option Explicit


Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long

Private Const WIN_LOGOFF = 0


Dim s As Integer

Dim m As Integer

Dim h As Integer

Dim sec As Integer

Dim min As Integer

Dim hour As Integer

Dim Abbruch As Boolean

Dim frmontop As Double



Private Sub Form_Load()

  ' Minimieren/Maximieren Buttons zur

  ' Laufzeit anzeigen

  MinMaxButton Me


  ' Fenster immer im Vordergrund anzeigen

  TopWindow Me.hwnd

End Sub


Private Sub close_Click()

Dim F As Form


Abbruch = True


For Each F In Forms

  Unload F

  Set F = Nothing

Next



End Sub


Private Sub cmdStartTimer_Click()


Abbruch = False

Timer1.Interval = 1000

Timer1.Enabled = True

'fester Wert eintragen

s = 0

m = 1

h = 0

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

Do

If Abbruch = True Then Exit Do

DoEvents

cmdStartTimer.Enabled = False

If h = 0 And m = 3 And s = 0 Then

     MsgBox "15 minutes allowance are over. Please finish your work now.", vbOKOnly + vbSystemModal

 End If

Loop Until s = 0 And m = 0 And h = 0

Label1.ForeColor = vbRed

'MsgBox (NameC1 & "abgelaufen")

Timer1.Enabled = False

'Call ExitWindowsEx(WIN_LOGOFF, &HFFFF)

frmLock.Visible = True

Unload Me

End Sub


Private Sub Label9_Click()


End Sub


Private Sub Timer1_Timer()

s = s - 1

If s < 0 And m > 0 Then

m = m - 1

s = 59

ElseIf m <= 0 And h > 0 And s < 0 Then

h = h - 1

m = 59

s = 59

End If

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

End Sub



[COLOR="Red"]frmLock:[/COLOR]

[CODE]



Private Sub Command1_Click()

If Text1.Text = "edl2005" Then 'Passwort OK?

            Timer1.Interval = 0

            Timer1.Enabled = False

            FormOnTop Me.hwnd, False

            DestroyWindow Me.hwnd

            Unload Me

        End If

End Sub


Private Sub Form_Load()

    Timer1.Interval = 1

    Timer1.Enabled = True

    Me.WindowState = vbMaximized

    Me.Move 0, 0, Screen.Width, Screen.Height

    FormOnTop Me.hwnd, True

End Sub



Private Sub Timer1_Timer()

    'BringWindowToTop (Me.hWnd)

    FormOnTop Me.hwnd, True

End Sub



Und noch ein Modul.

Ich hoffe ihr könnt mir helfen, da ich es für die Firma machen muss und im Moment nicht mehr weiter weiss.

Lg

Sunflower84

Geschrieben

ich hab den obrigen code (form1 und frmlock) getestet und bei mir hats geklappt:

als zeit vorbei war konnte ich mit shift und f2 wieder den timer neu starten

mach mal n neues projekt und kopier das hier rein:

form1:

Button: cmdStartTimer

Button: close

Label: Label1

Timer: Timer1


Option Explicit


Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long


Private Const WIN_LOGOFF = 0


Dim s As Integer

Dim m As Integer

Dim h As Integer

Dim sec As Integer

Dim min As Integer

Dim hour As Integer

Dim Abbruch As Boolean

Dim frmontop As Double



Private Sub Form_Load()

  ' Minimieren/Maximieren Buttons zur

  ' Laufzeit anzeigen

  'MinMaxButton Me


  ' Fenster immer im Vordergrund anzeigen

  'TopWindow Me.hWnd

End Sub


Private Sub close_Click()

Dim F As Form


Abbruch = True


For Each F In Forms

  Unload F

  Set F = Nothing

Next



End Sub


Public Sub cmdStartTimer_Click()


Abbruch = False

Timer1.Interval = 1000

Timer1.Enabled = True

'fester Wert eintragen

s = 0

m = 1

h = 0

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

Do

If Abbruch = True Then Exit Do

DoEvents

cmdStartTimer.Enabled = False

If h = 0 And m = 3 And s = 0 Then

     MsgBox "15 minutes allowance are over. Please finish your work now.", vbOKOnly + vbSystemModal

 End If

Loop Until s = 0 And m = 0 And h = 0

Label1.ForeColor = vbRed

'MsgBox (NameC1 & "abgelaufen")

Timer1.Enabled = False

'Call ExitWindowsEx(WIN_LOGOFF, &HFFFF)

frmLock.Visible = True

Unload Me

End Sub


Private Sub Label9_Click()


End Sub


Private Sub Timer1_Timer()

s = s - 1

If s < 0 And m > 0 Then

m = m - 1

s = 59

ElseIf m <= 0 And h > 0 And s < 0 Then

h = h - 1

m = 59

s = 59

End If

Label1.Caption = Format(h & " :" & m & " :" & s, "Long Time")

End Sub

frmlock

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyF2

                    Form1.Show

                    Unload Me

                    Call Form1.cmdStartTimer_Click

            End Select

    End Select

End Sub

Geschrieben
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


    Select Case Shift

        'wenn shift gedrueckt

        Case 1

            Select Case KeyCode

                'wenn f2 gedrueckt

                Case vbKeyF2

                    m = 15

                    s = 0

            End Select

    End Select



End Sub

Geschrieben

Jetzt geht es zwar aber nur solange ich an meinem PC nichts mache. Der Timer drängt sich ja immer in den Vordergrund. Damit der Benutzer im Internetcafe immer sieht wieviel Zeit er noch hat. Doch sobald ich den Browser starte reagiert er nicht mehr auf die Tastenkombination.

Lg

Sunflower

Geschrieben

naja weil das programm ja nicht mehr im vordergrund ist...

wenn du ein key down ereignis hast, dass für dieses programm gelten soll und du die taste im browser drückst, kriegt dein programm nix davon mit...

btw warum machst du deine zeituhr so umstaendlich?

nimm doch einen dtpicker her

der zählt alles automatisch und der gesamte code beschränkt sich auf eine zeile...

Geschrieben

Das mit den Hooks ist eine gute Idee.

Wenn ich das mit einer If prüfe ob z.B die Alt Taste gedrückt worden ist kann ich das dann so schreiben? Was schreibe ich dann aber ins Else?

If CBool(GetAsyncKeyState(VK_MENU) And &H8000) Then

m = 15

s = 0

Lg

Sunflower

Geschrieben

Habs hin bekommen. Das mit den Hooks ist wirklich eine schöne Sache.

Ich würde auch gern per Tastenkombination das komplette Programm aufrufen können. Also wenn die Zeit abgelaufen ist wird er ja einfach beendet. Danach würde ich ihn gern per Tastenkombi aufrufen.

Habs mir so gedacht z.B mit Shift:


If CBool(GetAsyncKeyState(VK_SHIFT) And &H8000) Then


End If


Aber was muss ich dort rein schreiben damit ich das Programm wieder aufrufen kann?

Lg

Sunflower

Geschrieben

Ich habe das mit der Shell versucht. Es funktioniert aber nur teilweise. Ich habe ja noch einen Start Button mit dem ich den Timer starte. Nach dem starten kann ich mit der Tastenkombination ALT den Timer von vorne anfangen lassen. Das mit der Shell funktioniert nur nachdem ich den Start Button betätigt habe. Wenn die Zeit abgelaufen ist wird aber das komplette Programm beendet. Dafür bräuchte ich dann eine Tastenkombination um den Timer wieder aufzurufen.

Lg

Sunflower84

Geschrieben

Also ich starte zuerst die exe. Dann betätige ich den Button start. Nach dem betätigen des Start Buttons fängt der Countdown (15 Min) an und der Button wird deaktiviert damit der Benutzer des Intercafes den Timer nicht von vorne starten kann. Wenn aber jemand schon früher geht muss der Timer wieder von vorne gestartet werden. Dafür habe ich ja schon eine Tastenkombination. Wenn aber der Benutzer bis zum Ende bleibt kommt ein Vollbild, dass man nicht weg klicken kann sondern nur mit Passwort verschwindet. Danach ist aber das komplette Programm beendet. Deshalb brauche ich eine Tastenkombi wo ich das komplette Programm wieder aufrufen kann.

Wenn ich mir die Definition der sendkeys durchlese dann ist das nicht das was ich suche, oder habe ich da was falsch verstanden?

Lg

Sunflower

Geschrieben

Das brauch ich ja aber nicht. Das man beim ersten mal den Start Button drückt ist ja kein Problem. Mir ist da was anderes eingefallen wie man es machen kann. Wenn das Vollbild kommt muss man ja ein Passwort eingeben damit es wieder verschwindet. Danach ist ja der ganze Timer beendet. Wie kann ich es machen das man nach der Passworteingabe das Vollbild zwar verschwindet aber der Timer wieder von vorne beginnt, oder das Programm erst garnicht beendet wird damit man den Timer wieder starten kann?

Hab keine Ahnung was ich da ändern muss.

Lg

Sunflower84

Geschrieben

Hier schließe ich das Fenster mit einem klick wenn das Passwort eingegeben worden ist:


Private Sub Command1_Click()

If Text1.Text = "edl2005" Then 'Passwort OK?

            Timer1.Interval = 1

            Timer1.Enabled = False

            FormOnTop Me.hwnd, False

            DestroyWindow Me.hwnd

            Unload Me


        End If

End Sub

Nach dem Unload Me muss ich ja dann wieder den Timer von der anderen Form aufrufen, oder?

Wenn ja wie ruf ich die denn auf?

Lg

Sunflower84

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...