Bin mir nicht ganz sicher, aber ich glaube das geht nicht.
Ich weiß eine Möglichkeit wie man überhaupt auf das Mausrad reagieren kann, aber die unterscheidet nicht zwischen vorne und hinten.
Bin mir nicht ganz sicher, aber ich glaube das geht nicht.
Ich weiß eine Möglichkeit wie man überhaupt auf das Mausrad reagieren kann, aber die unterscheidet nicht zwischen vorne und hinten.
Hier mal ein Funktionsaufruf mit GUIRegisterMsg:
[autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
$r = GUIRegisterMsg($WM_COMMAND, "_Check")
If Not $r Then Exit
[/autoit][autoit][/autoit][autoit]GUICreate("test", 320, 120)
GUISetOnEvent($GUI_EVENT_CLOSE,"_End")
$InputID = GUICtrlCreateInput("", 10, 5, 300, 20)
[/autoit][autoit][/autoit][autoit]$Label = GUICtrlCreateLabel("", 20, 30, 50, 24)
GUICtrlSetFont(-1, 16, 400, 0, "Arial")
GUISetState()
[/autoit][autoit][/autoit][autoit]While 1
Sleep(100)
WEnd
Func _Check($hWndGUI, $MsgID, $WParam, $LParam)
GUICtrlSetData($Label, StringRight(GUICtrlRead($InputID),1))
EndFunc
Func _End()
Exit
EndFunc
Erstmal: Herzlich willkommen hier im Forum!
Du kannst mittels AdlibEnable eine Funktion aufrufen, in der Du die Eingabe ausliest und testest:
[autoit]
#include <GUIConstantsEx.au3>
Opt('GUIOnEventMode', 1)
GUICreate("test", 320, 120)
GUISetOnEvent($GUI_EVENT_CLOSE,'_End')
$InputID = GUICtrlCreateInput("", 10, 5, 300, 20)
GUISetState()
AdlibEnable('_Check', 100)
While 1
Sleep(100)
WEnd
Func _Check()
Local $text = GUICtrlRead($InputID)
If $text = 'blabla' Then Exit MsgBox(0, '', 'Warum blabla?')
EndFunc
Func _End()
Exit
EndFunc
Und mit GUIRegisterMsg kannst Du Dir einen eigenen EventHandler erstellen, mit dem Du auch auf einen Doppelklick oder so reagieren kannst.
Deine Änderungen führen leider dazu, dass die Speicherauslastung noch schneller ansteigt.
OH NEIN!
Komme gerade vom Einkaufen wieder (Script habe ich laufen lassen) und sehe die Zahlen flackern. Das kann doch nicht wahr sein!
Außerdem hat sich innerhalb von 45 Minuten die Speicherauslastung um 100 KB erhöht und die CPU-Auslastung ist auf 3 % (vorher 1 %) gestiegen.
Da stimmt doch was mit den Graphic-Controls nicht!
Das funktionierte ja auf dem C64 besser (Sprite-Programmierung)!
Das mit dem melden an die AutoIt-Entwickler sollte besser jemand übernehmen, der besser englisch kann als ich.
Klasse! Bernd Du bist der Beste!
Da hatte ich mich schon damit abgefunden, dass die Programmierarbeit/-zeit für diese Variante umsonst war, da kommst Du mit einer Lösung. COOL!
Was würde ich nur ohne dieses Forum tun?
So! Version 1.7 ist da!
Änderungen:
- Erinnerungstimer jetzt auch minutengenau einstellbar bis 23:59 (Stunden:Minuten)
- Einen ganz dummen Fehler beseitigt: Ich habe gar nicht getestet, ob der jeweilige Wecker aktiviert war.
- Hotkey zum "stummschalten des Weckers" ist nun [STRG] + [DEL]
Naja, man kann einen FTP-Server auch an einer dynamischen IP betreiben (Stichwort: Dyndns.org).
Aber:
1. Muss dazu Dein Rechner immer laufen
2. Muss das FTP-Server-Programm immer laufen
3. Musst Du Deine Firewall entsprechend konfigurieren
4. Musst Du in einem evtl. vorhanden Router entsprechende Port-Weiterleitungen anlegen
5. Ist das ein Sicherheitsrisiko
6. Musst Du die Zugangsdaten zu den FTP-Freigaben in Deinem Script ablegen
Einfacher wäre das Umfrage-Ergebnis per EMail zu versenden. Entweder an Deine normale EMail-Adresse oder an eine, die Du speziell dafür einrichtest.
So muss Dein Rechner nicht ständig an sein und eine Auswertung könnte man auch per AutoIt machen. Das hängt aber auch davon ab, wieviel Antworten Du erwartest und was dort alles drinsteht.
Aus der Hilfe:
[autoit]
#include <Color.au3>
$iRedColor = _ColorGetRed( 0x8080ff )
MsgBox( 4096, "AutoIt", $iRedColor )
Das Ganze gibt's dann auch als _ColorGetGreen und _ColorGetBlue.
Es ist gut gemeint und Dein Script flackert auch nicht so stark, wie mein erster Versuch mit Delete/Neuzeichnen, aber für mich sieht es nun nach zwei Möglichkeiten aus:
1. Änderungen an der Digitaluhr vornehmen und mit einer flackernden Anzeige leben. Allerdings kann man die Farbe frei wählen.
oder
2. Es bei den Icondateien belassen und die Farbe nicht beliebig ändern zu können. Dafür ohne flackern.
Ich muss sagen, meine Entscheidung fällt deutlich zugunsten der 2. Möglichkeit aus. Sorry!
[autoit]
Probiert habe ich es mit:[/autoit] [autoit][/autoit] [autoit]
If($Zufallszahl == 2) ThenGUICtrlSetData($Pic1, @scriptdir & "\Image\würfel2.JPG")
[/autoit] [autoit][/autoit] [autoit]EndIF
[/autoit]
Fast richtig!
Statt GUICtrlSetData solltest Du GUICtrlSetImage benutzen.
Du kannst Dir die If-Abfrage sparen, wenn die Dateinamen eindeutig sind:
[autoit]
GUICtrlSetImage($Pic1, @scriptdir & "\Image\würfel" & $Zufallszahl & ".JPG"
Da fäält mir noch was ein.....
Wie wäre es, wenn Du vor jedem neuzeichnen einer Zahl für diese GuiCtrlDelete ausführst. Dann kann der Speicher nicht in die Höhe.
Das hatte ich ganz zuerst. Und Nein, das willst Du nicht wirklich sehen. Das flackert wie irre.
Ich danke Dir aber trotzdem für's testen und Ideen beisteuern.
Du musst bei ControlSetText den Titel des Fensters mitsenden.
Aus der Hilfe:
[autoit]ControlSetText("Untitled -", "", "Edit1", "New Text Here" )
[/autoit]Wobei "Untitled -" mit dem Titel des gewünschten Fensters ersetzt werden sollte.
Ich habe Dein Script schon getestet, leider ändert das nichts am Ergebnis.
Es ist auch nicht die CPU-Last, die mir Sorgen bereitet, sondern das die Speicherauslastung ansteigt.
Ich habe mein Script mal dahingehend verändert, dass jede Minute die Controls gelöscht und neu erstellt werden. Das hat zur Folge, dass die Speicherauslastung konstant bleibt.
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
Opt('MustDeclareVars', 1)
Opt('GUIOnEventMode', 1)
Global $gui_digit[6], $dColor = 0xff2222, $eColor = 0x000000, $bgColor = 0xc0c0c0
Global $s = -1, $m = -1, $h = -1, $hh, $hm, $hs, $ls, $rs
GUICreate('test', 800, 480, -1, -1, $WS_POPUP, BitOr($WS_EX_TOOLWINDOW, $WS_EX_LAYERED))
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_MoveWindow')
GUISetOnEvent($GUI_EVENT_CLOSE,'_End')
GUISetBKColor($bgColor) ; Hintergrundfarbe setzen
$gui_digit[0] = GUICtrlCreateGraphic(20, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[1] = GUICtrlCreateGraphic(60, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
_Colon(103, 20)
$gui_digit[2] = GUICtrlCreateGraphic(120, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[3] = GUICtrlCreateGraphic(160, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
_Colon(203, 20)
$gui_digit[4] = GUICtrlCreateGraphic(220, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[5] = GUICtrlCreateGraphic(260, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
GUICtrlCreatePic(@ScriptDir & '\nicht loeschen.gif', 0, 0, 1, 1) ; wird für die Transparenz benötigt (nicht löschen)
GUISetState()
While 1
$hm = @MIN
If $hm <> $m Then
For $i = 0 To 5
GUICtrlDelete($gui_digit[$i])
Next
$gui_digit[0] = GUICtrlCreateGraphic(20, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[1] = GUICtrlCreateGraphic(60, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[2] = GUICtrlCreateGraphic(120, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[3] = GUICtrlCreateGraphic(160, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[4] = GUICtrlCreateGraphic(220, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[5] = GUICtrlCreateGraphic(260, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$ls = StringLeft($hm, 1)
$rs = StringRight($hm, 1)
_DigitShow($gui_digit[2], $ls)
_DigitShow($gui_digit[3], $rs)
$m = $hm
$h = -1
EndIf
$hh = @HOUR
If $hh <> $h Then
$ls = StringLeft($hh, 1)
$rs = StringRight($hh, 1)
_DigitShow($gui_digit[0], $ls)
_DigitShow($gui_digit[1], $rs)
$h = $hh
EndIf
$hs = @SEC
If $hs <> $s Then
$ls = StringLeft($hs, 1)
$rs = StringRight($hs, 1)
_DigitShow($gui_digit[4], $ls)
_DigitShow($gui_digit[5], $rs)
$s = $hs
EndIf
Sleep(10)
WEnd
Func _Colon($PosX, $PosY)
GUICtrlCreateGraphic($PosX, $PosY, 10, 56)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 12, 10, 10)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 36, 10, 10)
EndFunc
Func _DigitShow($digit, $number)
Switch $number ; g
Case 2, 3, 4, 5, 6, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 28)
Case 0, 1, 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 2, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 30, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 2, 28)
EndSwitch
Switch $number ; a
Case 0, 2, 3, 5, 6, 7, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 0)
Case 1, 4
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 1, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 31, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 1, 0)
EndSwitch
Switch $number ; b
Case 0, 1, 2, 3, 4, 7, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 28)
Case 5, 6
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 1)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 23)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 27)
EndSwitch
Switch $number ; c
Case 0, 1, 3, 4, 5, 6, 7, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 56)
Case 2
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 29)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 55)
EndSwitch
Switch $number ; d
Case 0, 2, 3, 5, 6, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 56)
Case 1, 4, 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 1, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 31, 56)
EndSwitch
Switch $number ; e
Case 0, 2, 6, 8
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
Case 1, 3, 4, 5, 7, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 29)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 47)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 55)
EndSwitch
Switch $number ; f
Case 0, 4, 5, 6, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 28)
Case 1, 2, 3, 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 1)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 23)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 27)
EndSwitch
Switch $Number
Case 1
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
Case 4
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
Case 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
EndSwitch
GUICtrlSetGraphic($digit, $GUI_GR_REFRESH)
EndFunc
Func _MoveWindow()
Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
Local $WinPos = WinGetPos(@GUI_WinHandle)
Local $MPos = MouseGetPos()
$DifX = $MPos[0] - $WinPos[0]
$DifY = $MPos[1] - $WinPos[1]
Do
Sleep(15)
$MPos = MouseGetPos()
$MouseData = GUIGetCursorInfo(@GUI_WinHandle)
Until ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Or (Not $MouseData[2])
While $MouseData[2]
$MPos = MouseGetPos()
$WinPos = WinGetPos(@GUI_WinHandle)
If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
EndIf
Sleep(15)
$MouseData = GUIGetCursorInfo(@GUI_WinHandle)
WEnd
EndFunc
Func _End()
Exit
EndFunc
Es muss also mit den GUICtrlSetGraphic zu tun haben. Scheinbar wird mit jedem Befehl ein neues Object oder so erzeugt, was den Speicherbedarf nach oben treibt und ab einer bestimmten Anzahl dazu führt, dass das Ganze flackert.
Hmmm...alles sehr unbefriedigend...
Ich habe gerade mal nebenbei den Taskmanager laufenlassen. Mit der Erkenntnis, dass das Script scheinbar ein Speicherleck verursacht, denn die Speicherauslastung vom AutoIt-Prozess steigt unaufhörlich an.
Mein vorheriger Ansatz war ein aktualisieren über SHOW/HIDE, aber das funktioniert bei Graphic-Controls nicht. Die lassen sich mit GUICtrlSetState($Control-ID, $GUI_HIDE) nicht verstecken.
Deswegen ja, das "übermalen" mit der Hintergrund-(Transparent-)Farbe. Und mein Script übermalt ja auch nicht alles, sondern nur die Segmente, die nicht verwendet werden.
Eigenartig ist ja gerade, dass es ca. 1 Minute ganz normal läuft.
Ich habe die Anzeige der Uhr auf Graphic-Controls umgestellt, allerdings tritt dabei ein seltsames Verhalten auf. Anfangs läuft die Uhr normal, aber so nach ca. 1 Minute fangen die Sekunden an zu flackern. Nach 2 Minuten flackern sie noch häufiger und teilweise flackert die gesamte Anzeige. Ich kann mir nicht erklären, woran das liegt. Die einzelnen Segmente der 7-Segment-Anzeigen werden nur gezeichnet/überschrieben wenn sie gebraucht werden und wie schon gesagt läuft die Anzeige anfangs auch ganz normal.
Hat jemand eine Erklärung/Abhilfe dafür?
Hier mal das Script:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
Opt('MustDeclareVars', 1)
Opt('GUIOnEventMode', 1)
Global $gui_digit[6], $dColor = 0xff2222, $eColor = 0x000000, $bgColor = 0xc0c0c0
Global $s = -1, $m = -1, $h = -1, $ls, $rs
GUICreate('test', 800, 480, -1, -1, $WS_POPUP, BitOr($WS_EX_TOOLWINDOW, $WS_EX_LAYERED))
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_MoveWindow')
GUISetOnEvent($GUI_EVENT_CLOSE,'_End')
GUISetBKColor($bgColor) ; Hintergrundfarbe setzen
$gui_digit[0] = GUICtrlCreateGraphic(20, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[1] = GUICtrlCreateGraphic(60, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
_Colon(103, 20)
$gui_digit[2] = GUICtrlCreateGraphic(120, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[3] = GUICtrlCreateGraphic(160, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
_Colon(203, 20)
$gui_digit[4] = GUICtrlCreateGraphic(220, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
$gui_digit[5] = GUICtrlCreateGraphic(260, 20, 32, 56)
GUICtrlSetBkColor(-1, $bgColor)
GUICtrlCreatePic(@ScriptDir & '\nicht loeschen.gif', 0, 0, 1, 1) ; wird für die Transparenz benötigt (nicht löschen)
GUISetState()
While 1
If @HOUR <> $h Then
$ls = StringLeft(@HOUR, 1)
$rs = StringRight(@HOUR, 1)
_DigitShow($gui_digit[0], $ls)
_DigitShow($gui_digit[1], $rs)
$h = @HOUR
EndIf
If @MIN <> $m Then
$ls = StringLeft(@MIN, 1)
$rs = StringRight(@MIN, 1)
_DigitShow($gui_digit[2], $ls)
_DigitShow($gui_digit[3], $rs)
$m = @MIN
EndIf
If @SEC <> $s Then
$ls = StringLeft(@SEC, 1)
$rs = StringRight(@SEC, 1)
_DigitShow($gui_digit[4], $ls)
_DigitShow($gui_digit[5], $rs)
$s = @SEC
EndIf
Sleep(980)
WEnd
Func _Colon($PosX, $PosY)
GUICtrlCreateGraphic($PosX, $PosY, 10, 56)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 12, 10, 10)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 0, 36, 10, 10)
EndFunc
Func _DigitShow($digit, $number)
Switch $number ; g
Case 2, 3, 4, 5, 6, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 28)
Case 0, 1, 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 2, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 30, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 2, 28)
EndSwitch
Switch $number ; a
Case 0, 2, 3, 5, 6, 7, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 0)
Case 1, 4
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 1, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 31, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 1, 0)
EndSwitch
Switch $number ; b
Case 0, 1, 2, 3, 4, 7, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 28)
Case 5, 6
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 1)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 23)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 27)
EndSwitch
Switch $number ; c
Case 0, 1, 3, 4, 5, 6, 7, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 56)
Case 2
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 32, 29)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 55)
EndSwitch
Switch $number ; d
Case 0, 2, 3, 5, 6, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 32, 56)
Case 1, 4, 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 1, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 9, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 23, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 31, 56)
EndSwitch
Switch $number ; e
Case 0, 2, 6, 8
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 28)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 32)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 48)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
Case 1, 3, 4, 5, 7, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 29)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 47)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 55)
EndSwitch
Switch $number ; f
Case 0, 4, 5, 6, 8, 9
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $eColor, $dColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8,
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 24)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 28)
Case 1, 2, 3, 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 1)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 23)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 27)
EndSwitch
Switch $Number
Case 1
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 0)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
Case 4
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 33)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
Case 7
GUICtrlSetGraphic($digit, $GUI_GR_COLOR, $bgColor, $bgColor)
GUICtrlSetGraphic($digit, $GUI_GR_MOVE, 0, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 9)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 8, 56)
GUICtrlSetGraphic($digit, $GUI_GR_LINE, 0, 56)
EndSwitch
GUICtrlSetGraphic($digit, $GUI_GR_REFRESH)
EndFunc
Func _MoveWindow()
Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
Local $WinPos = WinGetPos(@GUI_WinHandle)
Local $MPos = MouseGetPos()
$DifX = $MPos[0] - $WinPos[0]
$DifY = $MPos[1] - $WinPos[1]
Do
Sleep(15)
$MPos = MouseGetPos()
$MouseData = GUIGetCursorInfo(@GUI_WinHandle)
Until ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Or (Not $MouseData[2])
While $MouseData[2]
$MPos = MouseGetPos()
$WinPos = WinGetPos(@GUI_WinHandle)
If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
EndIf
Sleep(15)
$MouseData = GUIGetCursorInfo(@GUI_WinHandle)
WEnd
EndFunc
Func _End()
Exit
EndFunc
Im ZIP-Achiv (Anhang) befindet sich auch die GIF-Datei.
Für Deine 1. Idee gibt es bereits den Timer (Erinnerung in ...).
Ein frei einstellbarer Timer (mit Slider) befindet sich auf meiner ToDo-Liste. Bis dahin mußt Du Dir die Werte entsprechend anpassen.
Die 2. Idee habe ich mal auf die ToDo-Liste gesetzt. Obwohl ich mehr als 2 Weckzeiten eigentlich nicht benötige. Für individuelle Termine läuft bei mir Rainlendar.
Zur Zeit bastel ich gerade an dem Vorschlag von Pee mit den Graphic-Controls.
Bernd, das ist es!
Vielen Dank, das hilft mir schonmal viel weiter.
Wenn ich ein Graphic-Control erstelle, dann kann ich die Graphic nicht mit GUICtrlSetState(-1, $GUI_HIDE) verstecken, warum?
Beispiel:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
Opt('MustDeclareVars', 1)
Opt('GUIOnEventMode', 1)
Global $dig[10]
GUICreate('test', 800, 480, -1, -1, $WS_POPUP, BitOr($WS_EX_TOOLWINDOW, $WS_EX_LAYERED))
GUISetOnEvent($GUI_EVENT_CLOSE,'_End')
GUISetBKColor(0xC0C0C0) ; Hintergrundfarbe setzen
$dig[8] = GUICtrlCreateGraphic(0, 0, 32, 56)
GUICtrlSetBkColor(-1, 0xC0C0C0)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0, 0xffff88)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 0) ; a
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8,
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24,
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 32, 0)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 32, 0) ; b
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24,
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24, 24)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 32, 28)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 32, 28) ; c
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24, 32)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 32, 56)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 56) ; d
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8, 48)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24, 48)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 32, 56)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 28) ; e
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8, 32)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8, 48)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 0, 56)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 0) ; f
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8,
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8, 24)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 0, 28)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, 28) ; g
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8, 24)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24, 24)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 32, 28)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 24, 32)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 8, 32)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 0, 28)
GUICtrlSetState($dig[8], $GUI_HIDE) ; <-- funktioniert nicht
GUICtrlCreatePic(@ScriptDir & '\nicht loeschen.gif', 0, 0, 1, 1) ; wird für die Transparenz benötigt (nicht löschen)
GUISetState()
While 1
Sleep(100)
WEnd
Func _End()
Exit
EndFunc
Falls das sowieso nicht geht, wäre mein zweite Frage:
Wie kann ich die Graphic periodisch verändern? Mit GUICtrlDelete und anschließendem Neuzeichnen führt das zu einem üblen Geflacker.