Jump to content

Recommended Posts

Posted (edited)

Hello all,
I am trying to get scrolling events for ListBox (mouse wheel and up/down arrows) but without success. The event not occured on row change but if I click on it - yes
The ComboBox works fine even if not in focus (with mouse wheel) but I prefer visual look of ListBox. In addition to all, I can't change the height of control. Unfortunately it depends only on font size and same fonts has different heights between InputBox and ComboBox

Is there a way to get over the issue?

Any other ideas for unit selection realization are welcome B)

#include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>

Global $idCombo, $idComboUnit, $idList, $idListUnit
Global $sComboInitUnit = "pJ", $fComboVal = 7.5
Global $sListInitUnit = "nF", $fListVal = 0.15

Units_Conversion_Example()

Func Units_Conversion_Example()
    ; Create GUI
    GUICreate("Units Conversion", 400, 296)

    $idCombo = GUICtrlCreateInput($fComboVal, 22, 20, 91, 26)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
    $idComboUnit = GUICtrlCreateCombo("", 112, 20, 50, 30)
    GUICtrlSetData(-1, "uJ|nJ|pJ", $sComboInitUnit)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

    $idList = GUICtrlCreateInput($fListVal, 22, 80, 91, 26)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
    $idListUnit = GUICtrlCreateList("", 112, 80, 57, 26, BitOR($LBS_NOTIFY,$LBS_NOSEL,$WS_VSCROLL))
    GUICtrlSetData(-1, "uF|nF|pF", $sListInitUnit)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

    GUISetState(@SW_SHOW)

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

    Do
        Sleep(5)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc   ;==>Example





Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo, $hWndListBox
    If Not IsHWnd($idComboUnit) Then $hWndCombo = GUICtrlGetHandle($idComboUnit)
    If Not IsHWnd($idListUnit) Then $hWndListBox = GUICtrlGetHandle($idListUnit)
    $hWndFrom = $lParam
    $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
    $iCode = BitShift($wParam, 16) ; Hi Word


    Switch $hWndFrom
        Case $hWndCombo
            Switch $iCode
                Case $LBN_SELCHANGE
                    ConsoleWrite(GUICtrlRead($idComboUnit) & @CRLF)
        EndSwitch

        Case $hWndListBox
            Switch $iCode
                Case $CBN_SELCHANGE
                    ConsoleWrite(GUICtrlRead($idListUnit) & @CRLF)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

 

 

Edited by RAMzor

Share this post


Link to post
Share on other sites
Posted (edited)

Just idea/concept, not working ...

#include <GuiListBox.au3>
#include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>

Global Const $WM_MOUSEWHEEL = 0x020A ; needed only for older AutoIt's versions

Global $idCombo, $idComboUnit, $idList, $idListUnit
Global $sComboInitUnit = "pJ", $fComboVal = 7.5
Global $sListInitUnit = "nF", $fListVal = 0.15
Global $hWndCombo, $hWndListBox

Units_Conversion_Example()

Func Units_Conversion_Example()
    ; Create GUI
    GUICreate("Units Conversion", 400, 296)

    $idCombo = GUICtrlCreateInput($fComboVal, 22, 20, 91, 26)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
    $idComboUnit = GUICtrlCreateCombo("", 112, 20, 50, 30)
    $hWndCombo = GUICtrlGetHandle($idComboUnit)
    GUICtrlSetData(-1, "uJ|nJ|pJ", $sComboInitUnit)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

    $idList = GUICtrlCreateInput($fListVal, 22, 80, 91, 26)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
    $idListUnit = GUICtrlCreateList("", 112, 80, 57, 26, BitOR($LBS_NOTIFY,$LBS_NOSEL,$WS_VSCROLL))
    $hWndListBox = GUICtrlGetHandle($idListUnit)
    GUICtrlSetData(-1, "uF|nF|pF", $sListInitUnit)
    GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

    GUISetState(@SW_SHOW)

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL")

    Do
        Sleep(5)
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc   ;==>Example

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode
    $hWndFrom = $lParam
    $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
    $iCode = BitShift($wParam, 16) ; Hi Word


    Switch $hWndFrom
        Case $hWndCombo
            Switch $iCode
                Case $LBN_SELCHANGE
                    ConsoleWrite('LBN_SELCHANGE1 ' & GUICtrlRead($idComboUnit) & @CRLF)
        EndSwitch

        Case $hWndListBox
            Switch $iCode
                Case $LBN_SELCHANGE
                    ConsoleWrite('LBN_SELCHANGE2 ' & GUICtrlRead($idListUnit) & @CRLF)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
    If $hWnd <> $hWndListBox Then Return
    $i = _GUICtrlListBox_GetTopIndex($idListUnit) ; first visible item
    _GUICtrlListBox_SetSel($idListUnit, $i)
