Sunflower84 Geschrieben 3. August 2006 Geschrieben 3. August 2006 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 Zitieren
Amstelchen Geschrieben 3. August 2006 Geschrieben 3. August 2006 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 Zitieren
Sunflower84 Geschrieben 3. August 2006 Autor Geschrieben 3. August 2006 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 Zitieren
k4fu Geschrieben 4. August 2006 Geschrieben 4. August 2006 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 Zitieren
k4fu Geschrieben 4. August 2006 Geschrieben 4. August 2006 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 Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
k4fu Geschrieben 4. August 2006 Geschrieben 4. August 2006 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 Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 Sorry, da hast du mich falsch verstanden. Der Timer soll während er läuft und wenn er zu Ende ist mit einer Tastenkombination von vorne gestartet werden. Sorry nochmal. Lg Sunflower84 Zitieren
k4fu Geschrieben 4. August 2006 Geschrieben 4. August 2006 was heißt von vorne gestartet? das man wieder die vollen 15 minuten hat? dann brauchst du doch nur deine variablen zurückzusetzen Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 Ja, genau. Mein Problem ist es das mit Tastenkombination zu lösen. Einfach per Tastenkombination den Timer wieder auf 15 Minuten. Ich glaube ich stehe gerade etwas auf der Leitung. Lg Sunflower84 Zitieren
k4fu Geschrieben 4. August 2006 Geschrieben 4. August 2006 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 Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
k4fu Geschrieben 4. August 2006 Geschrieben 4. August 2006 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... Zitieren
grueni Geschrieben 4. August 2006 Geschrieben 4. August 2006 Das Tastaturereignis liegt in deinem Timer-Fenster...wenn eine andere Anwendung den Focus hat, kriegt das der Timer also gar nicht mit. Schau dir mal dieses Beispiel an: http://dotnet.mvps.org/vb/articles/keyboardhook/ Ich denke, das ist das, was du brauchst. Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
grueni Geschrieben 4. August 2006 Geschrieben 4. August 2006 ... Aber was muss ich dort rein schreiben damit ich das Programm wieder aufrufen kann? Lg Sunflower Ich würde es mit "shell" versuchen. Beispiel: http://www.vbarchiv.net/commands/Shell.php Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
grueni Geschrieben 4. August 2006 Geschrieben 4. August 2006 Wenn ich dich richtig verstanden habe, dann wird dein Programm zwar gestartet, aber der Timer muß dann mit einer Tastenkombination (bzw. Mausklick) extra gestartet werden. In dem Fall würde ich es mit "sendkey" versuchen. Beispiel: http://www.aboutvb.de/khw/artikel/khwsendkeys.htm Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
grueni Geschrieben 4. August 2006 Geschrieben 4. August 2006 Das mit sendkeys hab ich so gemeint, daß man den Start-Button per Tastatur-Ereignis auslöst. Aber was spricht dagegen, den Timer gleich beim Programmstart zu starten? Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
k4fu Geschrieben 4. August 2006 Geschrieben 4. August 2006 weis zwar jetzt nicht ganz genau was du meinst, aber warum rufst du den timer nicht in dem moment auf, wo du das andere fenster schließt? unload timer1 Zitieren
Sunflower84 Geschrieben 4. August 2006 Autor Geschrieben 4. August 2006 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 Zitieren
Empfohlene Beiträge
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.