Overlaying a timer on a GUI? Topic is solved

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
TheNomadicAspie
Posts: 140
Joined: 07 Jan 2020, 15:39

Overlaying a timer on a GUI?

09 Dec 2020, 19:22

I have a timer which I have working now which I'm trying to overlay onto a semi-transparent image. The problem is when I position the timer on the image, not only is the timer transparent but the transparency goes all the way through the image (The white square is the opaque part of the transparency) and shows the background of my desktop (The black).

https://imgur.com/a/TdXSqRV

Does anyone know how I can get the background of the timer to be the same color as the transparency image? My actual image is not white, I just changed the image to illustrate what's going on.

Code: Select all

SetWorkingDir %A_ScriptDir%
URL = https://i.imgur.com/hw5wxoO.png
URLDownloadToFile, %URL%, Image.png

;On-screen display (OSD)
Gui +LastFound +AlwaysOnTop -Caption -border +ToolWindow ; +ToolWindow avoids a taskbar button and an alt-tab menu item.
Gui, Add, Picture, +BackgroundTrans, Image.png
Gui, Color, 0c0909
Gui, Margin, 0, 0
Gui, Font, cFFFFFF s35 ; Set a large font size (35-point).
Gui, Add, Text, ym+15 x250 vMyText cBlue, 00 ; 00 serve to auto-size the window.
WinSet, TransColor, 0c0909 ; Make all pixels of this color transparent
Gui, Show, x50 y50 NoActivate ; NoActivate avoids deactivating the currently active window.
return

r:: ; hotkey r will start or reset counting
counter:=0
SetTimer, UpdateOSD, -10 ; to update immediately
SetTimer, UpdateOSD, 1000
return


UpdateOSD:
counter++
time_display:=6-counter ; 6 and not 5 because counter starts with 1
if (time_display=0)
SetTimer, UpdateOSD, off ; stops the counter
GuiControl,, MyText, %time_display%
return


esc::exitapp
User avatar
mikeyww
Posts: 27198
Joined: 09 Sep 2014, 18:38

Re: Overlaying a timer on a GUI?  Topic is solved

09 Dec 2020, 19:35

If you want the text control to have transparency, then BackgroundTrans goes on the Add, Text line.
TheNomadicAspie
Posts: 140
Joined: 07 Jan 2020, 15:39

Re: Overlaying a timer on a GUI?

09 Dec 2020, 19:37

Ahh, I thought it was going to be way more complicated than that. Thanks.
nacken012
Posts: 92
Joined: 22 Jul 2016, 14:39

Re: Overlaying a timer on a GUI?

09 Dec 2020, 23:00

Hallo
Habe mir mal einen Timer zusammen gebaut, den ich sehr praktisch finde.

Code habe ich teilweise aus einen anderen Script entnommen und ein bisschen umgebaut.

Es läuft dann oben am Bildschirm ein Balken runter.

Code: Select all

#NoEnv
DetectHiddenWindows,On
CoordMode,Mouse,Screen
SetBatchLines, -1
ListLines Off
SendMode Input
OnMessage(0x200, "WM_MOUSEMOVE")
Beep_TT := "Mache hier einen Haken rein wenn nur ein Piep Ton abgespielt werden soll"
Sound_TT := "Mache hier einen Haken rein wenn eine Audio Datei abgespielt werden soll"
SoundFile_TT := "Hier kannst Du eine Audio Datei auswählen"
Volume1_TT := "Hier kannst Du die Lautstärke einstellen in der der Piep Ton oder das Soundfile abgespielt werden soll"
Timer_TT := "Hier kannst Du die Zeit für den Timer einstellen (Minuten)"
;#NoTrayIcon 



ReadSoundFile =
SoundFile =
volume1 =



#Include D:\Tools\AutoHotkey 1.1\Compiler\ToolTipOpt.ahk
IniRead,ReadTimer,Daten\ini\Timer.ini,Timer,Key1
IniRead,ReadBeep,Daten\ini\Timer.ini,Timer,Key2
IniRead,ReadSound,Daten\ini\Timer.ini,Timer,Key3
IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
IniRead,ReadVolume1,Daten\ini\Timer.ini,Timer,Key5
SoundGet, AktuelleLautstaerke
Sleep, 200

CoordMode, Pixel, Screen
Gui, New, ,Sonja´s Countdown Timer
Gui, +AlwaysOnTop

list = 360
Loop,% List
ddlv .= A_Index "|"

Gui, Add, Text, cRed x5 y5, Sound Einstellungen
Gui, Add, Text, cRed x180 y5, Lautstärke einstellen

