MausPosition bei ComboListe

  • Ich habe da ein Kleines Problem

    Und zwar habe ich mir ein Gui gebastelt was oben am Bildschirmrand sitzt und wenn man mit der Maus
    dort hinfährt erscheint es .. verlässt man das Gui verschwindet die Leiste wieder.

    Nun dachte ich mir mach Ich noch eine Comboliste rein die mir meien Projekt Ordner listet.
    Problem was nun auftritt ist das wenn ich mit der Maus im Combo was was selektieren möchte
    zu 99 % den Gui Bereich verlasse.

    Spoiler anzeigen
    [autoit]


    global $hidden
    global $main = GUICreate("AutoITDeskBar2",@DesktopWidth +2,70,-2,-30, $WS_BORDER , $WS_EX_APPWINDOW )

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

    $Combo1 = GUICtrlCreateCombo("Projekte", @DesktopWidth - 300, 8, 193, 25,$CBS_DROPDOWNLIST)
    $Beende = GUICtrlCreateButton("Beende", @DesktopWidth - 80, 8, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    $tPos = WinGetPos($main)
    While 1
    $mPos = MouseGetPos()
    If WinActive("AutoITDeskBar2") = 0 And $hidden And $mPos[1]<2 Then
    WinActivate($main)
    WinSetState($main,"",@SW_SHOW)
    $hidden = False
    ElseIf Not $hidden And $mPos[1]>40 and Then
    WinSetState($main,"",@SW_HIDE)
    $hidden = True
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    exit()
    EndSwitch
    WEnd

    [/autoit]

    Wie kriege ich das hin das wenn die Maus im Combo Bereich ist mir meine Leiste nicht gleich wieder ausgeblendet wird ?

    Einmal editiert, zuletzt von Gummibaer (6. August 2009 um 13:08)

  • Hi,

    um zu prüfen ob der Cursor auf einer bestimmten Position ist benutze GUIGetCursorInfo, $array[4] gibt dir die CtrlID zurück auf dem sich der Cursor gerade befindet. Mit Hilfe dieser Abfrage kannst du bestimmt dein Script zuende schreiben (ein/ausblenden) ;)

    Ein kleines Beispiel zu GUIGetCursorInfo:

    Spoiler anzeigen
    [autoit]

    #include<GUIConstants.au3>
    GUICreate("Test", 200, 200)
    GUICtrlCreateLabel("GUIGetCursorInfo Beispiel", 10, 10)
    GUICtrlCreateLabel("Ctrl 1", 30, 30)
    GUICtrlCreateInput("Ctrl 2", 30, 50)
    $posx = GUICtrlCreateLabel("Pos X:", 10, 80, 190)
    $posy = GUICtrlCreateLabel("Pos X:", 10, 100, 190)
    $cli1 = GUICtrlCreateLabel("Pos X:", 10, 120, 190)
    $cli2 = GUICtrlCreateLabel("Pos X:", 10, 140, 190)
    $ctrl = GUICtrlCreateLabel("Pos X:", 10, 160, 190)
    GUISetState()
    While True
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    $mse = GUIGetCursorInfo()
    If IsArray($mse) Then
    GUICtrlSetData($posx, "Pos X: "&$mse[0])
    GUICtrlSetData($posy, "Pos Y: "&$mse[1])
    GUICtrlSetData($cli1, "Clicked M1: "&$mse[2])
    GUICtrlSetData($cli2, "Clicked M2: "&$mse[3])
    GUICtrlSetData($ctrl, "CtrlId: "&$mse[4])
    EndIf
    Sleep(50)
    WEnd

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Hi,
    habs so gelöst...

    Spoiler anzeigen
    [autoit]

    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    global $hidden
    global $main = GUICreate("AutoITDeskBar2",@DesktopWidth +2,70,-2,-30, $WS_BORDER , $WS_EX_APPWINDOW )

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

    dim $pos[4]=[0,1,2,3]
    $Combo1 = GUICtrlCreateCombo("Projekte", @DesktopWidth - 300, 8, 193, 25,$CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "item2|item3|ee|rr|ttt|ttt|www|qqq", "item3")
    $Beende = GUICtrlCreateButton("Beende", @DesktopWidth - 80, 8, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    $tPos = WinGetPos($main)

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

    While 1
    $mPos = MouseGetPos()
    if $hidden =false Then
    $pos = ControlGetPos("[CLASS:ComboLBox; INSTANCE:1]","","") ;daten von der combobox holen
    if @error<>1 then
    consolewrite($pos[0]&" "&$pos[1]&" "&$pos[2]&" "&$pos[3]&@crlf) ;x,y, breite, hoehe
    $mouseposallowed=0
    If $mpos[0]<$pos[0] and $mpos[1]>70 then $mouseposallowed=1 ;links von der combo und unterhalb vom fenster
    if $mpos[1]>$pos[3] +20 then $mouseposallowed=1 ;unterhalb der combo
    if $mpos[0]>$pos[0]+$pos[2] and $mpos[1]>70 then $mouseposallowed=1 ;rechts von combo und unterhalb vom fenster
    endif
    endif
    If WinActive("AutoITDeskBar2") = 0 And $hidden And $mPos[1]<2 Then
    WinActivate($main)
    WinSetState($main,"",@SW_SHOW)
    $hidden = False
    ElseIf Not $hidden And $mouseposallowed Then
    WinSetState($main,"",@SW_HIDE)
    $hidden = True
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    exit
    EndSwitch
    ;if $nmsg<>0 then consolewrite($nmsg&@crlf)
    WEnd

    [/autoit]

    ciao
    Andy

  • FireFlyer
    Das Problem ist, daß gewisse Controls die Daten nicht so einfach rausrücken.z.B gibt guigetcursorinfo() nur die ID vom eigentlichen Combo-Control aber nicht von der Liste darunter! Habe mir zu diesem Thema auch schon eins abgebrochen^^

  • Danke für deinen Tip
    Aber versuch es dochmal selber

    Spoiler anzeigen
    [autoit]


    #include<GUIConstants.au3>
    GUICreate("Test", 200, 200)
    GUICtrlCreateLabel("GUIGetCursorInfo Beispiel", 10, 10)
    GUICtrlCreateLabel("Ctrl 1", 30, 30)
    GUICtrlCreateInput("Ctrl 2", 30, 50)
    $posx = GUICtrlCreateLabel("Pos X:", 10, 80, 190)
    $posy = GUICtrlCreateLabel("Pos X:", 10, 100, 190)
    $cli1 = GUICtrlCreateLabel("Pos X:", 10, 120, 190)
    $cli2 = GUICtrlCreateLabel("Pos X:", 10, 140, 190)
    $ctrl = GUICtrlCreateLabel("Pos X:", 10, 160, 190)
    $Combo1 = GUICtrlCreateCombo("Combo1", 32, 176, 145, 25)
    GUISetState()
    GUICtrlSetData($Combo1,"test | test1 | test2 | test3 | test4")
    While True
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    $mse = GUIGetCursorInfo()
    If IsArray($mse) Then
    GUICtrlSetData($posx, "Pos X: "&$mse[0])
    GUICtrlSetData($posy, "Pos Y: "&$mse[1])
    GUICtrlSetData($cli1, "Clicked M1: "&$mse[2])
    GUICtrlSetData($cli2, "Clicked M2: "&$mse[3])
    GUICtrlSetData($ctrl, "CtrlId: "&$mse[4])
    EndIf
    Sleep(50)
    WEnd

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

    Dann wirst du sehn das man keien brauchbaren daten davon erhält .. bzw ich weiß nicht wie ich das auswerten
    Da die Id dann auf 0 umschlägt
    Ich ich ne ide bekommen würde wenn ich in der Combo auswähle wäre das kein probblem.


    UI Andy Schneller als die Polizei erlaubt .. teste ich sofort ;)

  • Andy Perfekt :love:
    komm her lass dich knutschen ;)

    sollte man irgendwie in die hilfe aufnehmen ;)

  • Hallo,

    Zitat

    komm her lass dich knutschen


    habe die besten Erfahrungen mit Beerware gemacht, würde aber mittlerweile das Lizenzmodell "Spätleseware" definitiv vorziehen^^
    ciao
    Andy