Hover flackert

  • Folgendes Problem:

    Wenn ich mit der Maus auf das Label gehe ändert sich die Farbe! OK!
    Vergrößere ich das Fenster, dann flackert plätzlich der Text!

    Wenn ich das Hintergrundbild deaktiviere klappt es!

    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

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

    $Form1_1 = GUICreate("Form1", 1009, 770, 513, 94, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_TABSTOP))
    $Pic1 = GUICtrlCreatePic("C:\Hintergrund.jpg", -16, 8, 1024, 768, BitOR($GUI_SS_DEFAULT_PIC,$WS_CLIPSIBLINGS))
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Input1 = GUICtrlCreateInput("Input1", 856, 48, 129, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Tab1 = GUICtrlCreateTab(192, 128, 593, 369)
    GuiCtrlSetState(-1,$GUI_ONTOP)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    GUICtrlCreateTabItem("")
    $Label1 = GUICtrlCreateLabel("Label1", 32, 40, 85, 36, $SS_CENTER)
    GUICtrlSetFont(-1, 20, 400, 0, "Arial")
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUISetState(@SW_SHOW)

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

    Adlibregister("_Hover_Label")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd
    Func _Hover_Label()
    $pos = GUIGetCursorInfo()
    If $pos[4] = $label1 Then
    GUICtrlSetBkColor($label1, 0xFF0000)
    Else
    GUICtrlSetBkColor($label1, -2)
    ;GUICtrlSetBkColor($label1, Default)
    EndIf
    EndFunc

    [/autoit]

    3 Mal editiert, zuletzt von Ilse (9. November 2010 um 12:05)

  • Es ist ja auch klar, dass das Label flackern muss.
    Du gibst ihm immerhin jede viertel Sekunde eine neue Farbe.

    Bau eine Variable ein, die überprüft, ob die Farbe schon gesetzt wurde, das müsste das flackern unterbinden.

    MfG,
    H2112.

    PS:
    Lasst ihn ruhig selber probieren. ;)

    Edit:
    Um eine extreme CPU-Belastung zu vermeiden, würde ich dir empfehlen, ein Sleep in die Schleife zu geben.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

    2 Mal editiert, zuletzt von H2112 (8. November 2010 um 17:36)

  • Hallo,

    Zitat

    Es ist ja auch klar, dass das Label flackern muss

    hm...und wieso flackert es nicht, wenn ich die Größe nicht verändere????

    Wie kann man die Farbe prüfen
    Hab das probiert, geht leider nicht

    [autoit]


    if $label1.color = 0xFF0000 Then
    MsgBox(4,"Farbe","gesetzt")
    endif

    [/autoit]
  • Du nimmst eine Variable, die am Anfang False ist.

    Wenn du nun mit der Maus über das Controle fährst, und die Variable False ist, soll die Farbe geändert werden, und die Variable auf True gesetzt werden.
    Wenn die Maus nicht über dem Controle ist und die Variable True ist, soll die Farbe wieder in die standardtfarbe geändert werden, und die Variable soll wieder auf False gesetzt werden.

    Und dass das so schwer sein soll, kannst du mir nicht einreden, immerhin bekommst du If-Abfragen ja auch hin.

    Pinguin: Hatte ich wohl vergessen. :rolleyes:

    MfG,
    H2112.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • @ kleiner
    es flckert nur wenn die Große geändert wird!

    @h2112
    ...es flackert leider immer noch!

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

    Func _Hover_Label()

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

    $pos = GUIGetCursorInfo()
    $Farbe = false
    If $pos[4] = $label1 and $Farbe = false Then
    GUICtrlSetBkColor($label1, 0xFF0000)
    $Farbe = true
    Else
    if $pos[4] = $label1 and $Farbe = true then
    GUICtrlSetBkColor($label1, -2)
    $Farbe = false
    ;GUICtrlSetBkColor($label1, Default)
    endif
    EndIf

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

    EndFunc

    [/autoit]
  • Ich krieg Augenkrebs. :wacko:

    Ordne dein Skript mal an, damit man es auch lesen kann.
    Drück in SciTE mal 'Strg + T' dass sollte dein Skript ein bisschen aufräumen.

    Und dir ist schon klar, dass wenn du ihm jedesmal wenn die Funktion aufgerufen wird sagst, dass die Variable False ist, dass er nie das Else ausführen kann.

    Mach den Spoiler erst auf, wenn du selber ein bisschen rumprobiert hast.

    Spoiler anzeigen
    [autoit]

    Global $Farbe = False

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

    Func _Hover_Label()
    $pos = GUIGetCursorInfo()

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

    If $pos[4] = $label1 And $Farbe = false Then
    GUICtrlSetBkColor($label1, 0xFF0000)
    $Farbe = True
    ElseIf $pos <> $label1 And $Farbe = True then
    GUICtrlSetBkColor($label1, -2)
    $Farbe = False
    ;GUICtrlSetBkColor($label1, Default)
    EndIf
    EndFunc

    [/autoit]

    MfG,
    H2112.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • ...deine Function hat einen Fehler!

    startet und bricht sofort ab! :rolleyes:

    Die Meldung

    [autoit]


    ElseIf $pos <> $label1 And $Farbe = True then
    ;: ==> Variable used without being declared.:

    [/autoit]
  • Ich will ja nichts sagen, aber ich hab es Global deffiniert, man muss nur genau schaun. ;)

    Aber ein Fehler ist mir trotzdem reingerutscht, den man aber leicht beseitigen könnte.

    Ich lass ihn mal den Fehler suchen, damit er wieder was zu tun hat. :D

    MfG,
    H2112.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • @ h2112

    ...nette Kommentare für ne Quizstunde. ?(

    Zitat

    Ich lass Sie mal den Fehler suchen, damit Sie wieder was zu tun hat


    Weißt du nun woran es liegen kann?

    Wenn ja, dann sollten wir das heitere Quizraten beenden....
    am besten mit einer "Auflösung"! :D

    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    Global $Farbe
    $Form1_1 = GUICreate("Form1", 1009, 770, 513, 94, BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_TABSTOP))
    $Pic1 = GUICtrlCreatePic("C:\Hintergrund.jpg", -16, 8, 1024, 768, BitOR($GUI_SS_DEFAULT_PIC, $WS_CLIPSIBLINGS))
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Input1 = GUICtrlCreateInput("Input1", 856, 48, 129, 21)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Tab1 = GUICtrlCreateTab(192, 128, 593, 369)
    GUICtrlSetState(-1, $GUI_ONTOP)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    GUICtrlCreateTabItem("")
    $Label1 = GUICtrlCreateLabel("Label1", 32, 40, 85, 36, $SS_CENTER)
    GUICtrlSetFont(-1, 20, 400, 0, "Arial")
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUISetState(@SW_SHOW)

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

    AdlibRegister("_Hover_Label")

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

    GUIGetMsg()
    While 1
    $nMsg = GUIGetMsg()

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

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Global $Farbe = False

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

    Func _Hover_Label()
    $pos = GUIGetCursorInfo()

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

    If $pos[4] = $label1 And $Farbe = false Then
    GUICtrlSetBkColor($label1, 0xFF0000)
    $Farbe = True
    ElseIf $pos <> $label1 And $Farbe = True then
    GUICtrlSetBkColor($label1, -2)
    $Farbe = False
    EndIf
    EndFunc

    [/autoit]


    Grüße
    Ilse :(

  • Der Fehler liegt in der Funktion. Wenn du dir in der hilfe die Rückgabewerte anschaust, wird dir hoffentlich etwas auffallen.
    Richtig, er gibt ein Array zurück, und ich hab versehentlich eine normale Variable benutzt.

    Mit diesen Infos müsste du leicht den Fehler ausbessern können.

    MfG,
    H2112.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • na, dann können wir das Rätsel lösen.

    Ich mach es für alle anderen etwas leichter ;)

    [autoit]


    Func _Hover_Label()
    $pos = GUIGetCursorInfo()

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

    If $pos[4] = $label1 And $Farbe = false Then
    GUICtrlSetBkColor($label1, 0xFF0000)
    $Farbe = True
    ElseIf $pos[4] <> $label1 And $Farbe = True then
    GUICtrlSetBkColor($label1, -2)
    $Farbe = False
    EndIf
    EndFunc

    [/autoit]

    Jetzt erkläre mir mal, was dieses Array an dieser Stelle soll ?(

    Grüße
    Ilse ;)

  • Du meinst, wir machen es für dich mal leichter. ;)

    Zitat von Hilfe

    Erfolg: Gibt ein Array mit 5 Einträgen zurück, das die Cursor-Informationen enthält:
    $array[0] = X-Koordinate (horizontal)
    $array[1] = Y-Koordinate (vertikal)
    $array[2] = Klick auf die erste Maustaste (üblicherweise links) (1 wenn Maustaste gedrückt, 0 wenn nicht gedrückt)
    $array[3] = Klick auf die zweite Maustaste (üblicherweise rechts) (1 wenn Maustaste gedrückt, 0 wenn nicht gedrückt)
    $array[4] = ID des Controls, über dem sich der Mauszeiger gerade befindet (0 wenn nicht über einem Item)

    Ich zerleg mal das If in für dich:

    [autoit]

    If $pos[4] = $label1 And $Farbe = False Then
    ; Wenn der Mauszeiger über dem Label ist und die Variable $Farbe False ist, dann...

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

    ElseIf $pos[4] <> $label1 And $Farbe = True then
    ; Wenn der Mauszeiger nicht über dem Label ist und die Variable $Farbe True ist, dann...

    [/autoit]

    $pos[4] enthält immer die ID des Controles, über dem sich der Mauszeiger gerade befindet.

    Und das solltest du jetzt aber wirklich verstanden haben, besser kann ichs dir nichtmehr erklären. :pinch:

    MfG,
    H2112.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • @h2112,

    merci nochmal für die Erklärung

    Eine Frage habe ich noch:

    Wenn ich den Cursor auf das Label bewege
    kommt es mich so vor als wenn da eine kleine Pause wäre!

    Kann man irgendwo diesen Wert ändern?


    Ilse ;)

    Einmal editiert, zuletzt von Ilse (9. November 2010 um 10:10)

  • Bitte.

    Ja den Wert kann man ändern. ;)

    Wenn du dir in der Hilfe den Befehl AdlibRegister anschaust, wird es dir sofort klar werden. Einfach draufklicken. ;)

    MfG,
    H2112.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%