AutoOpen_ComBo.au3

  • Hallo Leute!


    Ich habe ein Code den ich verwende, wo viele verschiedene vergebe werden, um am Ende auf ein Wert zu kommen, ich nutze dazu 10 Comboboxen und weil es Nervig ist immer erst zu Klicken bis die Box aufgeht habe ich nach einer Lösung gesucht.

    Nun stelle ich euch AutoOpen_ComBo.au3 vor.

    Wenn die maus über das Combo Contol ist wird das Control automatisch geöffnet (wenn es leer ist).

    Bug behoben : 01.10.2010

    Code:

    Spoiler anzeigen
    [autoit]

    #include <GuiComboBox.au3>
    #include <GuiComboBoxEx.au3>
    #include <GUIConstantsEx.au3>
    ;===================================================================================================================================#
    ;~ Function Name....: Auto_OpenCombo($comB)
    ;~ Description......: ComBobox Automatisch Öffnen
    ;~ $comB ..........: ContolID der Combobox oder ein Array
    ;~ Return Value(s)..:
    ;~ Author(s)........: Kleiner27 (http://www.autoit.de)
    ;====================================================================================================================================#

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

    Func Auto_OpenCombo($comB)
    If IsArray($comB) Then
    For $i = 0 To UBound($comB) - 1
    If _GUICtrlComboBox_GetDroppedState($comB[$i]) Then
    Opt('MouseCoordMode', 1)
    Dim $M_pos = MouseGetPos()
    Dim $aRect = _GUICtrlComboBoxEx_GetDroppedControlRect($comB[$i])
    If ($M_pos[0] < $aRect[0]) Or ($M_pos[0] > $aRect[2]) Then Return _GUICtrlComboBox_ShowDropDown($comB[$i])
    Return (0)
    Else
    If (GUICtrlRead($comB[$i]) <> '') Then ContinueLoop
    Opt('MouseCoordMode', 2)
    Dim $C_pos = ControlGetPos('', '', $comB[$i])
    If @error Then Return (0)
    If __Maus_Control($C_pos[0], $C_pos[1], $C_pos[2], $C_pos[3]) Then
    GUICtrlSetState($comB[$i], $GUI_FOCUS)
    Return _GUICtrlComboBox_ShowDropDown($comB[$i], True)
    EndIf
    EndIf
    Next
    Else
    If _GUICtrlComboBox_GetDroppedState($comB) Then
    Opt('MouseCoordMode', 1)
    Dim $M_pos = MouseGetPos()
    Dim $aRect = _GUICtrlComboBoxEx_GetDroppedControlRect($comB)
    If ($M_pos[0] < $aRect[0]) Or ($M_pos[0] > $aRect[2]) Then Return _GUICtrlComboBox_ShowDropDown($comB)
    Return (0)
    Else
    If (GUICtrlRead($comB) <> '') Then Return (0)
    Opt('MouseCoordMode', 2)
    Dim $C_pos = ControlGetPos('', '', $comB)
    If @error Then Return (0)
    If __Maus_Control($C_pos[0], $C_pos[1], $C_pos[2], $C_pos[3]) Then
    GUICtrlSetState($comB, $GUI_FOCUS)
    Return _GUICtrlComboBox_ShowDropDown($comB, True)
    EndIf
    EndIf
    EndIf
    EndFunc ;==>Auto_OpenCombo

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

    Func __Maus_Control($O_X, $O_Y, $O_Width, $O_Height)
    Dim $M_pos = MouseGetPos()
    Return ($M_pos[0] > $O_X) and ($M_pos[0] < $O_X + $O_Width) and ($M_pos[1] > $O_Y) and ($M_pos[1] < $O_Y + $O_Height)
    EndFunc ;==>__Maus_Control

    [/autoit]

    LG Kleiner

    7 Mal editiert, zuletzt von Kleiner (1. Oktober 2010 um 19:55)

  • Hallo kleiner27.
    Das ist wirklich ein nützliches Skript.
    Jedoch solltest du soetwas wie einen Delay Parameter einbauen, damit die Combo evtl. nicht sofort aufgeht.
    Aber sonst ist es wirklich gelungen.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Fällt da noch ein Vorschlag ein:
    Versuch das doch mal für unendlich ComboBoxen zu erstellen:
    Man könnte ja die ControlIDs in einem Array zusammenfassen, welches man dann als Parameter einträgt.
    Das Array wird dann abgefragt.


    Bsp:

    [autoit]


    Dim $boxids[20]
    $boxids[0] = GuiCtrlCreateCombo....
    $boxids[1] = GuiCtrlCreateCombo....
    $boxids[2] = GuiCtrlCreateCombo...

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

    AutoOpenCombo($boxids)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • Zeile 91 würde ich wie folgt schreiben:

    Spoiler anzeigen
    [autoit]

    AdlibRegister('Pruef_Control', 3000)

    [/autoit]

    ; Wert von 100 auf 3000 gesetzt.

    Mir der Wertanpassung arbeitet es meiner Meinung nach besser. Entweder mal klickt mit der Maus auf den "Pfeil" oder wartet minimal die angegebene "Zeit" ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi!

    SEuBo
    Ich habe die Windows-Message-ID (WM_MSG) nachgelesen aber keiner gib eine nachricht aus wenn die maus über dem Control ist, vieleicht habe ich auch was übersehen :rolleyes:

    LG Kleiner

  • Alina wie du magst, du kannst auch die Funktion - zeit übergeben für warte... zeit! :rolleyes:


    LG Kleiner


    Stimmt ! Aber ist das nicht 88 oder 69 ?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi!


    Update Post#1
    Habe die Funktion soweit angepasst das sich das Control nur noch öffnet wenn es leer ist!
    Für ein Skript notwendig:

    [autoit]

    #include 'AutoOpen_ComBo.au3'
    GUISetOnEvent($GUI_EVENT_MOUSEMOVE, 'Pruef_OpenCombo')
    Func Pruef_OpenCombo()
    Auto_OpenCombo($Contol_Array)
    EndFunc ;==>Pruef_OpenCombo

    [/autoit]

    Und das nötige Control o. Array = Controls

    LG Kleiner

  • Hi!


    Ist so gewohlt, mir hat es gestört das die box jedesmal aufgeht wenn die maus das Control berührt.
    Kannst es anpassen!

    [autoit]

    If (GUICtrlRead($comB[$i]) <> '') Then ContinueLoop

    [/autoit]


    Rausnehmen!

    LG Kleiner