Neues Include für Labels

  • Moin

    Falls es ein Ähnliches Include bereits gibt tut es mir leid. (Dann ist dieser Thread wohl unnötig)
    Da ich aber keines gefunden habe gehe ich davon aus, dass ein solches Include noch nicht besteht.

    Der Sinn des Includes ist es ein Label erstellen zu können, was ich ändert, sobalt man es mit der Maus berührt.

    [autoit]

    #region _Hoverlabel;

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

    ;===============================================================================
    ;
    ; Name der Funktion:
    ; _HoverLabel
    ;
    ; Beschreibung:
    ; Ermöglicht es Labels zu erstellen, die Bei Berührung mit der
    ; Maus ihren Inhalt sowie ihre SchriftFarbe verändern.
    ;
    ; Verwendete Variablen:
    ; $GUI = Name der Gui
    ; $HLtext1 = Anzeigetext wenn die Maus NICHT über dem Label ist
    ; $HLleft = Abstand von Links
    ; $HLtop = Abstand von Obel
    ; $HLwidth = Breite des Labels
    ; $HLheight = Höhe des labels
    ; [Nicht Notwendig] $HLalign = Ausrichtung ($SS_CENTER, $SS_LEFT, $SS_RIGHT)
    ; [Nicht Notwendig] $HLtextsize = Textgröße
    ; [Nicht Notwendig] $HLcolor1 = Textfarbe wenn die Maus NICHT über dem Label ist
    ; $HLtext2 = Text wenn die Maus über dem Label ist
    ; [Nicht Notwendig] $HLcolor2 = Textfarbe wenn die Maus über dem Label ist
    ;
    ; Alle nicht notwendigen Variablen dürfen durch "" ersetzt werden
    ; falls sie nicht gebraucht werden. Die Anderen MÜSSEN angegeben werden.
    ;
    ; Nötige Includes:
    ; #include <array.au3>
    ; #include <StaticConstants.au3>
    ; #include <GuiConstants.au3>
    ;
    ; Anwendung:
    ; Nicht wie im Normalfall wird das Label in der Haupt-While-Schleife
    ; eingebracht. Das hat den Vorteil, dass man nur Eine Funktion zur
    ; Erstellung des Labels und zum kontrollieren des Mouseovers braucht.
    ;
    ;
    ; Autor: Marsi
    ;
    ;===============================================================================

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

    #include-once
    #include <array.au3>
    #include <StaticConstants.au3>
    #include <GuiConstants.au3>

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

    Global $HLlast ;TestVariable um Festzustellen, welches Label aktuell gezeigt wird
    Global $HoverLabel ;Der Name unseres Labels

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

    Func _HoverLabel($GUI, $HLtext1, $HLleft, $HLtop, $HLwidth, $HLheight, $HLalign, $HLtextsize, $HLcolor1, $HLtext2, $HLcolor2)

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

    Local $HLpos ;Maus Position

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

    If WinActive($GUI) Then ;Wenn der Gui nicht Aktiv ist braucht das Prog. nicht unnötig rechnen.

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

    $HLpos = GUIGetCursorInfo($GUI) ;Maus Position

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

    If IsArray($HLpos) Then ;Ist die Maus über dem Gui ?

    If $HLpos[4] = $HoverLabel Then ;Ist die Maus über unserem Label ?

    If $HLlast = 0 Then ;Ist das "unter der maus"-Label bereits Verwendet ? Wenn ja (also wenn $HLlast = 1) wird das Label nicht erneut erzeugt

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

    Guictrldelete($HoverLabel) ;Altes Label löschen
    $HoverLabel = GUICtrlCreateLabel($HLtext2, $HLleft, $HLtop, $HLwidth, $HLheight, $HLalign) ;Neues Label erzeugen

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

    If not IsDeclared($HLcolor1) Then ;Wurde eine Wunschfarbe (Wunschfarbe1) angegeben ?
    GUICtrlSetColor($HoverLabel, $HLcolor1)
    EndIf

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

    If not IsDeclared($HLtextsize) Then ;Wurde eine Wunschtextgröße angegeben ?
    GUICtrlSetFont($HoverLabel, $HLtextsize)
    EndIf

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

    $HLlast = 1 ;$HLlast = 1 bedeutet, dass Das Label unter der Aktuellen Mausposition ist und dementsprechend geändert wurde
    EndIf

    Else ;Ist die Maus Nicht über dem Label ?

    If $HLlast = 1 Then ;Ist das "normal"-Label bereits Verwendet ? Wenn ja (also wenn $HLlast = 0) wird das Label nicht erneut erzeugt

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

    Guictrldelete($HoverLabel) ;Altes Label löschen
    $HoverLabel = GUICtrlCreateLabel($HLtext1, $HLleft, $HLtop, $HLwidth, $HLheight, $HLalign) ;Neues Label erzeugen

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

    If not IsDeclared($HLcolor2) Then ;Wurde eine Wunschfarbe (Wunschfarbe2) angegeben ?
    GUICtrlSetColor($HoverLabel, $HLcolor2)
    EndIf

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

    If not IsDeclared($HLtextsize) Then ;Wurde eine Wunschtextgröße angegeben ?
    GUICtrlSetFont($HoverLabel, $HLtextsize)
    EndIf

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

    $HLlast = 0 ;$HLlast = 0 bedeutet, dass Das Label nicht unter der Aktuellen Mausposition ist und dementsprechend geändert wurde
    EndIf

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

    EndIf

    EndIf

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

    EndIf

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

    EndFunc ;==>_HoverLabel
    #endregion

    [/autoit]

    Die Erklärung habe ich komplett auf Deutsch geschrieben, obwohl die Variablennamen auf Englisch sind. Aber ich schätze das erklärt sich eh von selbst.

    Unten enthalten ist das Include und ein kleines Skript, welches Die Funktion Zeigt.

    [autoit]

    #include <_HoverLabel.au3>

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

    $Testgui = GUICreate("Testgui", 200, 100)

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

    GUISetState(@SW_SHOW)

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

    while 1
    $msg = GUIGetMsg()

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

    _HoverLabel($Testgui, "Guten Abend", 30, 30, 140, 30, $SS_CENTER, 17, 0xFF0000, "[Guten Abend]", 0x000000)

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

    Select
    case $msg = $GUI_EVENT_CLOSE
    exit

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

    EndSelect
    WEnd

    [/autoit]

    mfg
    Marsi

    • Offizieller Beitrag

    Aber warum löschst du ständig das Ctrl und erstellst es wieder neu? Status HIDE / SHOW ist doch besser geeignet und schont deine Ressourcen.

    Edit:
    So meine ich, ist doch einfacher und übersichtlicher. ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Global $label_off, $label_on, $oldState = False, $isOver = False

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

    $gui = GUICreate('')
    $label_off = GUICtrlCreateLabel('Label', 10, 10)
    $label_on = GUICtrlCreateLabel('Label', 10, 10)
    GUICtrlSetFont(-1, 9, 400, Default, 'Times New Roman')
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlSetState($label_on, $GUI_HIDE)

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

    AdlibRegister('_MousePos')

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

    GUISetState()

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

    Do
    Until GUIGetMsg() =-3

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

    Func _MousePos()
    Local $cursor = GUIGetCursorInfo()
    If Not StringInStr($label_off & ' ' & $label_on, $cursor[4]) Then
    $isOver = False
    Else
    $isOver = True
    EndIf
    If $oldState = $isOver Then Return
    $oldState = $isOver
    Switch $oldState
    Case True
    GUICtrlSetState($label_off, $GUI_HIDE)
    GUICtrlSetState($label_on, $GUI_SHOW)
    Case Else
    GUICtrlSetState($label_on, $GUI_HIDE)
    GUICtrlSetState($label_off, $GUI_SHOW)
    EndSwitch
    EndFunc

    [/autoit]