Gui, Add, Checkbox, x5 y25 vBeep Checked%ReadBeep%, Nur einen Beep Ton abspielen
Gui, Add, Checkbox, x5 y45 vSound Checked%ReadSound%, Eigenes Soundfile abspielen
Gui, Add, Button, x180 y42 h20 w120 vSoundFile gSoundFile, Soundfile auswählen
Gui, Add, Slider, x175 y25 w130 h15 Thick10 Range0-100 ToolTip vVolume1 AltSubmit , %Readvolume1%

Gui, Add, text, x0 y65 w350 h1 0x7

Gui, Add, DropDownList, x5 y75 h168 w150 vTimer, %ReadTimer%||%ddlv%

SplitPath, ReadSoundFile, Name
Gui, Add, text, x5 y285 vSoundName, %Name%
Gui, Add, text, cRed x180 y80, Timer kann mit F8 beendet werden
Gui, Add, text, x0 y105 w350 h1 0x7
Gui, Add, text, x5 y115, Willkommen bei Sonja´s Countdown Timer
Gui, Font, c747474
Gui, Add, text, x5 y135, Stelle einfach ein was Du gerne haben möchtest, entweder einen
Gui, Add, text, x5 y150, Piep Ton / oder 1 Soundfile das abgespielt werden soll wenn der Timer
Gui, Add, text, x5 y165, abgelaufen ist.
Gui, Add, text, x5 y185, Zum starten des Timers einfach das Fenster mit dem X schließen.
Gui, Add, text, x5 y205, Am oberen Bildschirmrand läuft dann 1 Balken runter, Du kannst
Gui, Add, text, x5 y220, mit der Maus über den Balken gehen damit Du sehen kannst, wie
Gui, Add, text, x5 y235, lange es noch dauert bis der Timer abgelaufen ist.
Gui, Add, text, x5 y255, Nach ablauf des Timers meldet er sich Optisch und Akustisch.


Gui, Add, text, x0 y283 w350 h1 0x7

Gui, Show, w350 h300 Center

return
GuiClose:
Gui, Submit, nohide

IniWrite,%Timer%,Daten\ini\Timer.ini,Timer,Key1
IniWrite,%Beep%,Daten\ini\Timer.ini,Timer,Key2
IniWrite,%Sound%,Daten\ini\Timer.ini,Timer,Key3
IniWrite,%Volume1%,Daten\ini\Timer.ini,Timer,Key5



AlarmTime =
AlarmTime += Timer, minutes
	
alarm=%AlarmTime%  ;Alarm time
height=10       ;Progress bar height >0
message=Der Timer ist abgelaufen!  ;Message to display when timer reached

range:=AlarmTime
EnvSub,range,%A_now%,seconds

Gui,+ToolWindow +AlwaysOnTop -Caption
Gui,Add,Progress,% "Vprogress X-2 Y-2 W" A_ScreenWidth+4 " H" height+5 " Range0-" range
Gui,Show,% "X0 Y0 W" A_ScreenWidth " H" height
Gui,+LastFound
guiid:=WinExist("A")
WinSet,Transparent,150,ahk_id %guiid%  ; Transparency
WinSet,ExStyle,+0x20,ahk_id %guiid%    ; Click-through

Loop,%range%
{
  Sleep,1000
  left:=range-A_Index
  GuiControl,,progress,% left
  Gosub,LEFT
}
If message<>
{
IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
SoundSet, Volume1
Sleep, 200

If ReadBeep = 1
{
Loop, 5
{
SoundBeep
Sleep, 100
}
Sleep, 500
}

If ReadSound = 1
{
	
	SoundSet, Volume1
	IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
	SoundPlay, %ReadSoundFile%
}



}






  MsgBox,%message%
  SoundSet, %AktuelleLautstaerke%
ExitApp

LEFT:
  MouseGetPos,,my
  If (my<=height)
  {
    showing=1
    ToolTip,% left " seconds left"
  }
  Else
  If showing=1
    ToolTip
Return



Gui, Cancel



IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4


SoundSet, Volume1
Sleep, 200

If ReadBeep = 1
{
Loop, 5
{
SoundBeep
Sleep, 100
}
Sleep, 500
}

If ReadSound = 1
{
	
	;MsgBox, %ReadSoundFile%
	SoundSet, Volume1
	SoundPlay, %ReadSoundFile%
}

ExitApp
return



SoundFile:
FileSelectFile, SoundFile
IniWrite,%SoundFile%,Daten\ini\Timer.ini,Timer,Key4
IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
SplitPath, ReadSoundFile, Name
GuiControl, Text, SoundName, %Name%
return

