Ich habe mich heute mal an's GDI+ lernen gesetzt und dieses Script gebaut.
Es zeigt nur schlicht die Uhrzeit, also nicht allzu groß, aber ich wollte trotzdem ein paar Rückmeldungen ob alles sauber ist oder nicht.
Mit "rändlichen" Informationen:
Spoiler anzeigen
#notrayicon
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Date.au3>
#Region ### START Koda GUI section ### Form=d:\progen\autoit\meine\forms\analog.kxf
$Form1 = GUICreate("Uhr", 256, 175, 192, 124);, $WS_POPUP)
$Label1 = GUICtrlCreateLabel("Datum:", 10, 18, 36, 17)
$Label2 = GUICtrlCreateLabel(_NowDate(), 10, 40, 70, 17)
$Label3 = GUICtrlCreateLabel("Uhrzeit:", 10, 90, 36, 17)
$Label4 = GUICtrlCreateLabel(_NowTime(), 10, 112, 70, 17)
$Group1 = GUICtrlCreateGroup("Analoguhr", 90, 15, 145, 153)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GDIPlus_Startup()
global $pen=_GDIPlus_PenCreate(0xFFFF0000,2)
global $pen2=_GDIPlus_PenCreate(0xFF0000FF,2)
global $pen3=_GDIPlus_PenCreate(0xFF0000BB,2)
global $gra=_GDIPlus_GraphicsCreateFromHWND($Form1)
global $uhr=_GDIPlus_BitmapCreateFromFile(@ScriptDir&"\Uhr.png")
global $buffer=_GDIPlus_BitmapCreateFromGraphics(256,175,$gra)
global $backgra=_GDIPlus_ImageGetGraphicsContext($buffer)
global const $pi_div_180 = 4 * ATan(1) / 180
Opt("GUIOnEventMode", 1)
GUIRegisterMsg(0x000F, "Redraw_GUI")
adlibregister("uhrzeit",500)
GUISetOnEvent($GUI_EVENT_CLOSE,"ende")
While sleep(10000)
WEnd
Func ende()
adlibunregister("uhrzeit")
_GDIPlus_PenDispose($pen)
_GDIPlus_PenDispose($pen2)
_GDIPlus_PenDispose($pen3)
_GDIPlus_GraphicsDispose($gra)
_GDIPlus_BitmapDispose($uhr)
_GDIPlus_BitmapDispose($buffer)
_GDIPlus_Shutdown()
Exit
EndFunc
func Redraw_GUI($hWnd, $msg, $wParam, $lParam)
_WinAPI_RedrawWindow($hWnd, "", "", $RDW_UPDATENOW + $RDW_FRAME)
_GDIPlus_GraphicsClear($backgra,0x00000000)
_GDIPlus_GraphicsDrawImage($backgra,$uhr,100,35)
$winkel=int(stringmid(_NowTime(),7,2))+30
_GDIPlus_GraphicsDrawLine($backgra,162,97,162 + 62 * Sin($winkel * -6 * $Pi_Div_180),97 + 62 * Cos($winkel * -6 * $Pi_Div_180), $pen)
$winkel=int(stringmid(_NowTime(),4,2))+30
_GDIPlus_GraphicsDrawLine($backgra,162,97,162 + 52 * Sin($winkel * -6 * $Pi_Div_180),97 + 52 * Cos($winkel * -6 * $Pi_Div_180), $pen2)
$winkel=(int(stringmid(_NowTime(),1,2))+6)*5
_GDIPlus_GraphicsDrawLine($backgra,162,97,162 + 32 * Sin($winkel * -6 * $Pi_Div_180),97 + 32 * Cos($winkel * -6 * $Pi_Div_180), $pen3)
_GDIPlus_GraphicsDrawImageRect($gra,$buffer,0,0,256,175)
EndFunc
func uhrzeit()
GUICtrlSetData($Label2,_NowDate())
GUICtrlSetData($Label4,_NowTime())
endfunc
Nur Zeigeruhr, oben links in der Ecke: (Updated: Uhr bewegbar)
Spoiler anzeigen
#notrayicon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <Date.au3>
#include <Misc.au3>
global $fx=@DesktopWidth-225 ;-100
global $fy=@DesktopHeight-160 ;-35
$tmp=iniread("Uhr.ini","coords","x","x")
if $tmp<>"x" Then $fx=int($tmp)
$tmp=iniread("Uhr.ini","coords","y","y")
if $tmp<>"y" Then $fy=int($tmp)
global $title="Uhr"
#Region ### START Koda GUI section ### Form=d:\progen\autoit\meine\forms\analog.kxf
$Form1 = GUICreate($title, 256, 175, $fx, $fy, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW,$WS_EX_LAYERED))
$Label1 = GUICtrlCreateLabel("",0,0)
_WinAPI_SetLayeredWindowAttributes($Form1, 0xE0DFE3)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
winsetontop($title,"",1)
adlibregister("x",100)
_GDIPlus_Startup()
global $pen=_GDIPlus_PenCreate(0xFFFF0000,2)
global $pen2=_GDIPlus_PenCreate(0xFF0000FF,2)
global $pen3=_GDIPlus_PenCreate(0xFF0000BB,2)
global $gra=_GDIPlus_GraphicsCreateFromHWND($Form1)
global $uhr=_GDIPlus_BitmapCreateFromFile(@ScriptDir&"\Uhr.png")
global $iX = _GDIPlus_ImageGetWidth($uhr)
global $iY = _GDIPlus_ImageGetHeight($uhr)
global $iX_2 = $iX / 2 - 1 +100
Global $iY_2 = $iY / 2 + 35
global $zeiger_l1 = 60
global $zeiger_l2 = 50
global $zeiger_l3 = 30
global $buffer=_GDIPlus_BitmapCreateFromGraphics(256,175,$gra)
global $backgra=_GDIPlus_ImageGetGraphicsContext($buffer)
_GDIPlus_GraphicsSetSmoothingMode($backgra, 2)
global const $pi_div_180 = 4 * ATan(1) / 180
Opt("GUIOnEventMode", 1)
GUIRegisterMsg(0x000F, "Redraw_GUI")
GUISetOnEvent($GUI_EVENT_CLOSE,"ende")
While not _IsPressed("1B")
if _IsPressed("1") Then
$pos=mousegetpos()
$winpos=WinGetPos($title)
if $winpos[0]+100<=$pos[0] and $winpos[0]+225>=$pos[0] and $winpos[1]+35<=$pos[1] and $winpos[1]+160>=$pos[1] Then
$xplus=$pos[0]-$winpos[0]-100
$yplus=$pos[1]-$winpos[1]-35
while _IsPressed("1")
$pos=MouseGetPos()
winmove($title,"",$pos[0]-100-$xplus,$pos[1]-35-$yplus)
$fx=$pos[0]-100-$xplus
$fy=$pos[1]-35-$yplus
if $fx<-100 then
winmove($title,"",-100,$fy)
$fx=-100
endif
if $fy<-35 then
winmove($title,"",$fx,-35)
$fy=-35
endif
if $fx>@DesktopWidth-225 then
winmove($title,"",@DesktopWidth-225,$fy)
$fx=@DesktopWidth-225
endif
if $fy>@DesktopHeight-160 then
winmove($title,"",$fx,@DesktopHeight-160)
$fy=@DesktopHeight-160
endif
sleep(50)
WEnd
EndIf
EndIf
sleep(50)
WEnd
ende()
Func ende()
iniwrite("Uhr.ini","coords","x",$fx)
iniwrite("Uhr.ini","coords","y",$fy)
winsetontop($title,"",0)
adlibunregister("x")
_GDIPlus_PenDispose($pen)
_GDIPlus_PenDispose($pen2)
_GDIPlus_PenDispose($pen3)
_GDIPlus_GraphicsDispose($gra)
_GDIPlus_BitmapDispose($uhr)
_GDIPlus_BitmapDispose($buffer)
_GDIPlus_Shutdown()
Exit
EndFunc
func Redraw_GUI($hWnd, $msg, $wParam, $lParam)
_WinAPI_RedrawWindow($hWnd, "", "", $RDW_UPDATENOW + $RDW_FRAME)
;~ _GDIPlus_GraphicsClear($backgra,0x00000000)
_GDIPlus_GraphicsDrawImage($backgra,$uhr,100,35)
$winkel=int(stringmid(_NowTime(),7,2))+30
_GDIPlus_GraphicsDrawLine($backgra,$iX_2,$iY_2,$iX_2 + $zeiger_l1 * Sin($winkel * -6 * $Pi_Div_180),$iY_2 + $zeiger_l1 * Cos($winkel * -6 * $Pi_Div_180), $pen)
$winkel=int(stringmid(_NowTime(),4,2))+30
_GDIPlus_GraphicsDrawLine($backgra,$iX_2,$iY_2,$iX_2 + $zeiger_l2 * Sin($winkel * -6 * $Pi_Div_180),$iY_2 + $zeiger_l2 * Cos($winkel * -6 * $Pi_Div_180), $pen2)
$winkel=(int(stringmid(_NowTime(),1,2))+6)*5
_GDIPlus_GraphicsDrawLine($backgra,$iX_2,$iY_2,$iX_2 + $zeiger_l3 * Sin($winkel * -6 * $Pi_Div_180),$iY_2 + $zeiger_l3 * Cos($winkel * -6 * $Pi_Div_180), $pen3)
_GDIPlus_GraphicsDrawImageRect($gra,$buffer,0,0,256,175)
EndFunc
func x()
GUICtrlSetData($Label1,"")
endfunc
Bild ist im Anhang
PS: Das Uhrbild ist nicht so überragend
EDIT:
Der Stundezeiger war falsch, berichtig.
EDIT 2:
Modifikation von UEZ einbezogen.