EndFunc

 

Edited by Zedna

Share this post


Link to post
Share on other sites

That seems to work quite well :

#include <GuiListBox.au3>
#include <WinAPI.au3>
#include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>

Global $idCombo, $idComboUnit, $idList, $idListUnit
Global $sComboInitUnit = "pJ", $fComboVal = 7.5
Global $sListInitUnit = "nF", $fListVal = 0.15

Units_Conversion_Example()

Func Units_Conversion_Example()
  ; Create GUI
  Global $hGUI = GUICreate("Units Conversion", 400, 296)

  $idCombo = GUICtrlCreateInput($fComboVal, 22, 20, 91, 26)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
  $idComboUnit = GUICtrlCreateCombo("", 112, 20, 50, 30)
  GUICtrlSetData(-1, "uJ|nJ|pJ", $sComboInitUnit)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

  $idList = GUICtrlCreateInput($fListVal, 22, 80, 91, 26)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
  $idListUnit = GUICtrlCreateList("", 112, 80, 57, 26, BitOR($LBS_NOTIFY, $LBS_NOSEL, $WS_VSCROLL))
  GUICtrlSetData(-1, "uF|nF|pF", $sListInitUnit)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

  Global $hCtrl = GUICtrlGetHandle($idListUnit)

  Global $iDummy = GUICtrlCreateDummy()

  GUISetState(@SW_SHOW)

  GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

  Local $hProc = DllCallbackRegister(WM_LIST_BOX, "lresult", "hwnd;uint;wparam;lparam;uint_ptr;dword_ptr")
  Local $hProcPtr = DllCallbackGetPtr($hProc)
  DllCall("comctl32.dll", "bool", "SetWindowSubclass", "hwnd", $hCtrl, "ptr", $hProcPtr, "uint_ptr", 0xBEEF, "dword_ptr", 0)

  While True
    Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
        ExitLoop
      Case $iDummy
        ;ControlFocus ($hGUI, "", $hCtrl)
        ControlClick($hGUI, "", $idListUnit)
    EndSwitch
  WEnd

  GUIDelete()
  DllCall("comctl32.dll", "bool", "RemoveWindowSubclass", "hwnd", $hCtrl, "ptr", $hProcPtr, "uint_ptr", $WM_VSCROLL)
  DllCallbackFree($hProc)
EndFunc   ;==>Units_Conversion_Example

Func WM_LIST_BOX($hWnd, $iMsg, $wParam, $lParam, $uIdSubClass, $IRefData)
  #forceref $hWnd, $iMsg, $wParam, $lParam, $uIdSubClass, $IRefData
  Local $iDirection
  Switch $iMsg
    Case $WM_VSCROLL
      $iDirection = _WinAPI_LoWord ($wParam)
      If $iDirection = 0 Or $iDirection = 1 Then GUICtrlSendToDummy ($iDummy)
    Case $WM_MOUSEWHEEL
      $iDirection = _WinAPI_HiWord ($wParam)
      GUICtrlSendToDummy ($iDummy)
  EndSwitch

  Return DllCall("comctl32.dll", "lresult", "DefSubclassProc", "hwnd", $hWnd, "uint", $iMsg, "wparam", $wParam, "lparam", $lParam)[0]
