Position Countdowner mit Progress

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

festigrat
Posts: 44
Joined: 02 Mar 2017, 06:58

Position Countdowner mit Progress

14 Sep 2018, 03:57

Hallo,

ich habe mir mit Progress eine Uhr gebastelt, die rückwärts zählt. Gleichzeitig läuft ein Balken mit:

Code: Select all

startover:
t := 0, w := e*60 + f ; e sind die Minuten f sind die Sekunden
settimer,label,1000
return
label:
++t

;if (t < w)
    Progress, % 100*(w-t)/w, % SubStr("00" floor((w-t)/60),-1) ":" SubStr("00" mod(w-t,60),-1), count down, Countdowner


if (t = w)
    {
        ExitApp
    }

return
Wie kann ich nun die Position und auch Farben des Fensters ändern? Ich habe es folgendermaßen versucht:

Code: Select all

Progress, X100,  % 100*(w-t)/w, % SubStr("00" floor((w-t)/60),-1) ":" SubStr("00" mod(w-t,60),-1), count down, Countdowner
Dann verrutschen aber die Parameter. Der Progress-Balken wird nicht mehr angezeigt. Die Prozentwerte werden dort angezeigt, wo vorher die Zeit angegeben wurde und der Countdown rutscht in die Fensterbeschriftung.
Ich würde mich sehr freuen, wenn mir hier jemand helfen könnte.

Viele Grüße und schon mal vielen Dank!
wolf_II
Posts: 2270
Joined: 08 Feb 2015, 20:55

Re: Position Countdowner mit Progress

14 Sep 2018, 08:55

Wie kann ich nun die Position und auch Farben des Fensters ändern?
Dein Beispiel mit X100 würde ich so machen:

Code: Select all

#Persistent
Minuten := 0    
Sekunden := 10
t := 0 ; LAUF_VARIABEL
w := Minuten * 60 + Sekunden
SetTimer, Label, 1000

Label:
    If (t++ = w)
        ExitApp

    BarPos := 100*(w-t)/w
    Min := SubStr("00" floor((w-t)/60),-1)
    Sec := SubStr("00" mod(w-t,60),-1)
    Progress, % BarPos, % Min ":" Sec, count down, Countdowner
    WinMove, Countdowner,, 100

Return
Farben in Progress ist kompliziert, das ist ein CallDll-Level Problem. Zu hoch für mich.
Normal sterbliche machen ein eigenes GUI und malen dort. Damit könnte ich dienen.
garry
Posts: 1569
Joined: 22 Dec 2013, 12:50

Re: Position Countdowner mit Progress

14 Sep 2018, 11:01

@wolf_II , danke
Beispiel mit GUI ( drücke F1 und F2 )

Code: Select all

Gui,2:Font,s14 ,Lucida Console
Gui,2:Color,Black
Gui,2:Color,ControlColor, Black
Gui,2:Add,Text, cRED    x10  y10 ,F1=
Gui,2:Add,Text, cFF7200 x10  y40 ,F2=
Gui,2:Add,Progress,     x70  y10 w400 h20  vPRBAR1 cRed
Gui,2:Add,Text, cBlack  x70  y10 w400 h20 +0x200 +Center +BackgroundTrans vText1
Gui,2:Add,Progress,     x70  y40 w400 h20  vPRBAR2 cFF7200 
Gui,2:Add,Text, cBlack  x70  y40 w400 h20 +0x200 +Center +BackgroundTrans vText2
Gui,2:Show
Return
esc::exitapp
2GuiClose:
ExitApp
F1::
    GuiControl,2:, PRBAR1, 0
    I1 := 0
    SetTimer, Bar1, 60
Return
Bar1:
    I1 += 1
    GuiControl,2:,PRBAR1, %I1%
    GuiControl,2:,Text1, %I1%
    If (I1 = 50)
        SetTimer, %A_ThisLabel%, Off
Return
F2::
    GuiControl,2:, PRBAR2, 0
    I2 := 100
    SetTimer, Bar2, 60
