albertmaathuis Posted August 5, 2014 Posted August 5, 2014 Hello, I am trying to make a listview and then change only 1 cell-item in the listview (similar like changing a cell in Excel, highlite it, then change it and save it when you click on another cell) I looked in the forum, but I can only find a way wich selects the whole row of a listview and then it tells me what the items in the listview are. Like in Excel I would like to make some cells editable and some not Example: Year---holiday-------------date----------weekday ; header of the listview 2014---newyear-----------1-januari----wednesday ; only 2014 should be editable, the other three cells are not editable, wendsday is filled in by the program 2014---easter monday---1-april-------monday ; 2014 and 1-april should be editable, the rest is filled by the programm etc I have been searching the forum, but cannot find anything which could help me on my way. Perhaps I used the wrong keywords. Anyone having suggestions?
MikahS Posted August 5, 2014 Posted August 5, 2014 (edited) Have a look at: _GUICtrlListView_GetSelectedIndices() Edited August 5, 2014 by MikahS Snips & Scripts My Snips: graphCPUTemp ~ getENVvarsMy Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4 Feel free to use any of my code for your own use. Forum FAQ
computergroove Posted August 5, 2014 Posted August 5, 2014 Are you doing this in an autoit GUI? If so you would be better looking in the GUI forum. Where are you getting the date data from? Get Scite to add a popup when you use a 3rd party UDF -> http://www.autoitscript.com/autoit3/scite/docs/SciTE4AutoIt3/user-calltip-manager.html
albertmaathuis Posted August 5, 2014 Author Posted August 5, 2014 Hi MikahS, OK, that could be someting, I'm gooing to try this. Hi Computergroove, The date data are (for some holidays) not always the same, so I put them in by hand. The weekdays are found by the functions: _Isoweeknumber, _DataFromWeeknumber which I found in the forum Thanks for the tip, I will search also in the GUI forum.
MikahS Posted August 5, 2014 Posted August 5, 2014 Any chance we could have a look at something you have tried? Snips & Scripts My Snips: graphCPUTemp ~ getENVvarsMy Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4 Feel free to use any of my code for your own use. Forum FAQ
albertmaathuis Posted August 5, 2014 Author Posted August 5, 2014 Of course, as soon I have something operational I will share it at the forum. (It's now 19:43 in France, so I'm going to work on it tomorrow)
Zedna Posted August 5, 2014 Posted August 5, 2014 (edited) Definitely look at these topics in examples forum section: '?do=embed' frameborder='0' data-embedContent>> '?do=embed' frameborder='0' data-embedContent>> Edited August 5, 2014 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search
albertmaathuis Posted August 6, 2014 Author Posted August 6, 2014 Hi there, This is the code I have up to now. It needs some error handling, but it works. The standard holidays could perhaps be imported in a similar way as in outlook. Perhaps anyone knows the name of the file outlook uses? Everybody thanks for their assistance expandcollapse popup#include <GuiConstants.au3> #include <GuiEdit.au3> #include <GuiListView.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <WinAPI.au3> #include <Date.au3> ; original code from BugFix and M4nOx june 2013 Opt("GuiCloseOnESC", 0) Global $hEdit, $hDC, $hBrush, $Item = -1, $SubItem = 0 Global $hlistview Global $Style = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT) $hGUI = GUICreate("ListView Subitems edit in place", 500, 280) $hNM_DBCLK = GUICtrlCreateDummy() $hEN_KILLFOCUS = GUICtrlCreateDummy() Global $Day=@MDAY,$Month=@MON,$Year=@YEAR,$weekstart=0,$iWeekNum,$iName createlistview() filllistview() GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit case $hNM_DBCLK Start_EditingLV() ;Case $hEN_KILLFOCUS ; End_EditingLV() EndSwitch WEnd Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) Local $tNMHDR, $hWndFrom, $iCode $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hListView Switch $iCode Case $NM_DBLCLK GUICtrlSendToDummy($hNM_DBCLK) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Func FrameRect($hDC, $nLeft, $nTop, $nRight, $nBottom, $hBrush) Local $stRect = DllStructCreate("int;int;int;int") DllStructSetData($stRect, 1, $nLeft) DllStructSetData($stRect, 2, $nTop) DllStructSetData($stRect, 3, $nRight) DllStructSetData($stRect, 4, $nBottom) DllCall("user32.dll", "int", "FrameRect", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect), "hwnd", $hBrush) EndFunc Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam) Local $iCode = BitShift($wParam, 16) Switch $lParam Case $hEdit Switch $iCode Case $EN_KILLFOCUS GUICtrlSendToDummy($hEN_KILLFOCUS) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Func Start_EditingLV() ControlDisable($hGUI, "", HWnd(_GUICtrlListView_GetHeader($hListView))) Local $aHit = _GUICtrlListView_SubItemHitTest($hListView) Local $hRect = ControlGetPos($hGUI, "", $hListView) If ($aHit[0] <> -1) And ($aHit[1] = 0) Then $Item = $aHit[0] $SubItem = 0 Local $aRect = _GUICtrlListView_GetItemRect($hListView, $Item) ElseIf ($aHit[0] <> -1) And ($aHit[1] > 0) Then $Item = $aHit[0] $SubItem = $aHit[1] Local $aRect = _GUICtrlListView_GetSubItemRect($hListView, $Item, $SubItem) Else Return $GUI_RUNDEFMSG EndIf Local $iItemText = _GUICtrlListView_GetItemText($hListView, $Item, $SubItem) Local $iLen = _GUICtrlListView_GetStringWidth($hListView, $iItemText) $hEdit = _GUICtrlEdit_Create($hGUI, $iItemText, $aRect[0] + ($hRect[0] + 3), $aRect[1] + $hRect[1], $iLen + 10, 17, $Style) _GUICtrlEdit_SetSel($hEdit, 0, -1) _WinAPI_SetFocus($hEdit) $hDC = _WinAPI_GetWindowDC($hEdit) $hBrush = _WinAPI_CreateSolidBrush(0x0000FF) FrameRect($hDC, 0,0, $iLen + 10 , 17, $hBrush) HotKeySet("{ENTER}", "End_EditingLV") EndFunc Func End_EditingLV() Local $iText = _GUICtrlEdit_GetText($hEdit) Local $iItemText_year = _GUICtrlListView_GetItemText($hListView, $Item, 0) Local $iItemText_day = _GUICtrlListView_GetItemText($hListView, $Item, 1) Local $iItemText_date = _GUICtrlListView_GetItemText($hListView, $Item, 2) Local $iItemText_weeknumber = _GUICtrlListView_GetItemText($hListView, $Item, 3) Local $iItemText_weekday = _GUICtrlListView_GetItemText($hListView, $Item, 4) if $SubItem=0 Then; the year was edited $Year=$iText $Month=StringRight($iItemText_date,2) $Day=StringLeft($iItemText_date,2) $weekstart=0 week_and_day($iName); this will return the weeknumber and the name of the day of the week _GUICtrlListView_SetItemText($hListView, $Item, $iText, 0); placing the right year _GUICtrlListView_SetItemText($hListView, $Item, $iWeekNum, 3); placing the right week number _GUICtrlListView_SetItemText($hListView, $Item, $iName, 4); placing the right name of the day EndIf if $SubItem=2 Then; the date was edited $Month=StringRight($iText,2) $Day=StringLeft($iText,2) if $Month<=0 or $Month>12 Then MsgBox(0,"Error","Date format should be dd-mm"&@CRLF&"Please try again") $Month=StringRight($iItemText_date,2) $Day=StringLeft($iItemText_date,2) EndIf if $Day<=0 or $Day>31 Then MsgBox(0,"Error","Date format should be dd-mm"&@CRLF&"Please try again") $Month=StringRight($iItemText_date,2) $Day=StringLeft($iItemText_date,2) EndIf $Year=$iItemText_year $weekstart=0 week_and_day($iName); this will return the iweeknumber and the iname of the day of the week _GUICtrlListView_SetItemText($hListView, $Item, $Day&"-"&$Month, 2); placing the right date _GUICtrlListView_SetItemText($hListView, $Item, $iWeekNum, 3); placing the right week number _GUICtrlListView_SetItemText($hListView, $Item, $iName, 4); placing the right name of the day EndIf _WinAPI_DeleteObject($hBrush) _WinAPI_ReleaseDC($hEdit, $hDC) _WinAPI_DestroyWindow($hEdit) ControlEnable($hGUI, "", HWnd(_GUICtrlListView_GetHeader($hListView))) $Item = -1 $SubItem = 0 HotKeySet("{ENTER}") EndFunc func createlistview() $hListView = _GUICtrlListView_Create($hGUI, "", 10, 20, 600, 250) ; Add columns _GUICtrlListView_AddColumn($hlistview, "Year", 100) _GUICtrlListView_AddColumn($hlistview, "Holiday", 100) _GUICtrlListView_AddColumn($hlistview, "Date", 100) _GUICtrlListView_AddColumn($hlistview, "WeekNumber", 100) _GUICtrlListView_AddColumn($hlistview, "Weekday", 100) _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_AUTOARRANGE,$LVS_EX_FULLROWSELECT,$LVS_EX_DOUBLEBUFFER,$LVS_EX_SUBITEMIMAGES)) EndFunc func filllistview() _GUICtrlListView_AddItem($hListView, "2014") _GUICtrlListView_AddSubItem($hListView, 0, "New Year", 1) _GUICtrlListView_AddSubItem($hListView, 0, "01-01", 2) _GUICtrlListView_AddSubItem($hListView, 0, "1", 3) _GUICtrlListView_AddSubItem($hListView, 0, "unknown", 4) _GUICtrlListView_AddItem($hListView, "2014") _GUICtrlListView_AddSubItem($hListView, 1, "Easter monday", 1) _GUICtrlListView_AddSubItem($hListView, 1, "01-04", 2) _GUICtrlListView_AddSubItem($hListView, 1, "1", 3) _GUICtrlListView_AddSubItem($hListView, 1, "unknown", 4) _GUICtrlListView_AddItem($hListView, "2014") _GUICtrlListView_AddSubItem($hListView, 2, "Kingsday", 1) _GUICtrlListView_AddSubItem($hListView, 2, "29-04", 2) _GUICtrlListView_AddSubItem($hListView, 2, "1", 3) _GUICtrlListView_AddSubItem($hListView, 2, "unknown", 4) EndFunc func week_and_day(ByRef $iName) $iWeekNum =_ISOWeekNumber($Day, $Month, $Year, $WeekStart); het huidige weeknummer $s = _DateFromWeekNumber($Year, $iWeekNum) $sDates = _DateFormat($s, "dd-MM-yyyy") For $i = 1 To 6 $sDates &= "|" & _DateFormat(_DateAdd("D", $i, $s), "dd-MM-yyyy") Next $aDates = StringSplit($sDates, "|", 2); the real date For $i = 0 To 6 if StringLeft($aDates[$i],2)=$Day Then $iName=_DateDayOfWeek($i+1) EndIf Next EndFunc Func _ISOWeekNumber($Day, $Month, $Year, $WeekStart) local $firstDay Local $diff Local $FirstWeekStart ; Check for erroneous input in $Day, $Month & $Year If $Day > 31 or $Day < 1 Then SetError(1) Return -1 ElseIf $Month > 12 or $Month < 1 Then SetError(1) Return -1 ElseIf $Year < 1 or $Year > 2999 Then SetError(1) Return -1 EndIf ; check if $WeekStart parameter is ok (= Sun / Mon) If Not IsInt($WeekStart) Or $WeekStart > 1 or $WeekStart < 0 Then $WeekStart = 0 SetError(99) EndIf ; Find out the first day of real week 1 $firstDay = _dateToDayOfWeek($Year, 1, 1) If $firstDay = 1 Then $diff = 1 - $firstDay + $WeekStart ElseIf $firstDay = 2 Then $diff = 1 - $firstDay + $WeekStart ElseIf $firstDay <= 5 Then $diff = 1-$firstDay + $WeekStart ElseIf $firstDay > 5 Then $diff = 7 - ($firstDay -1) + $WeekStart EndIf $FirstWeekStart = _DateAdd ( 'd', $diff, $Year & "/01/01") ; Compare to real first day of week 1 and find out the difference in weeks If _DateDiff('d', $FirstWeekStart, $Year & "/" & $Month & "/" & $Day) >= 0 Then return _DateDiff( 'w',$FirstWeekStart, $Year & "/" & $Month & "/" & $Day) +1 Else return _DateDiff( 'w',$Year-1 & "/01/01", $Year & "/" & $Month & "/" & $Day) EndIf Endfunc ; The week with the first Thursday of the year is week number 1. ;Returns the date of the Monday of the week number. Func _DateFromWeekNumber($iYear, $iWeekNum) Local $Date, $sFirstDate = _DateToDayOfWeek($iYear, 1, 1) If $sFirstDate < 6 Then $Date = _DateAdd("D", 2 - $sFirstDate, $iYear & "/01/01") ElseIf $sFirstDate = 6 Then $Date = _DateAdd("D", $sFirstDate - 3, $iYear & "/01/01") ElseIf $sFirstDate = 7 Then $Date = _DateAdd("D", $sFirstDate - 5, $iYear & "/01/01") EndIf Local $aDate = StringSplit($Date, "/", 2) Return _DateAdd("w", $iWeekNum - 1, $aDate[0] & "/" & $aDate[1] & "/" & $aDate[2]) EndFunc ;==>_DateFromWeekNumber ; Format date ; $sDate, input date in the format yyyy/MM/dd[ hh:mm:ss] Func _DateFormat($sDate, $sFormat) local $hGui = GUICreate("") local $idDate = GUICtrlCreateDate($sDate, 10, 10) GUICtrlSendMsg($idDate, 0x1032, 0, $sFormat) ; or "dddd, MMMM d, yyyy hh:mm:ss tt"); or "hh:mm tt" local $FormatedDate = GUICtrlRead($idDate) GUIDelete($hGui) Return $FormatedDate EndFunc ;==>_DateFormat
albertmaathuis Posted August 6, 2014 Author Posted August 6, 2014 By the way, the outlook file with holidays is named: "outlook.hol" and can be found in: station:Program FilesMicrosoft Office.....
Moderators Melba23 Posted August 6, 2014 Moderators Posted August 6, 2014 albertmaathuis,Look at my GUIListViewEx UDF (the link is in my sig) - it allows you to edit ListView cells very easily. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
albertmaathuis Posted August 7, 2014 Author Posted August 7, 2014 Hello, Thanks Melba23 your UDF is really easier and it gives much more possibilities I made the same version with your UDF. The code is below. There is only one thing wich I couldn't figure out. When e.g. I type the same year of date in a cell the "$aRet = _GUIListViewEx_EditOnClick($iEditMode)" returns an array of only 1 line instead of two lines. Is there a check on the string in the cell in your UDF? And if so, is there a way that I can check if the returned array has more then one line? expandcollapse popup#include <GuiConstants.au3> #include <GuiEdit.au3> #include <GuiListView.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <WinAPI.au3> #include <Date.au3> #include "GUIListViewEx.au3" #include <GuiConstantsEx.au3> Opt("GuiCloseOnESC", 0) Global $aListview, $aRet, $iEditMode =0 Global $hEdit, $hDC, $hBrush, $Item = -1, $SubItem = 0 Global $hlistview ;Global $Style = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT) $hGUI = GUICreate("holidays listview editable/ sortable", 500, 280) ;$hNM_DBCLK = GUICtrlCreateDummy() ;$hEN_KILLFOCUS = GUICtrlCreateDummy() Global $Day=@MDAY,$Month=@MON,$Year=@YEAR,$weekstart=0,$iWeekNum,$iName create_listview() fill_listview() GUISetState() ; Register for sorting, dragging and editing _GUIListViewEx_MsgRegister() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch $aRet = _GUIListViewEx_EditOnClick($iEditMode) ; Use combos to change EditMode ; Array only returned AFTER EditOnClick process - so check array exists If IsArray($aRet) Then ; Uncomment to see returned array ;_ArrayDisplay($aRet, @error) recalculate() EndIf WEnd func recalculate() local $OriginalDay,$OriginalMonth,$OriginalYear $iRow=$aRet[1][0]+1 $iCol=$aRet[1][1] ; read first the original values $OriginalYear=$aListview[$iRow][0] $OriginalMonth=StringRight($aListview[$iRow][2],2) $OriginalDay=StringLeft($aListview[$iRow][2],2) ;now update the array with the edited value $aListview = _GUIListViewEx_ReadToArray($hListview, 1); update array if $iCol=0 Then; the year was edited $Year=$aListview[$iRow][0] $Month=StringRight($aListview[$iRow][2],2) $Day=StringLeft($aListview[$iRow][2],2) $weekstart=0 week_and_day($iName); this will return the weeknumber and the name of the day of the week $aListview[$iRow][3]=$iWeekNum; placing the right week number in the array $aListview[$iRow][4]=$iName; placing the right name of the day in the array _GUICtrlListView_SetItemText($hListView, $iRow-1, $iWeekNum, 3); placing the right week number _GUICtrlListView_SetItemText($hListView, $iRow-1, $iName, 4); placing the right name of the day EndIf if $iCol=2 Then; the date was edited $Month=StringRight($aListview[$iRow][2],2) $Day=StringLeft($aListview[$iRow][2],2) if $Month<=0 or $Month>12 Then MsgBox(0,"Error","Date format should be dd-mm"&@CRLF&"Please try again") $Month=$OriginalMonth $Day=$OriginalDay EndIf if $Day<=0 or $Day>31 Then MsgBox(0,"Error","Date format should be dd-mm"&@CRLF&"Please try again") $Month=$OriginalMonth $Day=$OriginalDay EndIf $Year=$OriginalYear $weekstart=0 $iName="" week_and_day($iName); this will return the weeknumber and the name of the day of the week $aListview[$iRow][2]=$Day&"-"&$Month; placing the right date in the array $aListview[$iRow][3]=$iWeekNum; placing the right week number in the array $aListview[$iRow][4]=$iName; placing the right name of the day in the array _GUICtrlListView_SetItemText($hListView, $iRow-1, $Day&"-"&$Month, 2); placing the right date _GUICtrlListView_SetItemText($hListView, $iRow-1, $iWeekNum, 3); placing the right week number _GUICtrlListView_SetItemText($hListView, $iRow-1, $iName, 4); placing the right name of the day EndIf EndFunc func create_listview() $hListview = _GUICtrlListView_Create($hGUI, "", 10, 20, 600, 250, BitOR($LVS_DEFAULT, $WS_BORDER)) _GUICtrlListView_SetExtendedListViewStyle($hListview, $LVS_EX_FULLROWSELECT) ; Add columns _GUICtrlListView_AddColumn($hlistview, "Year", 100) _GUICtrlListView_AddColumn($hlistview, "Holiday", 100) _GUICtrlListView_AddColumn($hlistview, "Date", 100) _GUICtrlListView_AddColumn($hlistview, "WeekNumber", 100) _GUICtrlListView_AddColumn($hlistview, "Weekday", 100) _GUICtrlListView_SetTextBkColor($hListview, 0xDDFFDD) EndFunc func fill_listview() _GUICtrlListView_AddItem($hListView, "2014") _GUICtrlListView_AddSubItem($hListView, 0, "New Year", 1) _GUICtrlListView_AddSubItem($hListView, 0, "01-01", 2) _GUICtrlListView_AddSubItem($hListView, 0, "1", 3) _GUICtrlListView_AddSubItem($hListView, 0, "unknown", 4) _GUICtrlListView_AddItem($hListView, "2014") _GUICtrlListView_AddSubItem($hListView, 1, "Easter monday", 1) _GUICtrlListView_AddSubItem($hListView, 1, "01-04", 2) _GUICtrlListView_AddSubItem($hListView, 1, "1", 3) _GUICtrlListView_AddSubItem($hListView, 1, "unknown", 4) _GUICtrlListView_AddItem($hListView, "2014") _GUICtrlListView_AddSubItem($hListView, 2, "Kingsday", 1) _GUICtrlListView_AddSubItem($hListView, 2, "29-04", 2) _GUICtrlListView_AddSubItem($hListView, 2, "1", 3) _GUICtrlListView_AddSubItem($hListView, 2, "unknown", 4) ; Read array from Right ListView $aListview = _GUIListViewEx_ReadToArray($hListview, 1) $iLV_Index = _GUIListViewEx_Init($hListview, $aListview, 1, 0xFF0000, True, 2 + 4 + 8 + 16,"*") EndFunc func week_and_day(ByRef $iName) Local $s,$sDates $iWeekNum =_ISOWeekNumber($Day, $Month, $Year, $WeekStart); het huidige weeknummer $s = _DateFromWeekNumber($Year, $iWeekNum) $sDates = _DateFormat($s, "dd-MM-yyyy") For $i = 1 To 6 $sDates &= "|" & _DateFormat(_DateAdd("D", $i, $s), "dd-MM-yyyy") Next $aDates = StringSplit($sDates, "|", 2); the real date For $i = 0 To 6 if StringLeft($aDates[$i],2)=$Day Then $iName=_DateDayOfWeek($i+2) EndIf Next EndFunc Func _ISOWeekNumber($Day, $Month, $Year, $WeekStart) local $firstDay Local $diff Local $FirstWeekStart ; Check for erroneous input in $Day, $Month & $Year If $Day > 31 or $Day < 1 Then SetError(1) Return -1 ElseIf $Month > 12 or $Month < 1 Then SetError(1) Return -1 ElseIf $Year < 1 or $Year > 2999 Then SetError(1) Return -1 EndIf ; check if $WeekStart parameter is ok (= Sun / Mon) If Not IsInt($WeekStart) Or $WeekStart > 1 or $WeekStart < 0 Then $WeekStart = 0 SetError(99) EndIf ; Find out the first day of real week 1 $firstDay = _dateToDayOfWeek($Year, 1, 1) If $firstDay = 1 Then $diff = 1 - $firstDay + $WeekStart ElseIf $firstDay = 2 Then $diff = 1 - $firstDay + $WeekStart ElseIf $firstDay <= 5 Then $diff = 1-$firstDay + $WeekStart ElseIf $firstDay > 5 Then $diff = 7 - ($firstDay -1) + $WeekStart EndIf $FirstWeekStart = _DateAdd ( 'd', $diff, $Year & "/01/01") ; Compare to real first day of week 1 and find out the difference in weeks If _DateDiff('d', $FirstWeekStart, $Year & "/" & $Month & "/" & $Day) >= 0 Then return _DateDiff( 'w',$FirstWeekStart, $Year & "/" & $Month & "/" & $Day) +1 Else return _DateDiff( 'w',$Year-1 & "/01/01", $Year & "/" & $Month & "/" & $Day) EndIf Endfunc ; The week with the first Thursday of the year is week number 1. ;Returns the date of the Monday of the week number. Func _DateFromWeekNumber($iYear, $iWeekNum) Local $Date, $sFirstDate = _DateToDayOfWeek($iYear, 1, 1) If $sFirstDate < 6 Then $Date = _DateAdd("D", 2 - $sFirstDate, $iYear & "/01/01") ElseIf $sFirstDate = 6 Then $Date = _DateAdd("D", $sFirstDate - 3, $iYear & "/01/01") ElseIf $sFirstDate = 7 Then $Date = _DateAdd("D", $sFirstDate - 5, $iYear & "/01/01") EndIf Local $aDate = StringSplit($Date, "/", 2) Return _DateAdd("w", $iWeekNum - 1, $aDate[0] & "/" & $aDate[1] & "/" & $aDate[2]) EndFunc ;==>_DateFromWeekNumber ; Format date ; $sDate, input date in the format yyyy/MM/dd[ hh:mm:ss] Func _DateFormat($sDate, $sFormat) local $hGui = GUICreate("") local $idDate = GUICtrlCreateDate($sDate, 10, 10) GUICtrlSendMsg($idDate, 0x1032, 0, $sFormat) ; or "dddd, MMMM d, yyyy hh:mm:ss tt"); or "hh:mm tt" local $FormatedDate = GUICtrlRead($idDate) GUIDelete($hGui) Return $FormatedDate EndFunc ;==>_DateFormat bilities then my first code.
Moderators Melba23 Posted August 9, 2014 Moderators Posted August 9, 2014 albertmaathuis,I think you have misunderstood the content of the array returned from _GUIListViewEx_EditOnClick. As your code stands, you will exit the editing process after each edit and the array will only ever hold a single element coordinate:1 . Row ColIf you want to be able to edit more than one item, you need to set the $iEditMode parameter to allow for multiple edits in one pass - and set the correct $sCols parameter when initialising the ListView to get only certain columns to be editable. I changed your code as followsL; Line 14 Global $aListview, $aRet, $iEditMode = 33 ; This edit mode allows you to loop around the editable elements - only Enter or Esc will end the edit process ; Line 144 $iLV_Index = _GUIListViewEx_Init($hlistview, $aListview, 1, 0xFF0000, True, 2 + 4, "0;2") ; Only columns 0 and 2 editable - which is what you wantedNow when I edit several items, I get an array with several sets of coordinates - like this:3 . 0 0 2 0 2 0You can see that the [0][0] element of the array indicates the number of edits that took place. The UDF does not return the content of the edited cells - it tells you which cells were edited and then it is up to the user to determine the content by examining the revised content of the ListView (use _GUIListViewEx_ReturnArray to get this in array form) and reading the relevant cells. Does all that make sense? Please ask again if not. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
albertmaathuis Posted August 12, 2014 Author Posted August 12, 2014 Hello Melba23, Thanks for the explanation. This was really helpfull, now I can change the code in the proper way.
Moderators Melba23 Posted August 13, 2014 Moderators Posted August 13, 2014 albertmaathuis,Great - do not hesitate to ask if you run into any problems. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now