EndFunc

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  #forceref $hWnd, $iMsg
  Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo, $hWndListBox
  If Not IsHWnd($idComboUnit) Then $hWndCombo = GUICtrlGetHandle($idComboUnit)
  If Not IsHWnd($idListUnit) Then $hWndListBox = GUICtrlGetHandle($idListUnit)
  $hWndFrom = $lParam
  $iIDFrom = BitAND($wParam, 0xFFFF)   ; Low Word
  $iCode = BitShift($wParam, 16)   ; Hi Word

  Switch $hWndFrom
    Case $hWndCombo
      Switch $iCode
        Case $CBN_SELCHANGE
          ConsoleWrite(GUICtrlRead($idComboUnit) & @CRLF)
      EndSwitch

    Case $hWndListBox
      Switch $iCode
        Case $LBN_SELCHANGE
          ConsoleWrite(GUICtrlRead($idListUnit) & @CRLF)
      EndSwitch
  EndSwitch
  Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

 

Share this post


Link to post
Share on other sites
2 hours ago, argumentum said:

..not that I can code it but, to what purpose is the scrolling position needed ?

The issue that the value in ListBox can be changed without control is focused - only mouse pointer hovers over a ListBox and mouse wheel will change the value. Even arrows up and down not really change a value (only move it). 
This is very useful option but very "danger" because the value visually changed without really be accepted.

Hope I made my self clear because my English is lame 🤪

 

@Zedna

Thanks a lot but it still not worked as you said...

Share this post


Link to post
Share on other sites
Posted (edited)
1 hour ago, Nine said:

That seems to work quite well :

#include <GuiListBox.au3>
#include <WinAPI.au3>
#include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>

Global $idCombo, $idComboUnit, $idList, $idListUnit
Global $sComboInitUnit = "pJ", $fComboVal = 7.5
Global $sListInitUnit = "nF", $fListVal = 0.15

Units_Conversion_Example()

Func Units_Conversion_Example()
  ; Create GUI
  Global $hGUI = GUICreate("Units Conversion", 400, 296)

  $idCombo = GUICtrlCreateInput($fComboVal, 22, 20, 91, 26)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
  $idComboUnit = GUICtrlCreateCombo("", 112, 20, 50, 30)
  GUICtrlSetData(-1, "uJ|nJ|pJ", $sComboInitUnit)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

  $idList = GUICtrlCreateInput($fListVal, 22, 80, 91, 26)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")
  $idListUnit = GUICtrlCreateList("", 112, 80, 57, 26, BitOR($LBS_NOTIFY, $LBS_NOSEL, $WS_VSCROLL))
  GUICtrlSetData(-1, "uF|nF|pF", $sListInitUnit)
  GUICtrlSetFont(-1, 13, 400, 0, "MS Reference Sans Serif")

  Global $hCtrl = GUICtrlGetHandle($idListUnit)

  Global $iDummy = GUICtrlCreateDummy()

  GUISetState(@SW_SHOW)

  GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

  Local $hProc = DllCallbackRegister(WM_LIST_BOX, "lresult", "hwnd;uint;wparam;lparam;uint_ptr;dword_ptr")
  Local $hProcPtr = DllCallbackGetPtr($hProc)
  DllCall("comctl32.dll", "bool", "SetWindowSubclass", "hwnd", $hCtrl, "ptr", $hProcPtr, "uint_ptr", 0xBEEF, "dword_ptr", 0)

  While True
    Switch GUIGetMsg()
      Case $GUI_EVENT_CLOSE
        ExitLoop
      Case $iDummy
        ;ControlFocus ($hGUI, "", $hCtrl)
        ControlClick($hGUI, "", $idListUnit)
    EndSwitch
  WEnd

  GUIDelete()
  DllCall("comctl32.dll", "bool", "RemoveWindowSubclass", "hwnd", $hCtrl, "ptr", $hProcPtr, "uint_ptr", $WM_VSCROLL)
  DllCallbackFree($hProc)
