Jump to content

Recommended Posts

Posted (edited)

pls help me!

how can i create comboBox without dropdown button?(and need dropdown list after type anything but dont need dropdown button.)

#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form = GUICreate("comboBox without dropdown button", 413, 298)
$Combo1 = GUICtrlCreateCombo("", 136, 98, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "s1|s2|s3|s4|s5|s6", "s1")
GUISetState(@SW_SHOW)

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

    EndSwitch
WEnd
Edited by Golabius
Posted (edited)

quote name='Golabius' timestamp='1310992893' post='911436']

pls help me!

how can i create comboBox without dropdown button?(and need dropdown list after type anything but dont need dropdown button.)

#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form = GUICreate("comboBox without dropdown button", 413, 298)
$Combo1 = GUICtrlCreateCombo("", 136, 98, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "s1|s2|s3|s4|s5|s6", "s1")
GUISetState(@SW_SHOW)

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

    EndSwitch
WEnd

Edited by Syed23

Thank you,Regards,[font="Garamond"][size="4"]K.Syed Ibrahim.[/size][/font]

Posted

Syed23, tnx but i dont want it.

see this fake picture:

Posted Image

i want create autocomplete with combobox and without dropdown button.

(i dont want combin TextBox + ListBox For it.)

and i dont want like it:

#include <GuiComboBoxEx.au3>
#include <GuiImageList.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

$Debug_CB = False ; Check ClassName being passed to ComboBox/ComboBoxEx functions, set to True and use a handle to another control to see it work

_Main()

Func _Main()
    Local $hGUI, $hImage, $hCombo
    
    ; Create GUI
    $hGUI = GUICreate("ComboBoxEx Reset Content", 400, 300)
    $hCombo = _GUICtrlComboBoxEx_Create ($hGUI, "", 2, 2, 394, 100, BitOR($CBS_SIMPLE, $WS_VSCROLL, $WS_BORDER))
    GUISetState()
    
    _GUICtrlComboBoxEx_BeginUpdate ($hCombo)
    For $x = 0 To 149
        _GUICtrlComboBoxEx_AddString ($hCombo, StringFormat("%03d : Random string", Random(1, 100, 1)), Random(0, 8, 1), Random(0, 8, 1), Random(0, 8, 1))
    Next
    _GUICtrlComboBoxEx_EndUpdate ($hCombo)

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

i just want hide comboBox dropdown button. :)

Posted

If you don't want the dropdown, then perhaps using a combobox is not the solution. You want a single line edit control that autocompletes from list of strings. Maybe there is a simpler solution: hopefully someone will suggest one. Failing that, you could try to design a control that mimicks combobox behaviour. I pressume you want to be able to use the arrow keys to scroll through the list, as well as implementing an autocomplete feature. It will require some further thought.

  • Moderators
Posted

Golabius,

I think this is close to what you want: ;)

#include <GUIConstantsEx.au3>
#include <Array.au3>
#Include <GuiListBox.au3>

Global $hGUI, $hInput, $hList, $sPartialData, $asKeyWords[100], $iMatch_Count

; Create list full of random 5 character "words"
Keywords()

$hGUI = GUICreate("Test", 500, 500)
$hInput = GUICtrlCreateInput("", 5, 5, 190, 20)
$hList = GUICtrlCreateList("", 5, 25, 190, 20, BitOR(0x00100000, 0x00200000))
GUICtrlSetState(-1, $GUI_HIDE)
$hUP = GUICtrlCreateDummy()
$hDOWN = GUICtrlCreateDummy()
$hENTER = GUICtrlCreateDummy()
GUISetState(@SW_SHOW, $hGUI)

; Set accelerators for Cursor up/down and Enter
Dim $AccelKeys[3][2]=[["{UP}", $hUP], ["{DOWN}", $hDOWN], ["{ENTER}", $hENTER]]
GUISetAccelerators($AccelKeys)

