• 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
    [autoit]


    #notrayicon
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #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 ###

    [/autoit] [autoit][/autoit] [autoit]

    _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

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    GUIRegisterMsg(0x000F, "Redraw_GUI")
    adlibregister("uhrzeit",500)
    GUISetOnEvent($GUI_EVENT_CLOSE,"ende")

    [/autoit] [autoit][/autoit] [autoit]

    While sleep(10000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    func uhrzeit()
    GUICtrlSetData($Label2,_NowDate())
    GUICtrlSetData($Label4,_NowTime())
    endfunc

    [/autoit]


    Nur Zeigeruhr, oben links in der Ecke: (Updated: Uhr bewegbar)

    Spoiler anzeigen
    [autoit]


    #notrayicon
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Date.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    GUIRegisterMsg(0x000F, "Redraw_GUI")
    GUISetOnEvent($GUI_EVENT_CLOSE,"ende")

    [/autoit] [autoit][/autoit] [autoit]

    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()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    func x()
    GUICtrlSetData($Label1,"")
    endfunc

    [/autoit]

    Bild ist im Anhang

    PS: Das Uhrbild ist nicht so überragend :D

    EDIT:
    Der Stundezeiger war falsch, berichtig.

    EDIT 2:
    Modifikation von UEZ einbezogen.

  • Sorry, da bin ich überfragt: Bei mir klappt es und mir fällt nicht ein wie ich das ändern könnte das er eine Grafik cleart ohne das die Labels dabei draufgehn :wacko:

    EDIT: Warscheinlich liegt das an der automatischen Transparenz oder so. Versuch doch mal das weiße im Bild mit einer fast weißen Farbe zu ersetzen.

    Habe mal die Bildversion mit RGB 255,254,255 statt alles 255 angehängt, damit kannst du es nochmal versuchen.

  • Schau dir doch mal das Beispielscript aus dem Autoit Ordner an:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("MustDeclareVars", 1)

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Description ...: Simple clock using layered windows
    ; Author ........: Paul Campbell (PaulIA)
    ; Notes .........:
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Global constants
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $iCenter = 200
    Global Const $iDotOpacity = 250
    Global Const $iHourRad = 140
    Global Const $iMinRad = 200
    Global Const $iOpacity = 128
    Global Const $nPI = 3.1415926535897932384626433832795
    Global Const $iRadius = 200
    Global Const $iSecRad = 200
    Global Const $iTickLen = 0.02

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $AC_SRC_ALPHA = 1

    [/autoit] [autoit][/autoit] [autoit]

    Global Enum $eScrDC=0, $eMemDC, $eBitmap, $eWidth, $eHeight, $eGraphic, $ePen, $eCap, $eBrush, $eFormat, $eFamily, $eFont, $eLayout, $eLast

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Global variables
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Global $hDial, $hTime, $hHour, $hMin, $hSec, $hDot, $aTime, $aHour, $aMin, $aSec, $aCurr[3][2], $aLast[3][2]

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Main
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    ClockInit()
    DialDraw ()
    Draw ()
    DotDraw ()
    ClockLoop()
    ClockDone()

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Finalize clock
    ; ===============================================================================================================================
    Func ClockDone()
    ; Finalize GDI+ resources
    TimeDone()
    HourDone()
    MinDone ()
    SecDone ()

    [/autoit] [autoit][/autoit] [autoit]

    ; Finalize GDI+ library
    _GDIPlus_Shutdown()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Initialize clock
    ; ===============================================================================================================================
    Func ClockInit()
    Local $iX, $iY

    [/autoit] [autoit][/autoit] [autoit]

    ; Calculate the dial frame caption size
    $iX = -(_WinAPI_GetSystemMetrics($SM_CXFRAME))
    $iY = -(_WinAPI_GetSystemMetrics($SM_CYCAPTION) + _WinAPI_GetSystemMetrics($SM_CYFRAME))

    [/autoit] [autoit][/autoit] [autoit]

    ; Allocate the window resources
    $hDial = GUICreate("Clock", $iRadius * 2, $iRadius * 2, -1, -1, 0, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    GUISetState()
    $hTime = GUICreate("Time" , $iRadius * 2, $iRadius * 2, $iX, $iY, 0, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hDial)
    GUISetState()
    $hHour = GUICreate("Hour" , $iRadius * 2, $iRadius * 2, $iX, $iY, 0, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hDial)
    GUISetState()
    $hMin = GUICreate("Min" , $iRadius * 2, $iRadius * 2, $iX, $iY, 0, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hDial)
    GUISetState()
    $hSec = GUICreate("Sec" , $iRadius * 2, $iRadius * 2, $iX, $iY, 0, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hDial)
    GUISetState()
    $hDot = GUICreate("Dot" , $iRadius * 2, $iRadius * 2, $iX, $iY, 0, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $hDial)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    ; Initialize GDI+ library
    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    ; Initialize GDI+ resources
    TimeInit()
    HourInit()
    MinInit ()
    SecInit ()

    [/autoit] [autoit][/autoit] [autoit]

    ; Hook non client hit test message so we can move the clock
    GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Loop until user exits
    ; ===============================================================================================================================
    Func ClockLoop()
    do
    Draw()
    until GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Draw the center dot
    ; ===============================================================================================================================
    Func DotDraw()
    Local $aDot

    [/autoit] [autoit][/autoit] [autoit]

    $aDot = ResourceInit($iRadius * 2, $iRadius * 2)
    _GDIPlus_GraphicsFillEllipse($aDot[$eGraphic], $iRadius-10, $iRadius-10, 20, 20)
    ResourceSet ($hDot, $aDot, $iDotOpacity)
    ResourceDone($aDot)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Draw the clock elements
    ; ===============================================================================================================================
    Func Draw()
    ; Calculate current time element position
    $aLast = $aCurr
    $aCurr[0][0] = $iCenter + Cos(TimeToRadians("sec" )) * $iSecRad
    $aCurr[0][1] = $iCenter - Sin(TimeToRadians("sec" )) * $iSecRad
    $aCurr[1][0] = $iCenter + Cos(TimeToRadians("min" )) * $iMinRad
    $aCurr[1][1] = $iCenter - Sin(TimeToRadians("min" )) * $iMinRad
    $aCurr[2][0] = $iCenter + Cos(TimeToRadians("hour")) * $iHourRad
    $aCurr[2][1] = $iCenter - Sin(TimeToRadians("hour")) * $iHourRad

    [/autoit] [autoit][/autoit] [autoit]

    ; Draw time elements
    TimeDraw()
    HourDraw()
    MinDraw ()
    SecDraw ()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Draw the clock dial
    ; ===============================================================================================================================
    Func DialDraw()
    Local $aDial, $hPen1, $hPen2, $iI, $iN, $iX1, $iY1, $iX2, $iY2

    [/autoit] [autoit][/autoit] [autoit]

    $aDial = ResourceInit($iRadius * 2, $iRadius * 2)
    $hPen1 = _GDIPlus_PenCreate()
    $hPen2 = _GDIPlus_PenCreate(0xFF0000FF, 4)
    for $iI = 0 to 2 * $nPI Step $nPI / 30
    $iX1 = $iCenter + Cos($iI) * ($iRadius * (1.00 - $iTickLen))
    $iY1 = $iCenter - Sin($iI) * ($iRadius * (1.00 - $iTickLen))
    $iX2 = $iCenter + Cos($iI) * $iRadius
    $iY2 = $iCenter - Sin($iI) * $iRadius
    if Mod($iN, 5) = 0 then
    _GDIPlus_GraphicsDrawLine($aDial[$eGraphic], $iX1, $iY1, $iX2, $iY2, $hPen2)
    else
    _GDIPlus_GraphicsDrawLine($aDial[$eGraphic], $iX1, $iY1, $iX2, $iY2, $hPen1)
    endif
    $iN += 1
    next
    _GDIPlus_PenDispose($hPen2)
    _GDIPlus_PenDispose($hPen1)

    [/autoit] [autoit][/autoit] [autoit]

    ResourceSet ($hDial, $aDial)
    ResourceDone($aDial)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Finalize resources for the hour hand
    ; ===============================================================================================================================
    Func HourDone()
    _GDIPlus_PenDispose($aHour[$ePen])
    _GDIPlus_ArrowCapDispose($aHour[$eCap])
    ResourceDone($aHour)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Draw the hour hand
    ; ===============================================================================================================================
    Func HourDraw()
    if ($aLast[2][0] = $aCurr[2][0]) and ($aLast[2][1] = $aCurr[2][1]) then Return
    _GDIPlus_GraphicsDrawLine($aHour[$eGraphic], $iCenter, $iCenter, $aCurr[2][0], $aCurr[2][1], $aHour[$ePen])
    ResourceSet($hHour, $aHour)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Initialize resources for the hour hand
    ; ===============================================================================================================================
    Func HourInit()
    $aHour = ResourceInit($iRadius * 2, $iRadius * 2)
    $aHour[$ePen] = _GDIPlus_PenCreate(0xFFFF00FF)
    $aHour[$eCap] = _GDIPlus_ArrowCapCreate($iHourRad / 2, 8)
    _GDIPlus_PenSetCustomEndCap($aHour[$ePen], $aHour[$eCap])
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Finalize resources for the minute hand
    ; ===============================================================================================================================
    Func MinDone()
    _GDIPlus_PenDispose($aMin[$ePen])
    _GDIPlus_ArrowCapDispose($aMin[$eCap])
    ResourceDone($aMin)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Draw the minute hand
    ; ===============================================================================================================================
    Func MinDraw()
    if ($aLast[1][0] = $aCurr[1][0]) and ($aLast[1][1] = $aCurr[1][1]) then Return
    _GDIPlus_GraphicsFillRect($aMin[$eGraphic], 0, 0, $iRadius * 2, $iRadius * 2)
    _GDIPlus_GraphicsDrawLine($aMin[$eGraphic], $iCenter, $iCenter, $aCurr[1][0], $aCurr[1][1], $aMin[$ePen])
    ResourceSet($hMin, $aMin)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Initialize resources for the minute hand
    ; ===============================================================================================================================
    Func MinInit()
    $aMin = ResourceInit($iRadius * 2, $iRadius * 2)
    $aMin[$ePen] = _GDIPlus_PenCreate(0xFFFF0000)
    $aMin[$eCap] = _GDIPlus_ArrowCapCreate($iMinRad / 2, 8)
    _GDIPlus_PenSetCustomEndCap($aMin[$ePen], $aMin[$eCap])
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Finalize resources for the second hand
    ; ===============================================================================================================================
    Func SecDone()
    _GDIPlus_PenDispose($aSec[$ePen])
    ResourceDone($aSec)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Draw the second hand
    ; ===============================================================================================================================
    Func SecDraw()
    if ($aLast[0][0] = $aCurr[0][0]) and ($aLast[0][1] = $aCurr[0][1]) then Return
    _GDIPlus_GraphicsFillRect($aSec[$eGraphic], 0, 0, $iRadius * 2, $iRadius * 2)
    _GDIPlus_GraphicsDrawLine($aSec[$eGraphic], $iCenter, $iCenter, $aCurr[0][0], $aCurr[0][1], $aSec[$ePen])
    ResourceSet($hSec, $aSec)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Initialize resources for the second hand
    ; ===============================================================================================================================
    Func SecInit()
    $aSec = ResourceInit($iRadius * 2, $iRadius * 2)
    $aSec[$ePen] = _GDIPlus_PenCreate(0xFF000000)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Finalize drawing resources
    ; ===============================================================================================================================
    Func ResourceDone(ByRef $aInfo)
    _GDIPlus_GraphicsDispose($aInfo[$eGraphic])
    _WinAPI_ReleaseDC (0, $aInfo[$eScrDC])
    _WinAPI_DeleteObject($aInfo[$eBitmap])
    _WinAPI_DeleteDC ($aInfo[$eMemDC ])
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Initialize bitmap resources
    ; ===============================================================================================================================
    Func ResourceInit($iWidth, $iHeight)
    Local $aInfo[$eLast + 1]

    [/autoit] [autoit][/autoit] [autoit]

    $aInfo[$eScrDC ] = _WinAPI_GetDC(0)
    $aInfo[$eMemDC ] = _WinAPI_CreateCompatibleDC($aInfo[$eScrDC])
    $aInfo[$eBitmap ] = _WinAPI_CreateCompatibleBitmap($aInfo[$eScrDC], $iWidth, $iHeight)
    _WinAPI_SelectObject($aInfo[$eMemDC], $aInfo[$eBitmap])
    $aInfo[$eWidth ] = $iWidth
    $aInfo[$eHeight ] = $iHeight
    $aInfo[$eGraphic] = _GDIPlus_GraphicsCreateFromHDC($aInfo[$eMemDC])
    _GDIPlus_GraphicsFillRect($aInfo[$eGraphic], 0, 0, $iRadius * 2, $iRadius * 2)
    Return $aInfo
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Update layered window with resource information
    ; ===============================================================================================================================
    Func ResourceSet($hGUI, ByRef $aInfo, $iAlpha=-1)
    Local $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend

    [/autoit] [autoit][/autoit] [autoit]

    if $iAlpha = -1 then $iAlpha = $iOpacity
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize )
    DllStructSetData($tSize, "X", $aInfo[$eWidth ])
    DllStructSetData($tSize, "Y", $aInfo[$eHeight])
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend )
    DllStructSetData($tBlend, "Alpha" , $iAlpha )
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $aInfo[$eScrDC], 0, $pSize, $aInfo[$eMemDC], $pSource, 0, $pBlend, $ULW_ALPHA)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Finalize resources for the digital time
    ; ===============================================================================================================================
    Func TimeDone()
    _GDIPlus_FontDispose ($aTime[$eFont ])
    _GDIPlus_FontFamilyDispose ($aTime[$eFamily])
    _GDIPlus_StringFormatDispose($aTime[$eFormat])
    _GDIPlus_BrushDispose ($aTime[$eBrush ])
    ResourceDone($aTime)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Draw the digital time
    ; ===============================================================================================================================
    Func TimeDraw()
    Local $sString, $aSize

    [/autoit] [autoit][/autoit] [autoit]

    if ($aLast[0][0] = $aCurr[0][0]) and ($aLast[0][1] = $aCurr[0][1]) then Return
    $sString = StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC)
    $aSize = _GDIPlus_GraphicsMeasureString($aTime[$eGraphic], $sString, $aTime[$eFont], $aTime[$eLayout], $aTime[$eFormat])
    DllStructSetData($aTime[$eLayout], "X", $iRadius - (DllStructGetData($aSize[0], "Width") / 2))
    DllStructSetData($aTime[$eLayout], "Y", $iRadius / 3)
    _GDIPlus_GraphicsFillRect($aTime[$eGraphic], 0, 0, $iRadius * 2, $iRadius * 2)
    _GDIPlus_GraphicsDrawStringEx($aTime[$eGraphic], $sString, $aTime[$eFont], $aTime[$eLayout], $aTime[$eFormat], $aTime[$eBrush])
    ResourceSet($hTime, $aTime)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Initialize resources for the digital time
    ; ===============================================================================================================================
    Func TimeInit()
    $aTime = ResourceInit($iRadius * 2, $iRadius * 2)
    $aTime[$eBrush ] = _GDIPlus_BrushCreateSolid(0xFF008080)
    $aTime[$eFormat] = _GDIPlus_StringFormatCreate()
    $aTime[$eFamily] = _GDIPlus_FontFamilyCreate("Arial")
    $aTime[$eFont ] = _GDIPlus_FontCreate($aTime[$eFamily], 24, 1)
    $aTime[$eLayout] = _GDIPlus_RectFCreate(0, 0, $iRadius * 2, 40)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Convert time value to radians
    ; ===============================================================================================================================
    Func TimeToRadians($sTimeType)
    Switch $sTimeType
    case "sec"
    Return ($nPI / 2) - (@SEC * ($nPI / 30))
    case "min"
    Return ($nPI / 2) - (@MIN * ($nPI / 30)) - (Int(@SEC / 10) * ($nPI / 180))
    case "hour"
    Return ($nPI / 2) - (@HOUR * ($nPI / 6 )) - (@MIN / 12) * ($nPI / 30)
    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; ===============================================================================================================================
    ; Handle the WM_NCHITTEST message so our window can be dragged
    ; ===============================================================================================================================
    Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
    if $hWnd = $hDial then Return $HTCAPTION
    EndFunc

    [/autoit]
  • Ist gut geworden!

    Hier ein paar kleine Modifikationen:

    Spoiler anzeigen
    [autoit]


    #notrayicon
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Date.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    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"
    _GDIPlus_Startup()
    global $uhr=_GDIPlus_BitmapCreateFromFile(@ScriptDir&"\Uhr.png")
    global $iX = _GDIPlus_ImageGetWidth($uhr)
    global $iY = _GDIPlus_ImageGetHeight($uhr)
    global $iX_2 = $iX / 2
    Global $iY_2 = $iY / 2
    global $zeiger_l1 = 62
    global $zeiger_l2 = 52
    global $zeiger_l3 = 32
    #Region ### START Koda GUI section ### Form=d:\progen\autoit\meine\forms\analog.kxf
    $Form1 = GUICreate($title, $iX, $iY, $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)

    [/autoit] [autoit][/autoit] [autoit]

    global $pen=_GDIPlus_PenCreate(0xFFFF0000,2)
    global $pen2=_GDIPlus_PenCreate(0xFF0000FF,2)
    global $pen3=_GDIPlus_PenCreate(0xFF0000BB,2)
    global $gra=_GDIPlus_GraphicsCreateFromHWND($Form1)
    global $buffer=_GDIPlus_BitmapCreateFromGraphics($iX,$iY,$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")
    adlibregister("x",100)

    [/autoit] [autoit][/autoit] [autoit]

    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()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    func Redraw_GUI($hWnd, $msg, $wParam, $lParam)
    _WinAPI_RedrawWindow($hWnd, "", "", $RDW_UPDATENOW + $RDW_FRAME)
    ;~ _GDIPlus_GraphicsClear($backgra,0x00000000)
    _GDIPlus_GraphicsDrawImage($backgra,$uhr,0,0)
    $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,$iX,$iY)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func x()
    GUICtrlSetData($Label1,"")
    endfunc

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • *g* durch deine Modifikationen gehts garnichtmehr.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Doch durch die Modifikationen geht es, aber das verschieben und der Rand (gibt Spuren) ist immernoch da :D
    Trotzdem Danke.

    Was meinst du mit "das verschieben und der Rand (gibt Spuren) ist immernoch da"? An den Window Moves habe ich nichts geändert, sondern nur ein wenig an der GUI...

    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