EndFunc   ;==>Units_Conversion_Example

Func WM_LIST_BOX($hWnd, $iMsg, $wParam, $lParam, $uIdSubClass, $IRefData)
  #forceref $hWnd, $iMsg, $wParam, $lParam, $uIdSubClass, $IRefData
  Local $iDirection
  Switch $iMsg
    Case $WM_VSCROLL
      $iDirection = _WinAPI_LoWord ($wParam)
      If $iDirection = 0 Or $iDirection = 1 Then GUICtrlSendToDummy ($iDummy)
    Case $WM_MOUSEWHEEL
      $iDirection = _WinAPI_HiWord ($wParam)
      GUICtrlSendToDummy ($iDummy)
  EndSwitch

  Return DllCall("comctl32.dll", "lresult", "DefSubclassProc", "hwnd", $hWnd, "uint", $iMsg, "wparam", $wParam, "lparam", $lParam)[0]
EndFunc

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  #forceref $hWnd, $iMsg
  Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo, $hWndListBox
  If Not IsHWnd($idComboUnit) Then $hWndCombo = GUICtrlGetHandle($idComboUnit)
  If Not IsHWnd($idListUnit) Then $hWndListBox = GUICtrlGetHandle($idListUnit)
  $hWndFrom = $lParam
  $iIDFrom = BitAND($wParam, 0xFFFF)   ; Low Word
  $iCode = BitShift($wParam, 16)   ; Hi Word

  Switch $hWndFrom
    Case $hWndCombo
      Switch $iCode
        Case $CBN_SELCHANGE
          ConsoleWrite(GUICtrlRead($idComboUnit) & @CRLF)
      EndSwitch

    Case $hWndListBox
      Switch $iCode
        Case $LBN_SELCHANGE
          ConsoleWrite(GUICtrlRead($idListUnit) & @CRLF)
      EndSwitch
  EndSwitch
  Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

 

Wow! Thanks a lot, it really works! 

Is this normal behavior? So many code for so simple thing 😬

Edited by RAMzor

Share this post


Link to post
Share on other sites

It is not such a big deal, it is, after all,  only a few additional lines of code to get the functionality you wanted.  The hard part is to find the right API to perform the task properly.

Share this post