$sCurr_Input = ""
$iCurrIndex = -1

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hList
            $sChosen = GUICtrlRead($hList)
            If $sChosen <> "" Then GUICtrlSetData($hInput, $sChosen)
        Case $hUP
            If $sPartialData <> "" Then
                $iCurrIndex -= 1
                If $iCurrIndex < 0 Then $iCurrIndex = 0
                _GUICtrlListBox_SetCurSel($hList, $iCurrIndex)
            EndIf
        Case $hDOWN
            If $sPartialData <> "" Then
                $iTotal = _GUICtrlListBox_GetCount($hList)
                $iCurrIndex += 1
                If $iCurrIndex > $iTotal - 1 Then $iCurrIndex = $iTotal - 1
                _GUICtrlListBox_SetCurSel($hList, $iCurrIndex)
            EndIf
        Case $hENTER
            If $iCurrIndex <> -1 Then
                $sText = _GUICtrlListBox_GetText($hList, $iCurrIndex)
                GUICtrlSetData($hInput, $sText)
                $iCurrIndex = -1
                _GUICtrlListBox_SetCurSel($hList, $iCurrIndex)
            EndIf
    EndSwitch

    ; If input has changed, refill list with matching items
    If GUICtrlRead($hInput) <> $sCurr_Input Then
        CheckInputText()
        $sCurr_Input = GUICtrlRead($hInput)
    EndIf

WEnd

Func CheckInputText()

    $sPartialData = "|" ; Start with delimiter so new data always replaces old
    Local $iLine_Height = _GUICtrlListBox_GetItemHeight(GUICtrlGetHandle($hList))
    Local $sInput = GUICtrlRead($hInput)
    If $sInput <> "" Then
        $iMatch_Count = 0
        For $i = 0 To 99
            If StringInStr($asKeyWords[$i], $sInput) <> 0 Then
                $sPartialData &= $asKeyWords[$i] & "|"
                $iMatch_Count += 1
            EndIf
        Next
        GUICtrlSetData($hList, $sPartialData)
        ConsoleWrite("Matches: " & $iMatch_Count & " - List Height: " & $iMatch_Count * ($iLine_Height + 1) & @CRLF)
        If $iMatch_Count Then
            $iLine_Height = _GUICtrlListBox_GetItemHeight(GUICtrlGetHandle($hList))
            GUICtrlSetState($hList, $GUI_SHOW)
            $iList_Height = $iMatch_Count * ($iLine_Height + 2)
            If $iList_Height > 100 Then $iList_Height = 100
            If $iList_Height < $iLine_Height + 6 Then $iList_Height = $iLine_Height + 6
            ConsoleWrite("Adjusted: " & $iList_Height & @CRLF)
            GUICtrlSetPos($hList, 5, 25, 190, $iList_Height)
        Else
            GUICtrlSetState($hList, $GUI_HIDE)
        EndIf
    Else
        GUICtrlSetState($hList, $GUI_HIDE)
    EndIf
EndFunc   ;==>CheckInputText

Func Keywords()

    Local $sData
    For $i = 0 To 99
        $asKeyWords[$i] = Chr(Random(65, 90, 1)) & Chr(Random(65, 90, 1)) & Chr(Random(65, 90, 1)) & Chr(Random(65, 90, 1))
        $sData &= $asKeyWords[$i] & "|"
    Next
    GUICtrlSetData($hList, $sData)
    $iCurrIndex = -1
    _GUICtrlListBox_SetCurSel($hList, $iCurrIndex)

EndFunc   ;==>Keywords

Please ask if you have any questions or if it is not quite what you are looking for - it should be fairly easy to tweak. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Posted

Melba23, very nice & very tnx but:

...

i want create autocomplete with combobox and without dropdown button.

(i dont want combin TextBox + ListBox For it.)

...

i have some button under this list box and ...

i dont want DISABLE and ENABLE listbox(button) for work button(listbox) or help me in Z-Index(depth) for create button on list box.

i can create it with do resize comboBox in simple style but im looking a way for hide dropdown button just. its possible?

  • Moderators
