Dana Posted June 8, 2009 Share Posted June 8, 2009 I'm working with a GUI with GUICtrlCreateListView, GUICtrlCreateListViewItem, and GUICtrlSetData to display COM port data as it's received. That's working fine, but when the number of lines in the list exceeds the height of the ListView box, and I get a scroll bar. That would also be OK, but the new data received goes to the bottom of the list where it's not visible. Is there any way to force the list to scroll to the current line, or to a specified line? Link to comment Share on other sites More sharing options...
Zedna Posted June 8, 2009 Share Posted June 8, 2009 #include <GuiListView.au3> _GUICtrlListView_EnsureVisible() Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
Dana Posted June 9, 2009 Author Share Posted June 9, 2009 (edited) Thanks... that almost does it. Seems like it should, but it only works when I rewrite to an existing line, and I don't see why. Here I have some code that reads from a com port and puts the result in one of two colums depending on the string. If both columns are written to, it fills in another column.expandcollapse popup$w = 600 $h = 800 Opt("GUIOnEventMode", 1) ; Change to OnEvent mode $datawindow = GUICreate("Data Collection", $w, $h) GUICtrlCreateLabel("Part Number: " & $partnum & " Job Number: " & $job, 30, 10) GUICtrlCreateLabel(" Plunger Depth Gage (A): " & $gageA & " Ball Depth Gage ( B) : " & $gageB & " Clearance: " & $clearance, 30, 30) $okbutton = GUICtrlCreateButton("OK", 30, $h-40, 60) $cancelbutton = GUICtrlCreateButton("Cancel", $w-30-60, $h-40, 60) $datalist = GUICtrlCreateListView("No.|Plunger Depth|Ball Depth| |Shaft Length",30, 50, 540, $h- 100) Dim $balldepth[256] Dim $plungerdepth[256] Dim $shaftlength[256] Dim $line[256] GUISetOnEvent($GUI_EVENT_CLOSE, "CancelClicked") GUICtrlSetOnEvent($cancelbutton, "CancelClicked") GUICtrlSetOnEvent($okbutton, "OKClicked") GUISetState(@SW_SHOW) $anum = 0 $bnum = 0 $dataline = 0 While 1 $instring = StringStripWS(_CommGetLine(@CR,0,300),8) ;Gageport string is number, reading (-.12345), , gage # (01 or 02) $readnum = StringLeft($instring, StringInStr($instring, ",")-1); read number from gage; not using this $instring = StringTrimLeft($instring, StringInStr($instring, ",")) $value = StringLeft($instring, StringInStr($instring, ",")-1) $instring = StringTrimLeft($instring, StringInStr($instring, ",")) $gageno = StringTrimLeft($instring, StringInStr($instring, ",")); second trim due to blank value field ;debug box ;$return = MsgBox(4097, "data received", "Reading: " & $readnum & @CRLF & "Value: " & $value & @CRLF & "Gage: " & $gageno) ;If ($return == 2) Then Exit If ($gageno == "01") Then ;MsgBox(4096, "debug", "got here") $anum = $anum + 1 $plungerdepth[$anum] = $value If ($anum > $bnum) Then $line[$anum] = GUICtrlCreateListViewItem("-|-|-|-|-", $datalist); create a new line $balldepth[$anum] = "-" EndIf $dataline = $anum ElseIf ($gageno == "02") Then $bnum = $bnum + 1 $balldepth[$bnum] = $value If ($bnum > $anum) Then $line[$bnum] = GUICtrlCreateListViewItem("-|-|-|-|-", $datalist); create a new line $plungerdepth[$bnum] = "-" EndIf $dataline = $bnum Else ;MsgBox(4096, "debug", "line " & $dataline & " A: " & $anum & " B: " & $bnum) EndIf If ($plungerdepth[$dataline] <> "-" And $balldepth[$dataline] <> "-") Then $shaftlength[$dataline] = $plungerdepth[$dataline] + $balldepth[$dataline] + $clearance $itemtext = $dataline & "|" & $plungerdepth[$dataline] & "|" & $balldepth[$dataline] & "| |" & $shaftlength[$dataline] ;MsgBox(4096, "debug", "line " & $dataline & " A: " & $anum & " B: " & $bnum & @CRLF & $itemtext) GUICtrlSetData($line[$dataline], $itemtext) _GUICtrlListView_EnsureVisible($datalist, $dataline) WEndThe problem is that _GUICtrlListView_EnsureVisible($datalist, $dataline) only moves the list when the second value is written to the list; the first value written still disappears below the bottom of the list. Edited June 9, 2009 by Dana Link to comment Share on other sites More sharing options...
Zedna Posted June 9, 2009 Share Posted June 9, 2009 (edited) GUICtrlSetData($line[$dataline], $itemtext) $count = _GUICtrlListView_GetItemCount($datalist) _GUICtrlListView_EnsureVisible($datalist, $count) Edited June 9, 2009 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
Dana Posted June 9, 2009 Author Share Posted June 9, 2009 GUICtrlSetData($line[$dataline], $itemtext) $count = _GUICtrlListView_GetItemCount($datalist) _GUICtrlListView_EnsureVisible($datalist, $count)oÝ÷ Ûú®¢×ºÝ7éÊ.Ü"VÞ¶¬jg¯j[jÍ7éÖjX§{^ý§]xì%w§ ÈßÙ¢§]xì%wéÈÂ¥v}ýµ·®²)àÓ~¢éí#e§¶+m¢Ç+¢Y[iÉ.¦Ú0êÞ¶§{Úç¬ÆÞxu×(¶+ZºÚ"µÍWÑÕRPÝÝY]×Ñ[ÝUÚXJ ÌÍÙ][Ý ÌÍÙ][[KLJ solves all the problems. Thanks for the assistance! Link to comment Share on other sites More sharing options...
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