Return
Bar2:
    I2 -= 1
    GuiControl,2:,PRBAR2, %I2%
    GuiControl,2:,Text2, %I2%
    If (I2 = 0)
        SetTimer, %A_ThisLabel%, Off
Return
just me
Posts: 5654
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Position Countdowner mit Progress

15 Sep 2018, 04:45

Code: Select all

#Persistent

; E sind die Minuten, F sind die Sekunden
E := 1
F := 30

StartOver:
T := 0
W := (E * 60) + F
SubText := Format("{:02}:{:02}", W // 60, Mod(W, 60))
Progress, X100 CBWhite CTWhite CW404040 P%W% R0-%W%, %SubText%, Count Down, Countdowner
SetTimer, Label, 1000
Return

Label:
T++
Value := W - T
SubText := Format("{:02}:{:02}", Value // 60, Mod(Value, 60))
Progress, %Value%, %SubText%
If (T = W)
   ExitApp
Return

Esc::ExitApp
?
wolf_II
Posts: 2270
Joined: 08 Feb 2015, 20:55

Re: Position Countdowner mit Progress

15 Sep 2018, 16:43

wieder was gelernt. Danke. :D
User avatar
LuckyJoe
Posts: 164
Joined: 02 Oct 2013, 09:52

Re: Position Countdowner mit Progress

16 Sep 2018, 12:24

@wolf_II: ... dann bist du mir schon voraus: ich versuche immer noch, den Code von just me zu verstehen ;)

@just me: wow ... gerade mal 20 Zeilen ... habe gar nicht so viel Hüte, die ich ziehen müsste :clap:
festigrat
Posts: 44
Joined: 02 Mar 2017, 06:58

Re: Position Countdowner mit Progress

17 Sep 2018, 01:01

Liebe Leute,

vielen Dank für Eure Ideen und Hilfe! Ich komme jetzt auf jeden Fall weiter und versuche, Eure Lösungsansätze zu verstehen. Liebe Grüße! :D
just me
Posts: 5654
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Position Countdowner mit Progress

17 Sep 2018, 05:55

Moin,

noch ein kleiner Nachschlag für die, die die Progress Anweisung einem selbst erstellten Fenster vorziehen.

An sich sind die möglichen Werte für den ersten Parameter ProgressParam1 mehr oder weniger gut erläutert. Man sollte sich aber unbedingt einprägen, dass immer dann ein neues Progressfenster erstellt wird, wenn der Parameter etwas anderes als nur einen numerischen Wert enthält oder leer ist.

Bei einem numerischen Wert werden der Fortschrittsbalken angepasst und ggf. die Texte übernommen. Ist der Parameter leer, werden nur die Texte übernommen, so angegeben.
User avatar
LuckyJoe
Posts: 164
Joined: 02 Oct 2013, 09:52

Re: Position Countdowner mit Progress

01 Oct 2018, 02:27

Hallo zusammen,

ich nehme den Thread noch einmal auf mit einer weiteren Frage: Ich rufe das Script aus einem Excel-Macro (VBA) auf, weil ich bei Excel für ca. 30-40 Sekunden warten muss, bevor Excel mit seinem nächsten Macro-Schritt weiterarbeitet und Excel so eine Progress-Funktion nicht hat. Soweit so gut. Manchmal dauert die Excel-Routine halt 30 Sekunden, manchmal 40 Sekunden. Excel gibt dann eine Meldung (MsgBox) aus, wenn es mit diesem Schritt fertig ist. Manchmal läuft dann aber noch der AHK-CountDown. Meine Frage ist also: kann ich "von außen" das AHK-Script beenden, wenn Excel vor dem Countdown fertig ist? z.B. wenn das Script "erkennt", dass die Excel-Msgbox erscheint? Oder wäre es einfacher, wenn ich von Excel aus ein weiteres AHK-Script anstoße, das dann den AHK-Countdown beendet. Wie müsste dann dieses Script aussehen?

Danke schon mal im Voraus für eure Gedanken.
VG - Lucky Joe
User avatar
LuckyJoe
Posts: 164
Joined: 02 Oct 2013, 09:52

Re: Position Countdowner mit Progress

01 Oct 2018, 02:28

Hallo zusammen,

ich nehme den Thread noch einmal auf mit einer weiteren Frage: Ich rufe das Script aus einem Excel-Macro (VBA) auf, weil ich bei Excel für ca. 30-40 Sekunden warten muss, bevor Excel mit seinem nächsten Macro-Schritt weiterarbeitet und Excel so eine Progress-Funktion nicht hat. Soweit so gut. Manchmal dauert die Excel-Routine halt 30 Sekunden, manchmal 40 Sekunden. Excel gibt dann eine Meldung (MsgBox) aus, wenn es mit diesem Schritt fertig ist. Manchmal läuft dann aber noch der AHK-CountDown. Meine Frage ist also: kann ich "von außen" das AHK-Script beenden, wenn Excel vor dem Countdown fertig ist? z.B. wenn das Script "erkennt", dass die Excel-Msgbox erscheint? Oder wäre es einfacher, wenn ich von Excel aus ein weiteres AHK-Script anstoße, das dann den AHK-Countdown beendet. Wie müsste dann dieses Script aussehen?

Danke schon mal im Voraus für eure Gedanken.
VG - Lucky Joe
just me
Posts: 5654
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Position Countdowner mit Progress

02 Oct 2018, 03:41

Moin Lucky Joe,

das Skript sollte am Ende der Schleife für den Progress-Fortschritt erkennen können, ob die MsgBox aus Excel angezeigt wird. Dazu solltest Du mit einem 'WindSpy' die speziellen Eigenschaften der MsgBox (Fenstertitel, Fenstertext, ahk_class, ahk_exe) checken und dann abfragen.
User avatar
LuckyJoe
Posts: 164
Joined: 02 Oct 2013, 09:52

Re: Position Countdowner mit Progress

02 Oct 2018, 06:06

Hallo just me,

ja, das klappt! - Danke. :-)
nacken012
Posts: 25
Joined: 22 Jul 2016, 14:39