F8:: ExitApp

WM_MOUSEMOVE()
{
    static CurrControl, PrevControl, _TT  ; _TT bleibt für den unteren ToolTip-Befehl leer.
    CurrControl := A_GuiControl
    if (CurrControl != PrevControl and not InStr(CurrControl, " "))
    {
        ToolTip  ; Schließt alle offenen Tooltips.
        SetTimer, ZeigeToolTip, 100 ; <<<<< ToolTip nach 1000 Millisekunden anzeigen, wenn die Maus über dem Control bleibt.
        PrevControl := CurrControl
    }
    return

    ZeigeToolTip:
    SetTimer, ZeigeToolTip, Off
    ToolTip % %CurrControl%_TT  ; Das erste Prozentzeichen erzwingt einen Ausdruck.
    SetTimer, EntferneToolTip, 20000  ; <<<<< TololTip nach maximal 3000 Millisekunden entfernen
    return

    EntferneToolTip:
    SetTimer, EntferneToolTip, Off
    ToolTip
    return
}
TheNomadicAspie
Posts: 140
Joined: 07 Jan 2020, 15:39

Re: Overlaying a timer on a GUI?

09 Dec 2020, 23:44

nacken012 wrote:
09 Dec 2020, 23:00
Hallo
Habe mir mal einen Timer zusammen gebaut, den ich sehr praktisch finde.

Code habe ich teilweise aus einen anderen Script entnommen und ein bisschen umgebaut.

Es läuft dann oben am Bildschirm ein Balken runter.

Code: Select all

#NoEnv
DetectHiddenWindows,On
CoordMode,Mouse,Screen
SetBatchLines, -1
ListLines Off
SendMode Input
OnMessage(0x200, "WM_MOUSEMOVE")
Beep_TT := "Mache hier einen Haken rein wenn nur ein Piep Ton abgespielt werden soll"
Sound_TT := "Mache hier einen Haken rein wenn eine Audio Datei abgespielt werden soll"
SoundFile_TT := "Hier kannst Du eine Audio Datei auswählen"
Volume1_TT := "Hier kannst Du die Lautstärke einstellen in der der Piep Ton oder das Soundfile abgespielt werden soll"
Timer_TT := "Hier kannst Du die Zeit für den Timer einstellen (Minuten)"
;#NoTrayIcon 



ReadSoundFile =
SoundFile =
volume1 =



#Include D:\Tools\AutoHotkey 1.1\Compiler\ToolTipOpt.ahk
IniRead,ReadTimer,Daten\ini\Timer.ini,Timer,Key1
IniRead,ReadBeep,Daten\ini\Timer.ini,Timer,Key2
IniRead,ReadSound,Daten\ini\Timer.ini,Timer,Key3
IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
IniRead,ReadVolume1,Daten\ini\Timer.ini,Timer,Key5
SoundGet, AktuelleLautstaerke
Sleep, 200

CoordMode, Pixel, Screen
Gui, New, ,Sonja´s Countdown Timer
Gui, +AlwaysOnTop

list = 360
Loop,% List
ddlv .= A_Index "|"

Gui, Add, Text, cRed x5 y5, Sound Einstellungen
Gui, Add, Text, cRed x180 y5, Lautstärke einstellen

Gui, Add, Checkbox, x5 y25 vBeep Checked%ReadBeep%, Nur einen Beep Ton abspielen
Gui, Add, Checkbox, x5 y45 vSound Checked%ReadSound%, Eigenes Soundfile abspielen
Gui, Add, Button, x180 y42 h20 w120 vSoundFile gSoundFile, Soundfile auswählen
Gui, Add, Slider, x175 y25 w130 h15 Thick10 Range0-100 ToolTip vVolume1 AltSubmit , %Readvolume1%

Gui, Add, text, x0 y65 w350 h1 0x7

Gui, Add, DropDownList, x5 y75 h168 w150 vTimer, %ReadTimer%||%ddlv%

