Statusbar

  • Hallo,

    kann man einer Statusbar einen anderen Cursor verpassen und ein event beim Anklicken auslösen? Ich möchte beim Klick auf meine Homepage verlinken.

    $info_own = "meine Homepage"

    $StatusBar = _GUICtrlStatusBar_Create($Form)
    Dim $StatusBar_PartsWidth[1] = [-1]
    _GUICtrlStatusBar_SetParts($StatusBar, $StatusBar_PartsWidth)
    _GUICtrlStatusBar_SetText($StatusBar, @TAB & $info_own, 0)
    _GUICtrlStatusBar_SetMinHeight($StatusBar, 25)

    freundliche Grüße

    • Offizieller Beitrag

    Ja.
    Kontinuierlich Abfragen ob Maus über der Statusbar. Wenn ja: Cursor setzen auf Hand-Symbol, wenn nein zurücksetzen auf Standard.
    Auswertung Mausklick: Wenn Leftklick und Cursor über Statusbar dann Aktion ausführen.

    Edit: Nur Öffnen, wenn du keine Idee hast, wie man das umsetzt.

    Spoiler anzeigen
    [autoit]

    $gui = GUICreate('Test')
    $info_own = "meine Homepage"

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

    $StatusBar = _GUICtrlStatusBar_Create($gui)
    Dim $StatusBar_PartsWidth[1] = [-1]
    _GUICtrlStatusBar_SetParts($StatusBar, $StatusBar_PartsWidth)
    _GUICtrlStatusBar_SetText($StatusBar, @TAB & $info_own, 0)
    _GUICtrlStatusBar_SetMinHeight($StatusBar, 25)

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    $MouseOver = _MouseOverBar()
    _SwitchCursor($MouseOver)
    Switch $nMsg
    Case -3
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    If $MouseOver Then ConsoleWrite('Klick auf Statusbar' & @LF) ; ShellExecute('http://www.Deine-Homepage.de')
    EndSwitch
    WEnd

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

    Func _MouseOverBar()
    local $old = Opt('MouseCoordMode', 0)
    Local $aM = MouseGetPos()
    Opt('MouseCoordMode', $old)
    Local Static $yBar = 0, $hBar = 0, $wGui = 0
    If $hBar = 0 Then
    Local $aGui = WinGetPos($gui)
    local $tRect = _WinAPI_GetClientRect($StatusBar)
    $hBar = _GUICtrlStatusBar_GetHeight($StatusBar)
    $yBar = $aGui[3] - DllStructGetData($tRect, "Bottom")
    $wGui = $aGui[2]
    EndIf
    If $aM[1] >= $yBar And $aM[1] <= $yBar + $hBar And _
    $aM[0] >=0 And $aM[0] <= $wGui Then
    Return True
    Else
    Return False
    EndIf
    EndFunc

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

    Func _SwitchCursor($_over)
    Local Static $cursHand = False
    If $_over And (Not $cursHand) Then
    GUISetCursor(0, 1)
    $cursHand = True
    ElseIf (Not $_over) And $cursHand Then
    GUISetCursor(2)
    $cursHand = False
    EndIf
    EndFunc

    [/autoit]
  • Ja ich vergaß ;(

    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <WindowsConstants.au3>

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

    $info_own = "© ich selbst"

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

    Opt("GUIOnEventMode", 1)

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

    #Region ### START Koda GUI section ###

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

    $Form = GUICreate("Statusbar ", 384, 117, 331, 139)
    GUISetOnEvent($GUI_EVENT_CLOSE, "FormClose")

    $StatusBar = _GUICtrlStatusBar_Create($Form)
    Dim $StatusBar_PartsWidth[1] = [-1]
    _GUICtrlStatusBar_SetParts($StatusBar, $StatusBar_PartsWidth)
    _GUICtrlStatusBar_SetText($StatusBar, @TAB & $info_own, 0)
    _GUICtrlStatusBar_SetMinHeight($StatusBar, 31)
    $BT_Ende = GUICtrlCreateButton("Ende", 280, 30, 96, 33)
    GUICtrlSetOnEvent($BT_Ende, "BT_EndeClick")
    GUISetState(@SW_SHOW)

    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    $MouseOver = _MouseOverBar()
    _SwitchCursor($MouseOver)
    Switch $nMsg
    Case -3
    Exit

    Case $GUI_EVENT_PRIMARYDOWN
    If $MouseOver Then ShellExecute("notepad.exe")

    EndSwitch
    WEnd

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

    Func _MouseOverBar()
    local $old = Opt('MouseCoordMode', 0)
    Local $aM = MouseGetPos()
    Opt('MouseCoordMode', $old)
    Local Static $yBar = 0, $hBar = 0, $wGui = 0
    If $hBar = 0 Then
    ;Local $aGui = WinGetPos($gui)
    Local $aGui = WinGetPos("[active]")
    local $tRect = _WinAPI_GetClientRect($StatusBar)
    $hBar = _GUICtrlStatusBar_GetHeight($StatusBar)
    $yBar = $aGui[3] - DllStructGetData($tRect, "Bottom")
    $wGui = $aGui[2]
    EndIf
    If $aM[1] >= $yBar And $aM[1] <= $yBar + $hBar And $aM[0] >=0 And $aM[0] <= $wGui Then
    Return True
    Else
    Return False
    EndIf
    EndFunc

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

    Func _SwitchCursor($_over)
    Local Static $cursHand = False
    If $_over And (Not $cursHand) Then
    GUISetCursor(0, 1)
    $cursHand = True
    ElseIf (Not $_over) And $cursHand Then
    GUISetCursor(2)
    $cursHand = False
    EndIf
    EndFunc

    Func BT_EndeClick()
    Exit
    EndFunc

    Func FormClose()
    Exit
    EndFunc

    [/autoit]

    Funktioniert ganz gut, nur beim Klick auf die SrarBar passiert nichts:

    [autoit]

    Case $GUI_EVENT_PRIMARYDOWN
    If $MouseOver Then ShellExecute("notepad.exe")

    [/autoit]

    Warum passiert da nichts?

  • Hi,

    Zitat

    Ja ich vergaß ;(

    wie, "vergaß"?
    Schau mal links bei Downloads, OrganizeIncludes, wenn du das nicht installiert und auf eine der F-Tasten gelegt hast, gehört dir ehrlich gesagt nicht mal eine Antwort sondern ein Rausschmiss hier^^
    Ich habe seit Jahren keine einzige #include-Anweisung geschrieben! Bevor ich das erste Mal ein Script per F5 starte wird reflexarig auf F2 (bei mir OrganizeIncludes) gedroschen. Thema Konstanten und Funktionen erledigt....