Re: Position Countdowner mit Progress

13 Oct 2018, 20:55

Guten Morgen
Der Code von Just Me funktioniert wunderbar

Ich habe versucht den Code bei mir einzubauen, was mir aber nicht wirklich gelingt.

Der Code läuft selber in einer anderen Loop Schleife und darf das Script natürlich nicht abbrechen mit ExitApp sondern muss wenn der Counter durch gelaufen ist, einfach weiter machen im Script.

Ich bekomme das einfach nicht hin das der Timer abläuft und er dann ganz normal weiter macht im Script.
just me
Posts: 5654
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Position Countdowner mit Progress

14 Oct 2018, 03:44

Moin,

mit einem Timer kannst Du das nur umständlich lösen. Wenn Du den "Countdown" in den normalen Skriptablauf integrieren willst, nimmst Du dafür am besten eine Schleife, z.B.:

Code: Select all

#Persistent

; E sind die Minuten, F sind die Sekunden
E := 0
F := 30

StartOver:
T := 0
W := (E * 60) + F
SubText := Format("{:02}:{:02}", W // 60, Mod(W, 60))
Progress, X100 CBWhite CTWhite CW404040 P%W% R0-%W%, %SubText%, Count Down, Countdowner
Loop {
   Sleep, 1000
   T++
   Value := W - T
   SubText := Format("{:02}:{:02}", Value // 60, Mod(Value, 60))
   Progress, %Value%, %SubText%
} Until (T = W)
MsgBox, Und jetzt geht'S los!
ExitApp

Esc::ExitApp
nacken012
Posts: 25
Joined: 22 Jul 2016, 14:39

Re: Position Countdowner mit Progress

15 Oct 2018, 10:33

Das klappt perfekt, vielen Dank :-)

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 9 guests