ok ich weiß warum, es muss an meiner Tastatur liegen ich habe mal ein anderen HotKey benutzt und jetzt geht es, vielen Dank!
Beiträge von WhiteHorse
-
-
sorry, aber der macht bei mir sobald ich F7 drücke das selbe Fenster nochmal auf ist das nur bei mir so?
(er öffnet die GUI ein zweites mal)
-
Ich hab das ganze mal ein wenig überarbeitet und mein test war Erfolgreich:
AutoIt
Alles anzeigenOpt('MustDeclareVars', 1) #include <GUIConstantsEx.au3> ;GUI Global $Aufnahme, $go, $input[4] ;Globale Variablen Global Const $ini = 'anyinifile.ini' ;trag hier die Inifile ein für deinen Timer HotKeySet ("{F7}", "Jump1") _CreateTimerGUI() ;Beispielfunktion um die GUI zu erstellen, nur deinen geposteten Part gesetzt, nicht den Rest der noch erforderlich wäre! Jump1() ;~ MainMenu() Func _CreateTimerGUI() Local $name[4]=[3, 'Stunden','Minuten','Sekunden'] $input[0] = $name[0] $Aufnahme = GUICreate('Aufnahme1', 370, 70, Default, Default, 0x10C80000) For $i=1 To $name[0] GUICtrlCreateGroup($name[$i], (5+70)*$i, 5, 70, 40, Default) $input[$i] = GUICtrlCreateInput('', (7+70)*$i, 20, 60, 20, 1) Next $go = GUICtrlCreateButton('Start', 75, 45, 220, 20) EndFunc Func Jump1() Local $end, $timer Local $running = False Local $Button[2]=['Start','Stop'] GUISetState(@SW_SHOW, $Aufnahme) ;Achtung: Sektion angepasst, da alle Timerwerte in einer Sektion platz finden GUICtrlSetData($input[1], IniRead($ini, "Timer","Stunden" , 0)) ;ggf. den Defaultwert (0) (wenn die Ini nicht gefunden/gelesen werden kann) ändern GUICtrlSetData($input[2], IniRead($ini, "Timer","Minuten" , 0)) ;ggf. den Defaultwert (0) (wenn die Ini nicht gefunden/gelesen werden kann) ändern GUICtrlSetData($input[3], IniRead($ini, "Timer","Sekunden", 2)) ;ggf. den Defaultwert (2) (wenn die Ini nicht gefunden/gelesen werden kann) ändern While 100 If $running And TimerDiff($timer)>=$end Then $running = False GUICtrlSetData($go, $button[$running]) MsgBox ("", "Test", "Timer abgelaufen", "") EndIf Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUISetState(@SW_HIDE, $Aufnahme) ExitLoop Case $go If $running = False Then $running = True GUICtrlSetData($go, $button[$running]) $end = Convert($input) $timer = TimerInit() Else ; $running = False GUICtrlSetData($go, $button[$running]) EndIf EndSwitch WEnd GUISetState(@SW_HIDE, $Aufnahme) EndFunc Func Convert($array) Return 1000*(60*(60*(GUICtrlRead($array[1]))+GUICtrlRead($array[2]))+GUICtrlRead($array[3])) EndFunc
danke, aber der Timer wird auch mit dem Button gestartet und wenn ich F7 drücke öffnet sich ein neues Fenster darüber?
-
Code
Alles anzeigen$HotkeyF7Zaehler = 0 Call ("Aufnahme1") Func Aufnahme1 () Global $Aufnahme1 = GUICreate('Aufnahme1', 220, 70, Default, Default, 0x10C80000) Global $end Global $timer Global $running = True Global $input[3] Global $name[3]=['Stunden','Minuten','Sekunden'] Global $button[2]=['Start','Stop'] For $i=0 To 2 GUICtrlCreateGroup($name[$i], 5+70*$i, 5, 70, 40) $input[$i]=GUICtrlCreateInput('', 10+70*$i, 20, 60, 20, 1) Next ;GUICtrlSetData($input[0], IniRead($ini, "1","Stunden", "")) ;GUICtrlSetData($input[1], IniRead($ini, "2","Minuten", "")) ;GUICtrlSetData($input[2], IniRead($ini, "3","Sec", "")) Global $go=GUICtrlCreateButton('Start', 5, 45, 210, 20) Call ("Jump1") ;Call ("MainMenu") EndFunc Func Jump1 () HotKeySet ("{F7}", "Jump1") ;MIT F7 STARTET................................... $HotkeyF7Zaehler += 1 MsgBox ("", "YES", "+1 Weiter", "2") While 1 If $HotkeyF7Zaehler = 2 Then $running = Not $running ;[Problem muss an dieser Zeile hier liegen] Start Stop Start Stop.... GUICtrlSetData($go, $button[$running]) $end = Convert($input) $timer=TimerInit() EndIf If $running And TimerDiff($timer)>=$end Then $running = False GUICtrlSetData($go, $button[$running]) EndIf ;Switch GUIGetMsg() ;Case -3 ;GUISetState $Aufnahme1 @SW_HIDE ;GUIDelete($Aufnahme1) ;Call ("MainMenu") WEnd EndFunc Func Convert($array) Return 1000*(60*(60*(GUICtrlRead($array[0]))+GUICtrlRead($array[1]))+GUICtrlRead($array[2])) EndFunc
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.
-
Falls Du einen sogenannten "Countdown Timer" suchst, dann probiere mal dies :
AutoIt
Alles anzeigen; Quelle : https://www.autoitscript.com/forum/topic/127667-how-to-create-a-countdown-timer-in-autoit/#elControls_885650_menu ; - leicht modifiziert #include <WindowsConstants.au3> HotKeySet("{ESC}", _Terminate) HotKeySet("{F7}", _StartCountdown) Global $SS_CENTER, $_CountStartVal = 60000, $_Minutes, $_Seconds, $b_Running = False, $bInit = False $_GuiCountDown = GUICreate ( "CountDown...", 400, 150, @DesktopWidth/2 -200, @DesktopHeight/2 -75, $WS_EX_TOPMOST ) GUISetBkColor (0xA6CAF0) $TimeLabel = GUICtrlCreateLabel ( "F7=Start", 30, 10, 380, 100, $SS_CENTER ) GUICtrlSetFont ( -1, 50, 400 ) GUISetState ( ) WinSetOnTop ( $_GuiCountDown, "", 1 ) While 1 If Not $bInit Then $TimeTicks = TimerInit ( ) If $b_Running Then $bInit = True _Check ( ) EndIf Sleep (200) WEnd Func _Check ( ) $_CountStartVal -= TimerDiff ( $TimeTicks ) $TimeTicks = TimerInit ( ) Local $_MinCalc = Int ( $_CountStartVal / ( 60 * 1000 ) ), $_SecCalc = $_CountStartVal - ( $_MinCalc * 60 * 1000 ) $_SecCalc = Int ( $_SecCalc / 1000 ) If $_MinCalc <= 0 And $_SecCalc <= 0 Then GUISetBkColor ( 0xFF0000, $_GuiCountDown ) GUICtrlSetData ( $TimeLabel, "Bye !" ) Sleep ( 1000 ) ; If @Compiled Then Shutdown ( 13 ) Exit Else If $_MinCalc <> $_Minutes Or $_SecCalc <> $_Seconds Then $_Minutes = $_MinCalc $_Seconds = $_SecCalc GUICtrlSetData ( $TimeLabel, StringFormat ( "%02u" & ":" & "%02u", $_Minutes, $_Seconds ) ) If $_Minutes = 0 And $_Seconds <= 10 Then Beep ( 1200, 100 ) GUISetBkColor ( 0xA093FF, $_GuiCountDown ) EndIf EndIf EndIf EndFunc ;==> _Check ( ) Func _StartCountdown() $b_Running = True EndFunc ;==>_StartCountdown Func _Terminate() Exit 0 EndFunc ;==>Terminate
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
-
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
Code
Alles anzeigenGUICreate('timer', 220, 70, Default, Default, 0x10C80000) Dim $end, $timer, $running = False, $input[3], $name[3]=['Stunden','Minuten','Sekunden'], $button[2]=['Start','Stop'] For $i=0 To 2 GUICtrlCreateGroup($name[$i], 5+70*$i, 5, 70, 40) $input[$i]=GUICtrlCreateInput('', 10+70*$i, 20, 60, 20, 1) Next $go=GUICtrlCreateButton('Start', 5, 45, 210, 20) While 1 Switch GUIGetMsg() Case -3 Exit Case $go $running = Not $running GUICtrlSetData($go, $button[$running]) $end = Convert($input) $timer=TimerInit() Case Else If $running And TimerDiff($timer)>=$end Then $running = False GUICtrlSetData($go, $button[$running]) MsgBox(0, 'Info', 'Game Over') EndIf EndSwitch WEnd Func Convert($array) Return 1000*(60*(60*(GUICtrlRead($array[0]))+GUICtrlRead($array[1]))+GUICtrlRead($array[2])) EndFunc
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
-
Du verwendest doch den Befehl bereits beim Ini-Schreiben, musst ihn nur auf die Variable ändern und dort einfügen wo du es brauchst:
$TEST = GUICtrlRead($Input)
Danke das ist das was ich meinte, bedeutet wenn man was in eine Variable speichern will, schreibt man erst die Variable und dann was es macht, in dem Fall $TEST = GUICtrlRead($Input) und nicht GUICtrlRead($Input) = $TEST
vielen Dank, ich lerne immer mehr dazu
Gruß Whitey
-
Hauptsache es wird jetzt bei mir abgespeichert
Ich hätte aber noch eine Frage, ist es denn möglich zb. wenn ich was in einer ini abspeichere.
IniWrite($ini, "1", "Text", GUICtrlRead($Input)) In das Input feld schreibe ich jetzt zb. ein Text oder eine Zahl
Dieser Text oder diese Zahl soll aber in eine Variable $TEST gespeichert werden? Damit man sie später wieder abrufen kann.
-
Wenn GUICtrlRead($LadeImmer) = $GUI_CHECKED ist, dann schreibst Du den Wert 1 in die Sektion [001] der .ini und löscht die Sektion [002].
Andernfalls (also $GUI_UNCHECKED) schreibst Du den Wert 2 in die Sektion [002] der .ini und löscht die Sektion [001].
Bei If IniRead ... fragst Du aber nur die Sektion [001] ab. Diese wurde in Fall von $GUI_UNCHECKEDaber gelöscht. Es greift also die Vorbesetzung 1 und liefert immer CHECKED.
EDIT WhiteHorse :
Zudem liefert If IniRead($ini, "001","HarkenOn/Off Von Laden Immer", "1") Then ... immer TRUE, egal ob beim Value= "1" oder "2" steht.
In beiden Fällen ist der String besetzt, und nur das wird hier geprüft.
Warum verwendest Du überhaupt zwei Sektionen ([001] und [002]) ? Eine würde doch völlig ausreichen.
P.S. : Haken , nicht Harken
Ja habe ich auch gerade bemerkt , wenn 1 dann Haken rein, wenn nichts drin steht dann raus Sektionen [001] und wird somit gelöscht.
Beim Beenden den Wert der Checkbox in der INI speichern und beim Start diesen auswerten. Brauchst du keine extra Werte definieren.
Bsp.:
AutoIt
Alles anzeigen#include <GUIConstants.au3> $Ini = @ScriptDir & '\check_mich.ini' GUICreate('Test') $check = GUICtrlCreateCheckbox(' Check mich', 50, 20) GUISetState() ; INI auswerten beim Start If BitAND(IniRead($Ini, 'checkbox', 'status', $GUI_UNCHECKED), $GUI_CHECKED) Then GUICtrlSetState($check, $GUI_CHECKED) EndIf While GUIGetMsg() <> -3 WEnd ; nach Schließen der GUI Checkbox-Wert in INI speichern IniWrite($Ini, 'checkbox', 'status', GUICtrlRead($check))
Danke BugFix,Ich habe es mir zusammen gebaut mit deinen Code und es klappt
ich danke Euch!
Gruß Whitey
-
Hallo, ich beschäftige mich im Moment viel mit dem Thema ini.
Ich habe eine Checkbox erstellt, die eine Funktion hat, diese soll aber nach dem Schließen gespeichert bleiben, ich schreibe einfach ein wert ist ja egal was dort rein in diese ini Datei.
Dann sag ich, wenn ich starte, soll er abfragen, die ini zb. (Wenn 1 dann Harken rein, andernfalls wenn 2 dann Harken raus.) Das Problem ist jetzt, dass er immer den Harken setzt egal was drin steht, als würde er den Text was drin steht gar nicht interessieren.
Es ist bestimmt ein denk Fehler von mir, warum das nicht geht oder das ganze Konstrukt funktioniert so nicht mit dem Abspeichern von Werten in der ini
Code: in der while wenn ich auf die Checkbox klicke.
CodeCase $LadeImmer If GUICtrlRead($LadeImmer) = $GUI_CHECKED Then IniWrite($ini, "001", "HarkenOn/Off Von Laden Immer", "1") IniDelete ($ini, "002") Else IniWrite($ini, "002", "HarkenOn/Off Von Laden Immer", "2") IniDelete ($ini, "001") EndIf
Code: über der while wenn gestartet wird lesen der ini Datei
CodeIf IniRead($ini, "001","HarkenOn/Off Von Laden Immer", "1") Then GUICtrlSetState($LadeImmer, $GUI_CHECKED) ElseIf IniRead($ini, "001","HarkenOn/Off Von Laden Immer", "2") Then GUICtrlSetState($LadeImmer, $GUI_UNCHECKED) EndIf
PS der obere Quellcode klappt ohne Probleme aber der zweite ist das Hauptproblem
Gruß: Whitey
-
Geht auch automatisch (immer unter der Voraussetzung, dass ich die Doku richtig verstehe ) Also ohne Save Session > Restore Session. Bei mir läuft das schon immer so.
Setze: save.session=1
If you set save.session, the list of currently opened buffers will be saved on exit in a session file. When you start SciTE next time (without specifying a file name on the command line) the last session will be restored automatically.
Details unter: https://www.scintilla.org/SciTEDoc.html >> Suche nach save.session
danke
ergänze die User Config noch um save.session.advanced=1 und du solltest keine Probleme mehr haben
das ist ja noch besser
danke danke
-
Danke, ich weiß jetzt wie es geht.
Ich stelle mir das jetzt so ein wie ich das brauche, dann gehe ich auf File ---> Save Session und dann wenn ich das Programm laden möchte auf Load Session.
Jetzt ergibt das alles auch ein Sinn
Ich habe das normal abgespeichert, wieder geöffnet und mich gewundert, warum das nicht geht
ich danke euch für eure Geduld
-
das mit dem automatischen zuklappen ist etwas umständlich gelöst.
(andererseits ja gar nicht anders lösbar, da außerhalb der eigentlichen Code-Datei ja diese Informationen gespeichert werden müssen)
Das aut. zuklappen funktioniert nur in "sessions", die explizit als solche gespeichert und geladen werden.
Dazu die Einstellungen in der User Options File setzen und das zuklappen klappt.
Ich persönlich finde das aber sehr umständlich. Mit "Strg-Shift"- Klick auf ein "-" im Skript,
werden auch alle Folds zugeklappt.
Sollte dein Projekt über mehrere Dateien gehen und bestimmte Folds nur zugeklappt sein sollen, dann sieh dir das Thema "sessions" an und befolge,
was melba23 in dem Thread gepostet hat
Es würde nur bestimmte betreffen, also wäre das "sessions" verstehe aber immer noch nicht, wie ich das anwenden muss und wo ich das hineinschreiben muss.
So wie ich das gelesen habe, muss das in SciTe Config hinein.
Kann mir mal bitte einer einen Link schicken, wo ich das genau nachlesen kann und an welche stelle ich das setzen muss?
-
Kannst Du bitte Deine engl. Fundstellen hier verlinken?
Vielleicht können wir damit was anfangen.Scite and code foldingGood day, could someone tell me, is there a way to make Scite remember structure of all folded/unfolded code blocks(including nested b;ocks)? As you know, when…www.autoitscript.com -
Hallo,
Ich habe bis jetzt nur auf Englisch dieses Thema gefunden und bin nicht ganz schlau daraus geworden,
eigentlich ist es ganz einfach, nur schnalle ich das nicht ganz.
Ich möchte meine Codes zuklappen, aber nach einem Neustart ist dieser wieder aufgeklappt,
jetzt hatte ich was gelesen von.
session.bookmarks=1
session.folds=1
Ich weiß aber nicht wie ist das anwenden muss oder ob das überhaupt richtig ist.
Ich lade mal zwei Bilder hoch, wie ist das eigentlich meine.
Code offen ---> Code zu
Der Code soll so lange zubleiben, bis ich ihn wieder öffne.
Ich bin über jede Antwort und Hilfe dankbar.
ggf.
Wäre ein Beispiel code ganz hilfreich.
-
Ich bedanke mich bei euch für eure informationen ich werde es mir nochmal genau überlegen wenn würde ich mit den Tablet auf dem Schoß arbeiten
Ihr sagte da ja das ist da zu Problemen kommen kann
-
WhiteHorse : Ich denke die Displaygröße ist eher eine Frage des Geldes und des Komforts. Generell finde ich einen größeren Bildschirm angenehmer, muss aber halt auch "geschleppt" und bezahlt werden.
Beispiel: Lenovo IdeaPad bekommst du schon ab 400€ (10,5"), ein Xiamoi ab ~700€ (12,4") und bei 13 Zoll startest du schon bei knapp 1000€ (Lenovo Yoga). Die Surface sind dann nochmal gut 20-30% teurer.
Ok Danke, Ich denke ein 10 Zoll sollte reichen und ein neues würde ich mir nicht kaufen, ein gebrauchtes Tablet reicht mir völlig zu, viel als programmieren werde ich damit nicht machen.
Ich Danke euch für eure Information, wenn Ihr noch paar ideen Habt, höre ich mir diese gerne an.
Mit meinem Handy hätte ich das auch gemacht aber leider lässt sich autoit für Android nicht installieren was verständlich ist.
-
Hi WhiteHorse,
ich habe ein ähnliches Szenario mal ein paar Monate versucht/gelebt. Mein damaliges Tablet hatte eine Full-HD Auflösung und die Leistung reichte auch aus, AutoIt ohne Probleme nutzen zu können. Was mich allerdings davon abgebracht hatte, weil es mich sehr nervte war, dass ich ohne richtige Tastatur keinen Spaß an der Entwicklung von Programmen habe. Die Windows interne Tablet-Tastatur war für mich grausam in der Bedienung.
💡 Also mein Tipp: Wenn du dies tun möchtest, dann empfehle ich ein Tablet mit Tastatur. Bspw. "Microsoft Surface (Pro)" [...] da gibt es diverse gebrauchte und trotzdem leistungsstarke Modelle (je nach dem was du ausgeben willst und kannst).Viele Grüße
SvenVielen Dank für die info
Ein Tablet mit Tastatur hatte ich mir auch schon überlegt
Und was für eine Display größe empfiehlst du mir reichen 10 Zoll oder lieber 12 Zoll?
-
Hallo ich habe mal ein paar fragen,
Ich überlege schon eine weile mir ein gebrauchtes Tablet zu holen was auf Windows basiert, damit auch Autoit installiert werden kann.
Leider kenne ich keinen, der mir sein Tablet ausleihen könnte damit ich das überhaupt erstmal teste, denn ich würde gerne erstmal wissen wie das mit der Auflösung ist, am Ende ist das eine übelste Schinderei?.
Warum ich dieses gerne auf ein Tablet machen möchte, liegt dabei das ich öfters im Auto sitze und ich 1h Auto fahre bis wir an der Baustelle ankommen und ich da gerne die Zeit nutzen würde, um mein Programm weiterzuentwickeln.
Wenn schon jemand dieses macht oder gemacht hat, wie ist das mit der Auflösung. Ist das alles so klein, dass das eher eine Qual ist oder sagt ihr 10 Zoll reichen aus, um gut damit zu arbeiten?
Und lassen sich die Scripts auch ausführen oder eher weniger? ein Mouseclick X Y wird mit Sicherheit nicht gehen, aber das ist auch nicht der Sinn dabei.
Gruß Whitey
-
Weil ich einfach eine magic number, in diesem Fall den Wert einer Konstanten (konkret 0), eingesetzt habe und dann MsgBoxConstants.au3 raus genommen haben.
Zu #include's im allgemeinen kannst du dir einfach die Hilfe anschauen.
Viele Grüße
Sven
Ok hab es geschnallt danke für die schnelle Hilfe freut mich immer sehr, das man hier immer so gut aufgehoben ist echt Top
Kann man eigentlich aus einer Combo auch die Items verstecken, sodass man sie nicht mehr in der Combo angezeigt bekommt z. B. durch eine Checkbox wenn diese an geharkt ist. Das eben das Item 'Alle' aus $MainCombo
Versteckt/HIDE wird oder ist es da einfacher eine neue Combo oben drüber zu legen, die einfach nur die gewünschten Items entsprechen?