Posted

Golabius,

its possible?

As far as I know it is not - whch is why I gave you another solution. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Posted (edited)

Melba23, tnx again and can u help me about controls Z-Index(depth) for create button on listBox(EditBox)?

Simple Code:(Button Doesn't work)

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

$Form = GUICreate("Form", 413, 298, 229, 156)
$Edit = GUICtrlCreateEdit("", 2, 2, 307, 193)
$Button = GUICtrlCreateButton("Button", 204, 138, 75, 25)
GUISetState(@SW_SHOW)

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

    EndSwitch
WEnd

My COde:(i Dont want like it,DISABLE & ENABLE)

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$over = 0

$Form = GUICreate("Form", 413, 298, 229, 156)
$Edit = GUICtrlCreateEdit("", 2, 2, 307, 193)
$Button = GUICtrlCreateButton("Button", 204, 138, 75, 25)
GUISetState(@SW_SHOW)


While 1
    $info = GUIGetCursorInfo()
    if not @error Then
        If ($info[4]=$Button) Then
            If ($over = 0) Then
                $over = 1
                GUICtrlSetState($Edit,$GUI_DISABLE)
            EndIf
        Else
            If $over = 1 Then 
                $over = 0
                GUICtrlSetState($Edit,$GUI_ENABLE)
            EndIf
        EndIf
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd
Edited by Golabius
  • Moderators
Posted

Golabius,

If you want overlapping controls then I fear you are going to have to use something like your second example. ;)

AutoIt (and Windows) cannot cope with overlapping controls - after all, your PC cannot read your mind as to which control you want to action. :)

Why are you so against the enabling/disabling of the various controls? The only other way I can think of doing it would be to create a child GUI to hold the list - and I am not sure that it would be worth the trouble. But if I find a few minutes over the next few days (I am a bit busy in the wild blue yonder :D) I will see if I can produce anything less complicated that what you already have produced. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

  • Moderators
Posted

Golabius,

You were in luck - too rainy to fly this morning so I could work on this. But I did get airborne this afternoon, so I am still in a good mood! :)

Here is a version with a child GUI that gets over the "button underneath" problem - you still have to do a fair bit of coding to get the thing to work, but you will have to do that regardless of the solution you choose if you do not want a standard combo: ;)

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiListBox.au3>

Global $hGUI, $hInput, $hList, $sData, $asKeyWords[100]

$hGUI = GUICreate("Example", 500, 500)
$hInput = GUICtrlCreateInput("", 10, 10, 200, 20)

$hButton = GUICtrlCreateButton("Test", 10, 50, 80, 30)

GUISetState(@SW_SHOW, $hGUI)

; Create chilf GUI to hold list
$hGUI_Child = GUICreate("Child", 200, 200, 10, 30, $WS_POPUP, $WS_EX_MDICHILD, $hGUI)
$hList = GUICtrlCreateList("", 0, 00, 200, 200, BitOR(0x00100000, 0x00200000))
GUICtrlSetResizing(-1, $GUI_DOCKAUTO) ; List resizes with GUI
GUISetState(@SW_HIDE, $hGUI_Child)

Keywords()

$sCurr_Input = ""
$sData = "|"
$sChosen = ""

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $hList
            $sChosen = GUICtrlRead($hList)
            If $sChosen <> "" Then GUICtrlSetData($hInput, $sChosen)
            GUISetState(@SW_HIDE, $hGUI_Child)
        Case $hButton
            ConsoleWrite("Button pressed" & @LF)
    EndSwitch

    ; Show/hide child GUI depending on input content and list data
    If GUICtrlRead($hInput) <> "" And GUICtrlRead($hInput) <> $sChosen And Not(BitAND(WinGetState($hGUI_Child), 2)) And $sData <> "|" Then
        GUISetState(@SW_SHOW, $hGUI_Child)
        GUICtrlSetState($hInput, $GUI_FOCUS)
        ControlSend($hGUI, "", $hInput, "{END}")
    EndIf
    If GUICtrlRead($hInput) = "" And BitAND(WinGetState($hGUI_Child), 2) Then
        GUISetState(@SW_HIDE, $hGUI_Child)
        GUICtrlSetState($hInput, $GUI_FOCUS)
    EndIf

    ; If input has changed, refill list with matching items
    If GUICtrlRead($hInput) <> $sCurr_Input Then
        CheckInputText()
        $sCurr_Input = GUICtrlRead($hInput)
    EndIf

