#include #include #include #include #include #include #include #include #include #include #include #include #include "GUIListViewEx.au3" ;~ #include ".\GUIListViewEx\GUIListViewEx.au3" $hGUI = GUICreate("ListView Example_6 MultiComBoxX's", 660, 330) ; Create ListView GUICtrlCreateLabel("ComboBox - $vRow, $vCol for edit Multi ComboBox's) etc...", 10, 10, 400, 20) $idListview_1 = GUICtrlCreateListView("Col 0|Col 1|Col 2|Col 3", 10, 30, 640, 260, BitOR( $LVS_SINGLESEL, $LVS_SHOWSELALWAYS)) ; $iD $hListView_1 = ControlGetHandle( $hGUI, "", $idListview_1) _GUICtrlListView_SetExtendedListViewStyle( $idListview_1, BitOR( $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES)) ; BitOR( $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP)) For $i = 0 To 3 _GUICtrlListView_SetColumnWidth( $idListview_1, $i, 158) Next ; Create Cols & Rows Global $vCols = 6, $vRows = 4 ; Create array and fill listview Global $aLVArray_1[$vCols][$vRows] $aLVArray_1[0][0] = "RJ-45 color order USA|RJ-45 color order EUROPE|RJ-45 color order ASIA" $aLVArray_1[0][2] = "Blue,Green,Orange,Brown|Blue,Orange,Green,Brown" $aLVArray_1[1][0] = "Standard TV USA|Standard TV EUROPE" $aLVArray_1[1][2] = "NTSC|Pal/Secam|Pal/Secam/NTSC" $aLVArray_1[2][1] = "Black|White|Yellow|Green|Red|Blue" $aLVArray_1[3][2] = "50 HZ|55 hZ|60 hZ|120 hZ|144 hZ" $aLVArray_1[4][0] = "Janvier|Février|Mars|Avril|Mai|Juin|Juillet|Août|Septembre|Octobre|Novembre|Décembre" $aLVArray_1[5][3] = "Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi|Dimanche" _Combo_Array( $idListview_1, $aLVArray_1, $vRows, $vCols) ; ; Initiate ListView = sort on column click - editable headers $iLVIndex_1 = _GUIListViewEx_Init( $idListview_1, $aLVArray_1, 0, 0, True, 8 + 256 +512) ; + 16 ; Set column edit status _GUIListViewEx_SetEditStatus( $iLVIndex_1, "0", 9, _Combo_Edit) ; Call function when double clicked ;~ _GUIListViewEx_SetEditStatus( $iLVIndex_1, "1", 9, _Combo_Edit) _GUIListViewEx_SetEditStatus( $iLVIndex_1, "1") ; "0;2;3" _GUIListViewEx_SetEditStatus( $iLVIndex_1, "2", 9, _Combo_Edit) _GUIListViewEx_SetEditStatus( $iLVIndex_1, "3", 9, _Combo_Edit) $cContent = GUICtrlCreateButton("Content", 100, 295, 80, 30) $cLVArray = GUICtrlCreateButton("LVArray_1", 200, 295, 80, 30) $cHeaders = GUICtrlCreateButton("Headers", 300, 295, 80, 30) GUISetState() _GUIListViewEx_MsgRegister() While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE Exit Case $cContent $aRet = _GUIListViewEx_ReturnArray($iLVIndex_1) _ArrayDisplay($aRet, "$cContent", Default, 8) Case $cLVArray _ArrayDisplay( $aLVArray_1, "$aLVArray_1", Default, 8) Case $cHeaders $aRet = _GUIListViewEx_ReturnArray($iLVIndex_1, 4) _ArrayDisplay($aRet, "$cHeaders", Default, 8) EndSwitch $vRet = _GUIListViewEx_EventMonitor() If @error Then MsgBox($MB_SYSTEMMODAL, "Error", "Event error: " & @error) EndIf Switch @extended Case 0 ; No event detected Case 1 If $vRet = "" Then ;~ MsgBox($MB_SYSTEMMODAL, "Edit", "Edit aborted" & @CRLF) Else _ArrayDisplay($vRet, "ListView " & _GUIListViewEx_GetActive() & " content edited", Default, 8) EndIf Case 2 If $vRet = "" Then ;~ MsgBox($MB_SYSTEMMODAL, "Header edit", "Header edit aborted" & @CRLF) Else _ArrayDisplay($vRet, "ListView " & _GUIListViewEx_GetActive() & " header edited", Default, 8) EndIf Case 3 MsgBox($MB_SYSTEMMODAL, "Sorted", "ListView: " & $vRet & @CRLF) Case 4 Local $aRet = StringSplit($vRet, ":") MsgBox($MB_SYSTEMMODAL, "Dragged", "From ListView " & $aRet[1] & @CRLF & "To ListView " & $aRet[2]) EndSwitch WEnd Func _Combo_Array( $hLV, $vValue, $iRow, $iCol) Local $vRet = "", $vValueCombo = "" For $i = 0 To $iCol -1 $vRet = "" $vValueCombo = "" For $j = 0 To $iRow -1 $vRet = StringLeft( $vValue[$i][$j], StringInStr( $vValue[$i][$j], "|") -1) $vValueCombo &= $vRet & "|" Next If $vValueCombo <> "" Or $vRet = "" Then GUICtrlCreateListViewItem( $vValueCombo, $hLV) Next EndFunc Func _Combo_Edit( $hLV, $iIndexLV, $iRow, $iCol) _GUIListViewEx_BlockReDraw( $idListview_1, True) ; True = Prevent redrawing during Insert/Delete/Change calls Local $a_LVArray = $aLVArray_1 ; <=== External Global Array to Local Local $sCombo_Fill Switch $iRow Case 0 To UBound( $a_LVArray, $UBOUND_ROWS) -1 Switch $iCol Case 0 To UBound( $a_LVArray, $UBOUND_COLUMNS) -1 $sCombo_Fill = $a_LVArray[ $iRow][ $iCol] EndSwitch EndSwitch ; Retrieve the position x, y and size (width and height) Local $aPos = ControlGetPos( $hGUI, "", $hLV) $aRect = _GUICtrlListView_GetSubItemRect( $hLV, $iRow, $iCol) $X = $aPos[0]+$aRect[0] +2 $Y = $aPos[1]+$aRect[1] +1 $W = _GUICtrlListView_GetColumnWidth($hLV, $iCol) $H = $aRect[3]-$aRect[1] +2 ; Create combo dialog $hCombo_Dialog = GUICreate( "", $W, $H, -1, -1, BitOR($WS_POPUP, $WS_SYSMENU), $WS_EX_TOOLWINDOW+$WS_EX_TOPMOST) ; Attach window to the desktop (always on bottom) _WinAPI_SetParent( $hCombo_Dialog, $hGUI) ; Move GUI 2 WinMove( $hCombo_Dialog, "", $X, $Y, $W, $H) ; Move GUI 2 Combo OK Local $aLVPos = WinGetClientSize( $hCombo_Dialog) $cCombo = GUICtrlCreateCombo( "", 0, 0, $aLVPos[0], $aLVPos[1]) ; Fill combo with required elements GUICtrlSetData( $cCombo, $sCombo_Fill, _GUICtrlListView_GetItemText( $hLV, $iRow, $iCol)) GUISetState() ControlClick( $hCombo_Dialog, "", $cCombo, "left", 1, $aLVPos[0]-5, $aLVPos[1]-5) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, WinActive( $hCombo_Dialog) GUIDelete( $hCombo_Dialog) Return Case $cCombo ExitLoop EndSwitch WEnd ; Change ListView element to match selection _GUIListViewEx_ChangeItem( $iIndexLV, $iRow, $iCol, GUICtrlRead( $cCombo)) ControlListView( $hGUI, "", $idListview_1, "DeSelect", $iRow) _GUICtrlListView_SetItemFocused( $hListView_1, $iRow, False) _GUIListViewEx_BlockReDraw( $idListview_1, False) ; False = Allow future redrawing and force a redraw GUIDelete( $hCombo_Dialog) EndFunc