Timer Sonstiges

  • Hallo, ich probiere schon eine ganze weile hin und her.

    Ich hatte sowas Ähnliches schoneinmal ich habe den Code mir mal aus dem Internet geholt.

    Ich möchte ein Timer so wie der hier mit Stunden, Minuten und Sekunden.

    Alles schön und gut, aber dieser wird mit einem Button gestartet. Ich möchte diesen aber mit der Hotkey taste F7 Starten.

    Ich habe einiges probiert leider verstehe ich nicht richtig wie überhaupt der Code aufgebaut ist, weil ich mich mit Timer noch nicht so beschäftigt habe, aber vielleicht kann mir einer Licht ins dunkle bringen?^^

    Überarbeitet

    While 1

    ;Switch GUIGetMsg()

    ;Case $go

    If $HotkeyF7Zaehler = 2 Then

    $running = Not $running

    GUICtrlSetData($go, $button[$running])

    $end = Convert($input)

    $timer=TimerInit()

    EndIf

    ; Case Else

    ; EndSwitch

    If $running And TimerDiff($timer)>=$end Then

    $running = False

    GUICtrlSetData($go, $button[$running])

    MsgBox(0, 'Info', 'Timer End')

    ;Call ("MainMenu")

    Call ("Jump2")

    EndIf

    Ich weiß einige werden jetzt sagen was ist das den für ein durcheinander, ich habe alles versucht und stehe vor einem Rätsel. Das Hauptproblem in dem Code wird hier liegen $running = Not $running aber wie gesagt ich weiß nicht genau wie so ein Timer Code richtig gebaut wird ich fand dieses Skript so perfekt, weil es fast alles beinhaltet, was ich brauche.

    Ich lade das Original auch mal hoch

    Original

    Wie gesagt es soll mit einem Hotkey gestartet werden der Button kann von mir aus bleiben damit sehe ich, ob es läuft oder nicht.

    Gruß Whitey

  • Falls Du einen sogenannten "Countdown Timer" suchst, dann probiere mal dies :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Falls Du einen sogenannten "Countdown Timer" suchst, dann probiere mal dies :

    Hi, danke für deine Idee aber das mit den Input Feldern so wie oben ist am besten ich möchte nur das die Aktion mit Hotkey F7 gestartet wird.

    Dazu muss ich sagen, dass ich es so gemacht habe das, wenn F7 gedrückt wurde +1 für $HotkeyF7Zaehler gezählt wird und wenn $HotkeyF7Zaehler = 2 dann Starte den Timer und das klappt nicht richtig das geht Start, Stop, Start, Stop, Start, Stop

  • Wie wäre es wenn du mal den ganzen relevanten Code (also setzen des Kotkeys, die Funktionen selber etc.) postest (idealerweise hier als AutoIt Code anzeigen lassen).

    Dann knnen wir viel besser schauen was du falsch machst.

    Dein Auszug oben sieht verwirrend aus.

  • Das ist der Code von Aufnahme1 und wenn er losläuft, macht er Start Stop Start Stop... er soll aber normal durchlaufen.

    Siehe oben Original, bloß dort wird der Timer mit einem Button gestartet :-/

    Das die While mit Call ("Jump1") nochmal angesprochen wird ist richtig, weil ich nachdem ich den Timer erstellt habe nochmal den Weg verlasse. Dient dazu das ich später wieder in die While hinein komme.

    PS ich habe den Code nochmal etwas ausgemistet ^^ jetzt ist es etwas übersichtlicher.

  • Mein erster Blick:

    1. Warum rufst du Funktionen mit "Call" auf, das ist nur nötig, wenn der Funktionsname (als String) "generiert" wird.

    2. Variablen in einer Funktion sind immer Local zu definieren, brauchst du sie auch außerhalb, gehört die Definition auch nach draußen:

    3. Hotkeyset, gehört an den Anfang des Scriptes.

    4. Du erstellst jedes mal einen Button/Gruppe/inputs, wenn die Funktion "Aufnahme1 aufgerufen wird. Du solltest ihn lieber in der GUI erstellen und ausblenden und hier nur wieder einblenden!

    5. du setzt den Zähler nie runter, bedeutet mit jedem Aufruf von "Jump1" wird es 1 mehr. Damit passt deine Abfrage spätestens beim 3. mal nicht mehr (startest mit 0) wobei du die 1 aaktuell auch nicht abfragst.

    Einmal editiert, zuletzt von Moombas (12. Juni 2023 um 11:35)

  • Ich hab das ganze mal ein wenig überarbeitet und mein test war Erfolgreich:

  • Ich hab das ganze mal ein wenig überarbeitet und mein test war Erfolgreich:

    danke, aber der Timer wird auch mit dem Button gestartet und wenn ich F7 drücke öffnet sich ein neues Fenster darüber?

  • Hier die leicht abgeänderte Version (jetzt funktioniert auch das F7):

    (Dein Style macht irgendwie keinen Sinn (es gibt kein Flag, das 0x00C80000 enthält), daher hab ich es mal geändert)

    8 Mal editiert, zuletzt von Moombas (12. Juni 2023 um 15:43)

  • Ich empfehle dir halt Dringend Variablen so wenig wie möglichGlobal zu definieren und (wenn nicht nötig) kein Call für den Aufruf einer Funktion zu benutzen.

    Auch verwende lieber Bitor() um die Flags zu setzen, dann weiß man später noch, was du da gesetzt hast, mit dem puren Hex-Wert kann später keiner mehr was anfangen bzw. muss sich das mühsam zusammen suchen.

    Und das was ich in meinem Code hier gemacht habe (über Kommentare bei den globalen Variablen) kannst du diese dort dennoch "Gruppieren" und weißt somit wozu du diese brauchst.

    Der Trick für den Hotkey isst ja eigentlich nur, das dieser einen manuellen Click auf den Button simuliert, sprich: Wichti war nur das der Button an sich funktioniert.

    Ich hoffe du hast den Code auch verstanden den ich da zusammen gezimmert hat (mit Sicherheit noch weiter optimierbar aber dafür würde das restliche Skript evtl. fehlen bzw. ich wollte es dann nicht zu sehr von deinem ursprünglichen Code bringen).

  • Moin!

    WhiteHorse:

    Nur als weitere Alternative: Du kannst die Start/Stop-Routine in eine eigenen Funktion auslagern, die dann solwohl per Button als auch per Hotkey aufgerufen werden kann:


    Moombas:

    Zitat

    (Dein Style macht irgendwie keinen Sinn (es gibt kein Flag, das 0x00C80000 enthält), daher hab ich es mal geändert)

    AutoIt
    Global Const $WS_CAPTION = 0x00C00000
    Global Const $WS_SYSMENU = 0x00080000
    Global Const $WS_OVERLAPPEDWINDOW = BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_OVERLAPPED, $WS_SYSMENU, $WS_THICKFRAME)

    0x00C8000 entspricht damit $WS_OVERLAPPEDWINDOW - $WS_MAXIMIZEBOX - $WS_MINIMIZEBOX - $WS_THICKFRAME - $WS_OVERLAPPED (0).

  • Ah ok, dann war ich da falsch beim Zusammensetzen.

    Noch ein Grund für:

    Zitat

    Auch verwende lieber Bitor() um die Flags zu setzen, dann weiß man später noch, was du da gesetzt hast, mit dem puren Hex-Wert kann später keiner mehr was anfangen bzw. muss sich das mühsam zusammen suchen.

  • Hallo, danke für die Hilfe

    Ich empfehle dir halt Dringend Variablen so wenig wie möglichGlobal zu definieren und (wenn nicht nötig) kein Call für den Aufruf einer Funktion zu benutzen.

    Auch verwende lieber Bitor() um die Flags zu setzen, dann weiß man später noch, was du da gesetzt hast, mit dem puren Hex-Wert kann später keiner mehr was anfangen bzw. muss sich das mühsam zusammen suchen.

    Und das was ich in meinem Code hier gemacht habe (über Kommentare bei den globalen Variablen) kannst du diese dort dennoch "Gruppieren" und weißt somit wozu du diese brauchst.

    Der Trick für den Hotkey isst ja eigentlich nur, das dieser einen manuellen Click auf den Button simuliert, sprich: Wichti war nur das der Button an sich funktioniert.

    Ich hoffe du hast den Code auch verstanden den ich da zusammen gezimmert hat (mit Sicherheit noch weiter optimierbar aber dafür würde das restliche Skript evtl. fehlen bzw. ich wollte es dann nicht zu sehr von deinem ursprünglichen Code bringen).

    Ja, das mit dem Call hab ich nun auch gelernt, dachte so konnte man immer eine Funktion aufrufen.

    aber wenn z.b

    StartTest ()

    Func StartTest ()

    Genügt dann weiß ich Bescheid danke für deinen Tipp, das mit dem (Flag 0x00C80000) ist nicht von mir wie gesagt ich habe das Skript aus dem Internet und hab es nur kopiert, weil es so gut gepasst hatte.

    Wenn ich ehrlich bin, weiß ich nicht einmal was ein Flag ist ^^

    Lerne auch nur Stück für Stück dazu :D

    Velted auch dir danke ich für deine Hilfe :)

  • @Moombas kannst du mir mal bitte noch erklären warum meine ini Datei nicht mehr geht, es steht zwar was in der ini aber die Input Felder werden nicht von der ini übernommen. Wenn jetzt aber "GUICtrlSetData($input1[3], IniRead($ini, "3","Sekunden", 2)) ;ggf. den Defaultwert (2) (wenn die Ini nicht gefunden/gelesen werden kann) ändern"

    darin steht, trägt er die 2 ein so wie es im Code steht aber in der ini steht was anderes und die Zahlen trägt er nicht in die Input Felder.

    Ich kann den fehler jetzt auch nicht finden. ?(

  • Wenn jetzt aber "GUICtrlSetData($input1[3], IniRead($ini, "3","Sekunden", 2)) ;ggf. den Defaultwert (2) (wenn die Ini nicht gefunden/gelesen werden kann) ändern" darin steht, trägt er die 2 ein so wie es im Code steht aber in der ini steht was anderes und die Zahlen trägt er nicht in die Input Felder.

    Hier ein kleines Demoprogramm für eine baugleiche .ini-Datei :

    timer.ini (nur zum Test - die Endung .ini ist als Dateianhang leider nicht zulässig) :

    Code
    [timer]
    Stunden=12 
    Minuten=7
    Sekunden=6

    WhiteHorse :

    1. Was kommt heraus, wenn Du deine .ini-Datei verwendest ?

    2. Prüfe mal die Codierung deiner .ini-Datei :

    Sollte diese z.B. als UTF-8 mit BOM codiert sein, dann wird der erste Eintrag (hier der [Sektionsname]) und damit alle zugehörigen key=value Einträge überlesen.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • @Moombas kannst du mir mal bitte noch erklären warum meine ini Datei nicht mehr geht, es steht zwar was in der ini aber die Input Felder werden nicht von der ini übernommen. Wenn jetzt aber "GUICtrlSetData($input1[3], IniRead($ini, "3","Sekunden", 2)) ;ggf. den Defaultwert (2) (wenn die Ini nicht gefunden/gelesen werden kann) ändern"

    darin steht, trägt er die 2 ein so wie es im Code steht aber in der ini steht was anderes und die Zahlen trägt er nicht in die Input Felder.

    Ich kann den fehler jetzt auch nicht finden. ?(

    Hast du denn $ini richtig gesetzt?

    Bei meinem Code wäre das in Zeile 9, wo du den Dateinamen & Pfad natürlich noch anpassen musst.

    Und ändere in Zeile 20 (bei meinem Code) BitOR($WS_VISIBLE, $WS_OVERLAPPEDWINDOW) in BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_OVERLAPPED, $WS_SYSMENU, $WS_THICKFRAME) (Danke nochmal Velted für das aufschlüsseln) damit du später weißt was da gemacht wurde.

    2 Mal editiert, zuletzt von Moombas (16. Juni 2023 um 09:11)

  • ok, nochmal vielen Dank :)

    Jetzt geht es, den Pfad von der ini war richtig alles gut ^^

    Nur wenn ich das in mein Hauptprogramm oder Skript, egal wie man es nennt, einfüge und ich die Aufnahme1 aufrufe, gebe ich meine Zeit ein usw.

    Jetzt sagt er mir bei Minuten und Sekunden gleich nachdem ich den Timer gestartet habe, ist zu Ende. Obwohl die Zeit eigentlich noch nicht vorbei ist :/

    bei den Stunden läuft er länger, nur Minuten und Sekunden ist er nach 2 sec durch

    obwohl 1 min und 1 sec darin steht :|

    bei dem Test Code den du mir geschickt hast Moombas geht es, im Hauptcode geht es nicht.