SplitPath, ReadSoundFile, Name
Gui, Add, text, x5 y285 vSoundName, %Name%
Gui, Add, text, cRed x180 y80, Timer kann mit F8 beendet werden
Gui, Add, text, x0 y105 w350 h1 0x7
Gui, Add, text, x5 y115, Willkommen bei Sonja´s Countdown Timer
Gui, Font, c747474
Gui, Add, text, x5 y135, Stelle einfach ein was Du gerne haben möchtest, entweder einen
Gui, Add, text, x5 y150, Piep Ton / oder 1 Soundfile das abgespielt werden soll wenn der Timer
Gui, Add, text, x5 y165, abgelaufen ist.
Gui, Add, text, x5 y185, Zum starten des Timers einfach das Fenster mit dem X schließen.
Gui, Add, text, x5 y205, Am oberen Bildschirmrand läuft dann 1 Balken runter, Du kannst
Gui, Add, text, x5 y220, mit der Maus über den Balken gehen damit Du sehen kannst, wie
Gui, Add, text, x5 y235, lange es noch dauert bis der Timer abgelaufen ist.
Gui, Add, text, x5 y255, Nach ablauf des Timers meldet er sich Optisch und Akustisch.


Gui, Add, text, x0 y283 w350 h1 0x7

Gui, Show, w350 h300 Center

return
GuiClose:
Gui, Submit, nohide

IniWrite,%Timer%,Daten\ini\Timer.ini,Timer,Key1
IniWrite,%Beep%,Daten\ini\Timer.ini,Timer,Key2
IniWrite,%Sound%,Daten\ini\Timer.ini,Timer,Key3
IniWrite,%Volume1%,Daten\ini\Timer.ini,Timer,Key5



AlarmTime =
AlarmTime += Timer, minutes
	
alarm=%AlarmTime%  ;Alarm time
height=10       ;Progress bar height >0
message=Der Timer ist abgelaufen!  ;Message to display when timer reached

range:=AlarmTime
EnvSub,range,%A_now%,seconds

Gui,+ToolWindow +AlwaysOnTop -Caption
Gui,Add,Progress,% "Vprogress X-2 Y-2 W" A_ScreenWidth+4 " H" height+5 " Range0-" range
Gui,Show,% "X0 Y0 W" A_ScreenWidth " H" height
Gui,+LastFound
guiid:=WinExist("A")
WinSet,Transparent,150,ahk_id %guiid%  ; Transparency
WinSet,ExStyle,+0x20,ahk_id %guiid%    ; Click-through

Loop,%range%
{
  Sleep,1000
  left:=range-A_Index
  GuiControl,,progress,% left
  Gosub,LEFT
}
If message<>
{
IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
SoundSet, Volume1
Sleep, 200

If ReadBeep = 1
{
Loop, 5
{
SoundBeep
Sleep, 100
}
Sleep, 500
}

If ReadSound = 1
{
	
	SoundSet, Volume1
	IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
	SoundPlay, %ReadSoundFile%
}



}






  MsgBox,%message%
  SoundSet, %AktuelleLautstaerke%
ExitApp

LEFT:
  MouseGetPos,,my
  If (my<=height)
  {
    showing=1
    ToolTip,% left " seconds left"
  }
  Else
  If showing=1
    ToolTip
Return



Gui, Cancel



IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4


SoundSet, Volume1
Sleep, 200

If ReadBeep = 1
{
Loop, 5
{
SoundBeep
Sleep, 100
}
Sleep, 500
}

If ReadSound = 1
{
	
	;MsgBox, %ReadSoundFile%
	SoundSet, Volume1
	SoundPlay, %ReadSoundFile%
}

ExitApp
return



SoundFile:
FileSelectFile, SoundFile
IniWrite,%SoundFile%,Daten\ini\Timer.ini,Timer,Key4
IniRead,ReadSoundFile,Daten\ini\Timer.ini,Timer,Key4
SplitPath, ReadSoundFile, Name
GuiControl, Text, SoundName, %Name%
return

F8:: ExitApp

WM_MOUSEMOVE()
{
    static CurrControl, PrevControl, _TT  ; _TT bleibt für den unteren ToolTip-Befehl leer.
    CurrControl := A_GuiControl
    if (CurrControl != PrevControl and not InStr(CurrControl, " "))
    {
        ToolTip  ; Schließt alle offenen Tooltips.
        SetTimer, ZeigeToolTip, 100 ; <<<<< ToolTip nach 1000 Millisekunden anzeigen, wenn die Maus über dem Control bleibt.
        PrevControl := CurrControl
    }
    return

    ZeigeToolTip:
    SetTimer, ZeigeToolTip, Off
    ToolTip % %CurrControl%_TT  ; Das erste Prozentzeichen erzwingt einen Ausdruck.
    SetTimer, EntferneToolTip, 20000  ; <<<<< TololTip nach maximal 3000 Millisekunden entfernen
    return

    EntferneToolTip:
    SetTimer, EntferneToolTip, Off
    ToolTip
    return
}

Vielen Dank nacken012. Ich weiß es zu schätzen, dass Sie Ihren Code teilen.

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: effel, Rohwedder and 195 guests