WEnd

Func Keywords()

    ; Only items beginning with B created - so able to see what happens when list holds nothing (hides) or lots of data (scrolls)
    For $i = 0 To 99
        $asKeyWords[$i] = "B" & Chr(Random(65, 90, 1)) & Chr(Random(65, 90, 1)) & Chr(Random(65, 90, 1)) & Chr(Random(65, 90, 1)) & Chr(Random(65, 90, 1))
        $sData &= $asKeyWords[$i] & "|"
    Next
    GUICtrlSetData($hList, $sData)
EndFunc   ;==>Keywords

Func CheckInputText()
    $l = StringLen(GUICtrlRead($hInput))
    $sData = "|" ; Start with delimiter so new data always replaces aold
    Local $sInput = GUICtrlRead($hInput)
    $iMatch_Count = 0
    If $sInput <> "" Then
        For $i = 0 To 99
            If StringLeft($asKeyWords[$i], $l) = $sInput Then
                $sData &= $asKeyWords[$i] & "|"
                $iMatch_Count += 1
            EndIf
        Next
        GUICtrlSetData($hList, $sData)

        ; Change size of child GUI
        $iList_Height = $iMatch_Count * (_GUICtrlListBox_GetItemHeight($hList) + 1)
        If $iList_Height < 20 Then $iList_Height = 20
        If $iList_Height > 200 Then $iList_Height = 200

        WinMove($hGUI_Child, "", Default, Default, Default, $iList_Height)

    EndIf
EndFunc   ;==>CheckInputText

Please ask if you have any questions, but I think it is pretty easy to follow. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Posted

Melba23,tnx. i think, this is the best way for create what i want, very tnx.

this is my simple code with comboBox(simple style) But still Melba23's way is better and more complete.

#include <GuiComboBoxEx.au3>
#include <GuiImageList.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>

$iY=20

_Main()

Func _Main()
    Global $hGUI, $hImage, $hCombo
    
    ; Create GUI
    $hGUI = GUICreate("ComboBox", 400, 300)
    $hCombo = GUICtrlCreateCombo ("", 2, 2, 394, $iY , BitOR($CBS_SIMPLE, $WS_VSCROLL, $WS_BORDER))
    GUICtrlSetData(-1, "B1|B2|B3|B4|B5")
    GUISetState()
    
    
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc   ;==>_Main

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo
    If Not IsHWnd($hCombo) Then $hWndCombo = GUICtrlGetHandle($hCombo)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) 
    $iCode = BitShift($iwParam, 16) 
    Switch $hWndFrom
        Case $hCombo, $hWndCombo
            Switch $iCode
            Case $CBN_EDITCHANGE ; Sent after the user has taken an action that may have altered the text in the edit control portion of a combo box
                    $combo_text = _GUICtrlComboBox_GetEditText($hCombo)
                    If (Not StringIsSpace($combo_text)) And $combo_text<>"" Then
                        iCombo_Resize(1)
                    Else
                        iCombo_Resize(0)
                    EndIf
                    
                    ; no return value
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>

Func iCombo_Resize($flag) ; Flag=1(Show List), else flag(Hide List)
    $iY =20
    If $flag=1 Then
        $count = _GUICtrlComboBox_GetCount($hCombo)
        For $i=1 to $count
            $iY +=15
        Next
    EndIf
    GUICtrlSetPos($hCombo,2, 2, 394, $iY)
EndFunc
  • Moderators
Posted

Golabius,

Glad I could help. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...