Link to post
Share on other sites

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.

  • Similar Content

    • By Dan_555
      Hi, here are few functions for the ListBox.
      I have searched the forum, but most of the functions are for listview, so i took one example code from melba23 (clear selection) and
      wrote few more functions. (Because my current project needs them).
       
      These functions work only on a Multi-selection ListBox . 
      Edit: Only 1 function does not work with single selection box.
      The functions do: Clear Selection, Delete Selected items, Invert Selection, Move selected items up and down.
       The example code has 2 Listboxes. The selected items on the left ListBox can be moved up and down. The right Listbox has buttons for the other functions.
      #include <GUIConstantsEx.au3> #include <GuiListBox.au3> #include <WindowsConstants.au3> #include <Array.au3> Local $singlesel = 0, $iMsgBoxAnswer = 0 ;MsgBox features: Title=Yes, Text=Yes, Buttons=Yes and No, Icon=Question, Modality=Task Modal $iMsgBoxAnswer = MsgBox(8228, "Choose Listbox selecton type", "Yes for single, No for multi selection box") If $iMsgBoxAnswer = 6 Then $singlesel = 1 ;Yes Local $BL_1,$BL_2,$BR_1,$BR_2,$BR_3,$BR_4,$BR_5,$BR_6 Global $hForm1 = GUICreate("Listbox test", 349, 287) $LB_1 = GUICtrlCreateList("", 6, 40, 157, 244, BitOR($LBS_NOTIFY, $LBS_MULTIPLESEL, $WS_HSCROLL, $WS_VSCROLL, $LBS_DISABLENOSCROLL)) If $singlesel = 1 Then $LB_2 = GUICtrlCreateList("", 179, 40, 157, 244, BitOR($LBS_NOTIFY, $WS_HSCROLL, $WS_VSCROLL, $LBS_DISABLENOSCROLL)) Else $LB_2 = GUICtrlCreateList("", 179, 40, 157, 244, BitOR($LBS_NOTIFY, $LBS_MULTIPLESEL, $WS_HSCROLL, $WS_VSCROLL, $LBS_DISABLENOSCROLL)) $BR_3 = GUICtrlCreateButton("Reverse Sel", 272, 22, 68, 17) EndIf $BL_1 = GUICtrlCreateButton("Up", 20, 3, 35, 18) $BL_2 = GUICtrlCreateButton("Down", 60, 3, 35, 18) $BR_1 = GUICtrlCreateButton("Up", 200, 3, 35, 18) $BR_2 = GUICtrlCreateButton("Down", 240, 3, 35, 18) $BR_4 = GUICtrlCreateButton("Clear Sel", 217, 22, 52, 17) $BR_5 = GUICtrlCreateButton("Delete", 175, 22, 40, 17) $BR_6 = GUICtrlCreateButton("Populate", 290, 3, 50, 18) GUISetState(@SW_SHOW) For $x = 0 To 50 If $x <= 10 Then GUICtrlSetData($LB_1, $x & " test", 0) GUICtrlSetData($LB_2, $x & " Test", 0) Next While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $BL_1 $a = Listbox_ItemMoveUD($LB_1, -1) If $a > -1 Then WinSetTitle($hForm1, "", "Moved items: " & $a) Case $BL_2 $a = Listbox_ItemMoveUD($LB_1, 1) If $a > -1 Then WinSetTitle($hForm1, "", "Moved items: " & $a) Case $BR_1 Listbox_ItemMoveUD($LB_2, -1) Case $BR_2 Listbox_ItemMoveUD($LB_2, 1) Case $BR_3 Listbox_ReverseSelection($LB_2) Case $BR_4 Listbox_ClearSelection($LB_2) Case $BR_5 Listbox_DeleteSelectedItems($LB_2) Case $BR_6 ;Populate GUICtrlSetData($LB_2, "") ; Clears the listbox For $x = 0 To 50 GUICtrlSetData($LB_2, $x & " Test", 0) Next EndSwitch WEnd ;note $hLB_ID - is the Listbox id Func Listbox_DeleteSelectedItems($hLB_ID) Local $aSel = _GUICtrlListBox_GetSelItems($hLB_ID) ;Get selected items Local $i, $slb = 0, $y, $x If $aSel[0] = 0 Then ;If the array is empty, there is no selection, or it is a single selection listbox For $x = 0 To _GUICtrlListBox_GetCount($hLB_ID) - 1 $y = _GUICtrlListBox_GetSel($hLB_ID, $x) If $y = True Then $slb = 1 _GUICtrlListBox_DeleteString($hLB_ID, $x) ;Perform a delete on single sel. LB ExitLoop EndIf Next EndIf If $slb = 0 Then _GUICtrlListBox_BeginUpdate($hLB_ID) For $i = $aSel[0] To 1 Step -1 ;Loop backwards and delete the selected items _GUICtrlListBox_DeleteString($hLB_ID, $aSel[$i]) Next _GUICtrlListBox_EndUpdate($hLB_ID) EndIf EndFunc ;==>Listbox_DeleteSelectedItems Func Listbox_ClearSelection($hLB_ID) ;Removes the selection from multi and single selection ListBox Local $aSel = _GUICtrlListBox_GetSelItems($hLB_ID) ;Code from Melba23 - Autoit Forum Local $slb, $x, $y If $aSel[0] = 0 Then _GUICtrlListBox_SetCurSel($hLB_ID, -1) $slb = 1 EndIf If $slb = 0 Then _GUICtrlListBox_BeginUpdate($hLB_ID) For $i = 1 To $aSel[0] _GUICtrlListBox_SetSel($hLB_ID, $aSel[$i], False) Next _GUICtrlListBox_EndUpdate($hLB_ID) EndIf EndFunc ;==>Listbox_ClearSelection Func Listbox_ReverseSelection($hLB_ID) ;Logically, this function works only on multi-selection listboxes Local $i Local $aCou = _GUICtrlListBox_GetCount($hLB_ID) Local $cSel = _GUICtrlListBox_GetCaretIndex($hLB_ID) ;Save the caret _GUICtrlListBox_BeginUpdate($hLB_ID) For $i = 0 To $aCou _GUICtrlListBox_SetSel($hLB_ID, $i, Not (_GUICtrlListBox_GetSel($hLB_ID, $i))) Next _GUICtrlListBox_SetCaretIndex($hLB_ID, $cSel) ;Restore the caret _GUICtrlListBox_EndUpdate($hLB_ID) EndFunc ;==>Listbox_ReverseSelection Func Listbox_ItemMoveUD($hLB_ID, $iDir = -1) ;Listbox_ItemMoveUD - Up/Down Move Multi/Single item in a ListBox ;$iDir: -1 up, 1 down ;Return values -1 nothing to do, 0 nothing moved, >0 performed moves Local $iCur, $iNxt, $aCou, $aSel, $i, $m = 0, $y, $slb = 0 ;Current, next, Count, Selection, loop , movecount $aSel = _GUICtrlListBox_GetSelItems($hLB_ID) ;Put selected items in an array $aCou = _GUICtrlListBox_GetCount($hLB_ID) ;Get total item count of the listbox If $aSel[0] = 0 Then $y = _GUICtrlListBox_GetCurSel($hLB_ID) If $y > -1 Then _ArrayAdd($aSel, $y) $aSel[0] = 1 $slb = 1 EndIf EndIf ;WinSetTitle($hGUI, "", $aSel[0]) ;Debugging info Select Case $iDir = -1 ;Move Up For $i = 1 To $aSel[0] If $aSel[$i] > 0 Then $iNxt = _GUICtrlListBox_GetText($hLB_ID, $aSel[$i] - 1) ;Save the selection index - 1 text _GUICtrlListBox_ReplaceString($hLB_ID, $aSel[$i] - 1, _GUICtrlListBox_GetText($hLB_ID, $aSel[$i])) ;Replace the index-1 text with the index text _GUICtrlListBox_ReplaceString($hLB_ID, $aSel[$i], $iNxt) ;Replace the selection with the saved var $m = $m + 1 EndIf Next For $i = 1 To $aSel[0] ;Restore the selections after moving If $aSel[$i] > 0 Then If $slb = 0 Then _GUICtrlListBox_SetSel($hLB_ID, $aSel[$i] - 1, 1) Else _GUICtrlListBox_SetCurSel($hLB_ID, $aSel[$i] - 1) EndIf EndIf Next Return $m Case $iDir = 1 ;Move Down If $aSel[0] > 0 Then For $i = $aSel[0] To 1 Step -1 If $aSel[$i] < $aCou - 1 Then $iNxt = _GUICtrlListBox_GetText($hLB_ID, $aSel[$i] + 1) _GUICtrlListBox_ReplaceString($hLB_ID, $aSel[$i] + 1, _GUICtrlListBox_GetText($hLB_ID, $aSel[$i])) _GUICtrlListBox_ReplaceString($hLB_ID, $aSel[$i], $iNxt) $m = $m + 1 EndIf Next EndIf For $i = $aSel[0] To 1 Step -1 ;Restore the selections after moving If $aSel[$i] < $aCou - 1 Then If $slb = 0 Then _GUICtrlListBox_SetSel($hLB_ID, $aSel[$i] + 1, 1) Else _GUICtrlListBox_SetCurSel($hLB_ID, $aSel[$i] + 1) EndIf EndIf Next Return $m EndSelect Return -1 EndFunc ;==>Listbox_ItemMoveUD  
    • By topgundcp
      Hi, 
      This is my very first post in this forum and am also new with Autoit programming so be easy on me.
      Below is the code that I am trying to get the index of the item selected. No problem getting the text.
      Case $listEdition   ; handle of the list             local $index=0             $item=GUICTRLRead($listEdition)    ; This will return the text in the list             ; ==============   The loop below always fails  ==================             ; Meaning _GUICtrlListView_GetItemSelected($listEdition, $i) always return FALSE. WHY ???????              For $i = 0 To $editionArray[0] - 1   ; The content of the list in an array where editionArray[0] contains total count of items                 If _GUICtrlListView_GetItemSelected($listEdition, $i) Then                     $index = $i                     exitloop                 EndIf              Next              ;===================================================             ConsoleWrite( "Select Edition:     " & $item & "  index: " & $index & @CR) ....... Please look at the comments in the code & the pix attached.
      _GUICtrlListView_GetItemSelected($listEdition, $i) always returns FALSE.
      Another problem is on the list. It also populate  the total count of items from the Array. How can I skip this item from populating to the list ?.
      Please advise and thanks

    • By kneze
      Hi
      first step i write ipconfig output to ipconfig.txt. Now i try to find all Adapters and get for each adapter: Adapter Name, Description, Media State and Mac Adress and put it to listbox. I search for "Ethernet Adapter" but they are other entrys like Wireless Adapter .. How can i get all Adapters from ipconfig.txt and information for each adapter Adapter Name, Description, Media State and Mac Adress and write to listbox ? 
      Would appreciate any help!
      #include <File.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GUIListBox.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 451, 328, 856, 237) $Button1 = GUICtrlCreateButton("Button1", 8, 8, 75, 25) $List1 = GUICtrlCreateList("", 88, 8, 353, 305) GUISetState(@SW_SHOW) While 1 $msg = GUIGetMsg() Select ;Case $GUI_EVENT_CLOSE Case $msg = $GUI_EVENT_CLOSE Exitloop Case $msg = $Button1 $FilePath= "C:\temp\IPconfig.txt" $StringToSearch= "Ethernet adapter" $CaseSense=0 $Lines=_FileCountLines($FilePath) $hFile=FileOpen($FilePath,0) $Lines=_FileCountLines($FilePath) For $i=0 To Number($Lines) $Test=FileReadLine($hFile,$i) If StringInStr($Test,$StringToSearch,$CaseSense) Then $filereadAdapter = FileReadLine($hFile,$i) $filereadDescription = FileReadLine($hFile,$i+4) $filereadMediaState = FileReadLine($hFile,$i+2) $filereadMAcAdress = FileReadLine($hFile,$i+5) GUICtrlSetData($List1 , "Adapter: " & $filereadAdapter & @CRLF& "Description: "& $filereadDescription & @CRLF & "Media State: " & $filereadMediaState & @CRLF & "Mac Adress: " & $filereadMAcAdress& @CRLF) ;ExitLoop EndIf Next FileClose($hFile)  
       
    • By nacerbaaziz
      can we  create a list box with  Columns?
      welcome everybody
      Dears I have a question if you let me
      can we  create a list box with  Columns?
      i know we can create a list view with Columns
      but my question is about the list box
      I'm waiting your responses
      Thank you in advance
    • By hcI
      Hello
      Today I'm working on listbox but there might be something that I'm missing...
      I made a little script that allow the user to swap 2 items for the listbox. So the user select for example the 3rd item, press the button "Up" and it switch with the 2nd one, same with the "Down" button that switch with the 4th one.
      But when I select the 3rd item and switch it the item become unselected and I would like to select it again after the manipulation :
      As you can see in the comment of the script, _GUICtrlListBox_SetSel don't highlight/select them once the swap process is done..
      What am I missing ?
×
×
  • Create New...