Anzeige eines Kalenders wenn Maus auf Tray möglich?

  • hiho,

    habe noch nix dazu gebastelt. die idee kam mir diese nacht.
    warum ich das machen will? auf der arbeit haben alle user nur eingeschränkte recht und sind nicht berechtigt, auf die uhrzeit zu klicken und dann kurz mit dem kalender zu arbeiten.
    nur entwerfe ich grad ein programm, dass einige sinnvolle funktionen für den user enthalten soll ... da kam mir die idee, wenn man mal kurz nen kalender braucht.

    wäre dies generell möglich und wie aufwänig wäre es? sinnvoll wäre vllt 3 monate, den abgelaufenen, die aktuellen und den kommenden.
    wie wird der kalender gepflegt? muss alles komplett im programm hinterlegt werden oder kann man das einfacher machen?

  • Moin sc4ry,

    Also einen Kalender erstellst du mit '_GUICtrlMonthCal_Create()'.
    Hast du vielleicht für mich einen Startpunkt um was im Tray anzuzeigen?
    Dann helf ich dir gerne :D

  • hiho.

    ah, ne eigene funktion hört sich auch schonmal gut an =)

    also hier ist mein script in mini, mit der funktion (die auch beibehalten werden soll, wenns geht), rechts und links-klick auf das tray mit unterschiedlichen aktionen auszuführen

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Include <GuiConstants.au3>

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

    Opt("GuiOnEventMode",1)
    Opt("TrayIconHide", 0)
    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)

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

    Global $writer

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

    $trayexit = TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1,"_TrayExit")
    ; eigene Funktion bei Linksklick.
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "TrayMenuLeftClick")

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

    $writer = GUICreate("WRiTeR", 250, 400, @DesktopWidth - 270, @DesktopHeight - 430, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    WinSetOnTop($writer,'',1)
    WinSetTrans($writer,'', 100)
    GUICtrlCreateEdit("", 5, 5, 240, 390)

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

    TraySetState() ; Traymenü anzeigen
    TraySetClick(16) ; bei Secondary Up Menü anzeigen.
    GUISetState(@SW_SHOW, $writer)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _TrayExit()
    Exit
    EndFunc

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

    Func TrayMenuLeftClick()
    $winstate = WinGetState($writer,'')
    If BitAnd($winstate, 2) Then
    WinSetState($writer,'',@SW_HIDE)
    Else
    WinSetState($writer,'',@SW_SHOW)
    EndIf
    EndFunc

    [/autoit]

    schonmal vielen dank =)

  • Meintest du so was? ;)

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Include <GUIConstants.au3>
    #Include <GUIMonthCal.au3>

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

    Opt("GuiOnEventMode",1)
    Opt("TrayIconHide", 0)
    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)

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

    Global $writer

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

    $traycalender = TrayCreateItem("Kalender")
    TrayItemSetOnEvent($traycalender,"_TrayCalender")
    $trayinput = TrayCreateItem("Eingabe")
    TrayItemSetOnEvent($trayinput,"_TrayInput")
    $trayexit = TrayCreateItem("Exit")
    TrayItemSetOnEvent($trayexit,"_TrayExit")

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

    ; eigene Funktion bei Linksklick.
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "TrayMenuLeftClick")

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

    $calender = GUICreate("Kalender", 180, 180, @DesktopWidth - 200, @DesktopHeight - 210, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    WinSetTrans($calender,'', 150)
    _GUICtrlMonthCal_Create($calender, 5, 5)

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

    $writer = GUICreate("WRiTeR", 250, 400, @DesktopWidth - 270, @DesktopHeight - 430, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    WinSetOnTop($writer,'',1)
    WinSetTrans($writer,'', 100)
    GUICtrlCreateEdit("", 5, 5, 240, 390)

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

    TraySetState() ; Traymenü anzeigen
    TraySetClick(16) ; bei Secondary Up Menü anzeigen.
    GUISetState(@SW_SHOW, $writer)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _TrayCalender()
    WinSetState($writer,'',@SW_HIDE)
    WinSetState($calender,'',@SW_SHOW)
    EndFunc

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

    Func _TrayInput()
    WinSetState($calender,'',@SW_HIDE)
    WinSetState($writer,'',@SW_SHOW)
    EndFunc

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

    Func _TrayExit()
    Exit
    EndFunc

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

    Func TrayMenuLeftClick()
    $winstate = WinGetState($writer,'')
    If BitAnd($winstate, 2) Then
    WinSetState($writer,'',@SW_HIDE)
    Else
    WinSetState($writer,'',@SW_SHOW)
    EndIf
    EndFunc

    [/autoit]

    Sag Bescheid was noch fehlt.

  • ja genau, das ist schon ziemlich geil.

    was ich dann noch gerne hätte, ka ob das überhaupt möglich ist, dass der kalender erscheint, wenn man nur die maus für ca. 3 sek auf das traysymbol hält (ohne klick).
    wenn dann die maus vom traysymbol wieder weggeht, soll der kalender wieder ausgeblendet werden (es sein denn, die maus befindet sich danach auf dem kalender, um zB zw den monaten zu switchen) ...

    weißt du was ich meine?

  • Joah, ich weiß was du meinst.
    Mal gucken ob so was möglich ist.
    Ich schau mal und meld mich dann ^^

  • Alter, das war heftig 8o
    Hab's aber hingekriegt :thumbup:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Include <GUIConstants.au3>
    #Include <GUIMonthCal.au3>

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

    Opt("GuiOnEventMode",1)
    Opt("TrayIconHide", 0)
    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)

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

    Global $writer, $calender
    Global $timerStart, $timerMouse
    Global $bTimerStarted, $bMouseOver, $bCalShown
    Global $iCalLeft, $iCalRight, $iCalTop, $iCalBottom

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

    $traycalender = TrayCreateItem("Kalender")
    TrayItemSetOnEvent($traycalender,"_TrayCalender")
    $trayinput = TrayCreateItem("Eingabe")
    TrayItemSetOnEvent($trayinput,"_TrayInput")
    $trayexit = TrayCreateItem("Exit")
    TrayItemSetOnEvent($trayexit,"_TrayExit")

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

    AdlibEnable( "CheckMouseCalender" )

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

    ; eigene Funktion bei Linksklick.
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "TrayMenuLeftClick")
    TraySetOnEvent($TRAY_EVENT_MOUSEOVER, "TrayMenuCheckCalender")

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

    $iCalLeft = @DesktopWidth - 200
    $iCalRight = @DesktopWidth - 20
    $iCalTop = @DesktopHeight - 210
    $iCalBottom = @DesktopHeight - 30
    $calender = GUICreate("Kalender", 180, 180, $iCalLeft, $iCalTop, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    WinSetTrans($calender,'', 150)
    _GUICtrlMonthCal_Create($calender, 5, 5)

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

    $writer = GUICreate("WRiTeR", 250, 400, @DesktopWidth - 270, @DesktopHeight - 430, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    WinSetOnTop($writer,'',1)
    WinSetTrans($writer,'', 100)
    GUICtrlCreateEdit("", 5, 5, 240, 390)

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

    TraySetState() ; Traymenü anzeigen
    TraySetClick(16) ; bei Secondary Up Menü anzeigen.
    GUISetState(@SW_SHOW, $writer)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _TrayCalender()
    $bTimerStarted = False
    WinSetState($writer,'',@SW_HIDE)
    WinSetState($calender,'',@SW_SHOW)
    EndFunc

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

    Func _TrayInput()
    $bTimerStarted = False
    WinSetState($calender,'',@SW_HIDE)
    WinSetState($writer,'',@SW_SHOW)
    EndFunc

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

    Func _TrayExit()
    Exit
    EndFunc

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

    Func TrayMenuCheckCalender()
    $bMouseOver = True
    $timerMouse = @MIN * 100 + @SEC
    EndFunc

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

    Func TrayMenuLeftClick()
    $winstate = WinGetState($writer,'')
    If BitAnd($winstate, 2) Then
    WinSetState($writer,'',@SW_HIDE)
    Else
    WinSetState($writer,'',@SW_SHOW)
    EndIf
    EndFunc

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

    Func CheckMouseCalender()
    $bHideCal = False
    If $bCalShown Then
    $pos = MouseGetPos()
    If $pos[0] < $iCalLeft Or $pos[0] > $iCalRight Or $pos[1] < $iCalTop Or $pos[1] > $iCalBottom Then
    $bHideCal = True
    EndIf
    EndIf
    If $bHideCal And (@MIN * 100 + @SEC) - $timerMouse > 2 Then
    $bTimerStarted = False
    $bMouseOver = False
    If $bCalShown Then
    WinSetState($calender,'',@SW_HIDE)
    WinSetState($writer,'',@SW_SHOW)
    $bCalShown = False
    EndIf
    ElseIf $bMouseOver Then
    Local $timerDiff
    If $bTimerStarted Then
    If $timerStart > @SEC Then
    $timerDiff = (@SEC + 60) - $timerStart
    Else
    $timerDiff = @SEC - $timerStart
    EndIf
    If $timerDiff > 2 Then
    WinSetState($writer,'',@SW_HIDE)
    WinSetState($calender,'',@SW_SHOW)
    $bCalShown = True
    EndIf
    Else
    $bTimerStarted = True
    $timerStart = @SEC
    EndIf
    EndIf
    EndFunc

    [/autoit]

    So jetzt will ich nen Lolly :D
    Hoffe du guckst es dir an und lernst ein bisschen draus (auch wenn es ein übles gebastel war ;) )

    Edit : McPoldy
    Ich finde deine Idee mit den drei Kalendern klasse, aber wenn ich im mittleren was auswähle ändern sich die anderen beiden...
    Kann man das entkoppeln?

    Einmal editiert, zuletzt von JanSchmidt (26. Februar 2008 um 11:06)

  • Die Idee find ich gut, hab mir mal grade was zusammengebastelt. Ich brauche nur die Kalenderfunktion, aber kannst ja mal schauen wie ich es mit den drei Kalendern gemacht habe.
    Ich bastele aber auch noch an deinem weiter :) [Edit: Brauch ich wohl nicht mehr, Jan war schneller]

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Include <GuiConstants.au3>
    #include <Date.au3>

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

    Opt("GuiOnEventMode",1)
    Opt("TrayIconHide", 0)
    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)
    TraySetIcon("shell32.dll",21)
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "_LinksKlick")
    $trayexit = TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1,"_Exit")

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

    TraySetState()
    TraySetClick(16)
    ;~ HotKeySet('{ESC}', "_Exit")

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

    $sDatePre = _DateAdd( 'm',-1, _NowCalcDate())
    $sDateFut = _DateAdd( 'm',1, _NowCalcDate())
    $frmCal = GUICreate( "Get date", 600,190, @DesktopWidth - 570, @DesktopHeight - 210, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    $DatePre = GUICtrlCreateMonthCal ($sDatePre,0, 0,190,190,bitor($MCS_NOTODAY , $MCS_NOTODAYCIRCLE,$MCS_WEEKNUMBERS))
    $DateNow = GUICtrlCreateMonthCal (_NowCalcDate(),190, 0,190,190,$MCS_WEEKNUMBERS)
    $DateFut = GUICtrlCreateMonthCal ($sDateFut,380, 0,190,190,bitor($MCS_NOTODAY , $MCS_NOTODAYCIRCLE,$MCS_WEEKNUMBERS))

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

    GUICtrlSetOnEvent($DateNow, "_CalChange")

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _LinksKlick()
    $winstate = WinGetState($frmCal,'')
    If BitAnd($winstate, 2) Then
    WinSetState($frmCal,'',@SW_HIDE)
    AdlibDisable()
    Else
    WinSetState($frmCal,'',@SW_SHOW)
    AdlibEnable('_CalChange',300)
    EndIf
    EndFunc

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

    Func _CalChange()
    $sDatePre = _DateAdd( 'm',-1, GUICtrlRead($DateNow))
    $sDateFut = _DateAdd( 'm',1, GUICtrlRead($DateNow))
    GUICtrlSetData($DatePre,$sDatePre)
    GUICtrlSetData($DateFut,$sDateFut)
    EndFunc

    [/autoit]

    EDIT:
    @Jan wenn die beiden äußeren nicht geändert werden sollen einfach in Adlib raus nehmen, hatte ich nur drinne, weil sc4ry in seinem ersten Post sowas angefragt hatte :)

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

    Einmal editiert, zuletzt von McPoldy (26. Februar 2008 um 11:19)

  • Hiho,

    also die funktion ist echt super.
    leider hat nicht alles einwandfrei geklappt, so dass ich es ein bissel abändern musste, aber so ist es immernoch super.

    jedoch gibt es eine sache, da weiß ich wieder nicht weiter.
    und zwar wird der kalender "immer" angezeigt, sobald ich mit der maus über das traysymbol fahre. egal wie kurz, der kalender blitzt kurz auf und verschwindet wieder.
    kann man das vllt so machen, dass er wirklich nur kommt, wenn man ca 3 sek mit der maus auf dem symbol ist?

    code ist zZ

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Include <GUIConstants.au3>
    #Include <GUIMonthCal.au3>

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

    Opt("GuiOnEventMode",1)
    Opt("TrayIconHide", 0)
    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)

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

    Global $writer, $calender
    Global $timerStart, $timerMouse
    Global $bTimerStarted, $bMouseOver, $bCalShown
    Global $iCalLeft, $iCalRight, $iCalTop, $iCalBottom

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

    $traycalender = TrayCreateItem("Kalender")
    TrayItemSetOnEvent($traycalender,"_TrayCalender")
    $trayinput = TrayCreateItem("Eingabe")
    TrayItemSetOnEvent($trayinput,"_TrayInput")
    $trayexit = TrayCreateItem("Exit")
    TrayItemSetOnEvent($trayexit,"_TrayExit")

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

    AdlibEnable( "CheckMouseCalender" )

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

    ; eigene Funktion bei Linksklick.
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "TrayMenuLeftClick")
    TraySetOnEvent($TRAY_EVENT_MOUSEOVER, "TrayMenuCheckCalender")

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

    $iCalLeft = @DesktopWidth - 200
    $iCalRight = @DesktopWidth - 20
    $iCalTop = @DesktopHeight - 210
    $iCalBottom = @DesktopHeight - 30
    $calender = GUICreate("Kalender", 180, 180, $iCalLeft, $iCalTop, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    WinSetOnTop($calender, "", 1)
    ;WinSetTrans($calender,'', 150)
    _GUICtrlMonthCal_Create($calender, 5, 5)

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

    $writer = GUICreate("WRiTeR", 250, 400, @DesktopWidth - 270, @DesktopHeight - 430, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW )
    WinSetOnTop($writer,'',1)
    WinSetTrans($writer,'', 100)
    GUICtrlCreateEdit("", 5, 5, 240, 390)

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

    TraySetState() ; Traymenü anzeigen
    TraySetClick(16) ; bei Secondary Up Menü anzeigen.
    GUISetState(@SW_SHOW, $writer)

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

    While 1
    Sleep(100)
    WEnd

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

    Func _TrayCalender()
    $bTimerStarted = False
    ;WinSetState($writer,'',@SW_HIDE)
    WinSetState($calender,'',@SW_SHOW)
    EndFunc

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

    Func _TrayInput()
    $bTimerStarted = False
    WinSetState($calender,'',@SW_HIDE)
    ;WinSetState($writer,'',@SW_SHOW)
    EndFunc

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

    Func _TrayExit()
    Exit
    EndFunc

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

    Func TrayMenuCheckCalender()
    $bMouseOver = True
    $timerMouse = @MIN * 100 + @SEC
    EndFunc

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

    Func TrayMenuLeftClick()
    $winstate = WinGetState($writer,'')
    If BitAnd($winstate, 2) Then
    WinSetState($writer,'',@SW_HIDE)
    Else
    WinSetState($writer,'',@SW_SHOW)
    EndIf
    EndFunc

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

    Func CheckMouseCalender()
    $bHideCal = False
    If $bCalShown Then
    $pos = MouseGetPos()
    If $pos[0] < $iCalLeft Or $pos[0] > $iCalRight Or $pos[1] < $iCalTop Or $pos[1] > $iCalBottom Then
    $bHideCal = True
    EndIf
    EndIf
    If $bHideCal And (@MIN * 100 + @SEC) - $timerMouse > 2 Then
    $bTimerStarted = False
    $bMouseOver = False
    If $bCalShown Then
    WinSetState($calender,'',@SW_HIDE)
    ;WinSetState($writer,'',@SW_SHOW)
    $bCalShown = False
    EndIf
    ElseIf $bMouseOver Then
    Local $timerDiff
    If $bTimerStarted Then
    If $timerStart > @SEC Then
    $timerDiff = (@SEC + 60) - $timerStart
    Else
    $timerDiff = @SEC - $timerStart
    EndIf
    If $timerDiff > 2 Then
    ;WinSetState($writer,'',@SW_HIDE)
    WinSetState($calender,'',@SW_SHOW)
    $bCalShown = True
    EndIf
    Else
    $bTimerStarted = True
    $timerStart = @SEC
    EndIf
    EndIf
    EndFunc

    [/autoit]
  • Sorry das ich den Thread nochmal hoch hole aber bei der neuesten autoit version klappt der script nicht mehr...

    "ERROR: $WS_POPUPWINDOW: undeclared global variable."

    Wie kann ich das beheben, gibt es wieder neue Befehle ??

  • Danke dir für die Hilfe, ich bin aus zeitlichen gründen nicht mehr so aktiv mit autoit. Finde schade das sich grad soviel tut, vorallem mit den Befehlen 50% meiner alten scripts funktionieren z.B. nicht mehr =(

    • Offizieller Beitrag

    50% meiner alten scripts funktionieren z.B. nicht mehr =(

    Benutze OrganizeIncludes (OI) von Xeno. Dann brauchst Du nur Deine Scripte einmal mit Scite öffnen, OI drüberlaufen lassen und wieder abspeichern. Anschließend kannst Du die Scripte wieder ausführen. Jedenfalls, wenn es an den neuen Includes gelegen hat.