Nova Posted April 7, 2005 Share Posted April 7, 2005 (edited) Hi again, Rite ive never used the GUICtrlCreateListView functions before and im having a small bit of trouble ! The below code creates a gui with a listview which has one item ! I cant figure out how to select an item from the listview ! I would like a msg box to appear when an item from the list is double clicked ! Or a context menu to apear when an item is right clicked ! Ive been messing with ideas but cant get any to work ! #include <GUIConstants.au3> GUICreate("Nova Server",800,400, 100,200) $listview = GUICtrlCreateListView ("Computer Name |Os Version |Network Address |Ip Address ",10,10,780,380, -1 , 0x1 + 0x20) GUISetState() $item = GUICtrlCreateListViewItem ( "Comp 1", $listview ) While 1 sleep (10) WEnd Little help ? Edit : Added below code an example of my attemp to add a context menu to an item in a list ! #include <GUIConstants.au3> GUICreate("My GUI Context Menu",300,200) $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING) $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview) $context = GUICtrlCreateContextMenu($item1) $item = GUICtrlCreateMenuitem("About button",$context) GUISetState () ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ExitLoop Wend Edit : Also added below an example of my attemp to add a GuiOnEventMode idea #include <GUIConstants.au3> Opt("GuiOnEventMode", 1) GUICreate("My GUI Context Menu",300,200) $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150,$LVS_SINGLESEL) $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview) GUISetState () GUICtrlSetOnEvent($item1, "Item1") ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then ExitLoop Wend Func Item1 () MsgBox(0, "Test", "Hello") EndFunc Edited April 7, 2005 by Nova Link to comment Share on other sites More sharing options...
Nova Posted April 7, 2005 Author Share Posted April 7, 2005 (edited) Edit : Double post sry !!! Edited April 7, 2005 by Nova Link to comment Share on other sites More sharing options...
Nova Posted April 7, 2005 Author Share Posted April 7, 2005 Any ideas at all ? Link to comment Share on other sites More sharing options...
GaryFrost Posted April 7, 2005 Share Posted April 7, 2005 I realize this seems a little lengthy but I'm using the latest release version, believe it might be easier in the next version but here's an example #include <GUIConstants.au3> GUICreate("My GUI Context Menu",300,200) $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING) $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview) $context = GUICtrlCreateContextMenu($item1) $item = GUICtrlCreateMenuitem("About button",$context) GUISetState () ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() select Case $msg = $GUI_EVENT_SECONDARYDOWN If (ControlListView("My GUI Context Menu", "", $listview , "GetSelectedCount")) Then $COUNT = ControlListView("My GUI Context Menu", "", $listview, "GetSubItemCount") For $X = 0 To $COUNT - 1 MsgBox(0,"",ControlListView("My GUI Context Menu", "", $listview, "GetText", ControlListView("My GUI Context Menu", "", $listview, "GetSelected"), $X)) Next EndIf EndSelect If $msg = $GUI_EVENT_CLOSE Then ExitLoop Wend SciTE for AutoItDirections for Submitting Standard UDFs  Don't argue with an idiot; people watching may not be able to tell the difference.  Link to comment Share on other sites More sharing options...
GaryFrost Posted April 8, 2005 Share Posted April 8, 2005 (edited) here's a second example: expandcollapse popup#include <GUIConstants.au3> GUICreate("My GUI Context Menu",300,200) $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING) $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview) $context = GUICtrlCreateContextMenu($item1) $item = GUICtrlCreateMenuitem("About button",$context) GUISetState () ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() select Case $msg = $GUI_EVENT_SECONDARYDOWN If (ControlListView("My GUI Context Menu", "", $listview , "GetSelectedCount")) Then $COUNT = ControlListView("My GUI Context Menu", "", $listview, "GetSubItemCount") For $X = 0 To $COUNT - 1 MsgBox(0,"",_GUICtrlLVGetItemText($listview, "My GUI Context Menu", "", -1, $X)) Next MsgBox(0,"",_GUICtrlLVGetItemText($listview, "My GUI Context Menu")) EndIf EndSelect If $msg = $GUI_EVENT_CLOSE Then ExitLoop Wend ;=============================================================================== ; Function: _GUICtrlLVGetItemText ; Author: Gary Frost ; ; Description: Get the text if the item (all or 1 subitem) ; Parameters: $lv - The ListView Control to get the text from ; $WindowTitle - The Title to the window the control resides on ; [$WindowText] - The Text from the window the control resides on ; [$ITEM] - The row (item) to get from ; [$SubItem] - The SubItem to get the text from ; Requirements: None ; Return Values: Text from item or error ; ; Note: None ;=============================================================================== Func _GUICtrlLVGetItemText($LV, $WINDOWTITLE, $WINDOWTEXT = "", $ITEM = -1, $SUBITEM = -1) Local $X, $COUNT, $STR $COUNT = ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetSubItemCount") if (ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetSelectedCount")) Then If ($SUBITEM == -1) Then; return all the subitems in the item selected For $X = 0 To $COUNT - 1 Step 1 If ($STR) Then If ($ITEM == -1) Then $STR = $STR & "|" & ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetText", _ ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetSelected"), $X) Else $STR = $STR & "|" & ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetText", $ITEM, $X) EndIf Else If ($ITEM == -1) Then $STR = ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetText", _ ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetSelected"), $X) Else $STR = ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetText", $ITEM, $X) EndIf EndIf Next Return $STR ElseIf ($SUBITEM < $COUNT) Then; return the subitem in the item selected If ($ITEM == -1) Then Return ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetText", _ ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetSelected"), $SUBITEM) Else Return ControlListView($WINDOWTITLE, $WINDOWTEXT, $LV, "GetText", $ITEM, $SUBITEM) EndIf Else ; set an error, subitem is out of range SetError(-1) Return @error EndIf Else ; set an error, no item selected SetError(-2) Return @error EndIf EndFunc ;==>_GUICtrlLVGetItemText Edit: the above function currently only works for single selection haven't taken the time to add multiple row selections to it yet. Example of creating the context menu on the fly: Dim $listcontext,$subitems[1] ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() select Case $msg = $GUI_EVENT_PRIMARYDOWN If (ControlListView("My GUI Context Menu", "", $listview , "GetSelectedCount")) Then $vars = StringSplit(_GUICtrlLVGetItemText($listview, "My GUI Context Menu"),"|") ReDim $subitems[$vars[0]] If($listcontext) Then GUICtrlDelete($listcontext) $listcontext = GUICtrlCreateContextMenu($listview) For $X = 1 To $vars[0] $subitems[$X - 1] = GUICtrlCreateMenuitem($vars[$X],$listcontext) If($X < $vars[0]) Then GUICtrlCreateMenuitem("",$listcontext) Next EndIf EndSelect If $msg = $GUI_EVENT_CLOSE Then ExitLoop Wend Edited April 8, 2005 by gafrost SciTE for AutoItDirections for Submitting Standard UDFs  Don't argue with an idiot; people watching may not be able to tell the difference.  Link to comment Share on other sites More sharing options...
Nova Posted April 8, 2005 Author Share Posted April 8, 2005 (edited) Tnx for the reply gafrost.The following is close to one idea im trying to impliment !Altho I only want the msgbox to appear when the item is doubled clicked in quick sucession ! #include <GUIConstants.au3> GUICreate("My GUI Context Menu",300,200) $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING) $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview) $context = GUICtrlCreateContextMenu($item1) $item = GUICtrlCreateMenuitem("About button",$context) GUISetState () ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() select Case $msg = ($GUI_EVENT_PRIMARYDOWN) If (ControlListView("My GUI Context Menu", "", $listview , "GetSelectedCount")) Then MsgBox(0,"Test","Hello") EndIf EndSelect If $msg = $GUI_EVENT_CLOSE Then ExitLoop WendAs for your contex menu code ! Your code creates a contextmenu for the whole list ! I want individual context menus for each item !The following code is an example of what Im trying to do !I think the problem is maby you cant create a contextmenu for a list item #include <GUIConstants.au3> GUICreate("My GUI Context Menu",300,200) $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING) $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview) $context = GUICtrlCreateContextMenu($item1) $item = GUICtrlCreateMenuitem("About button",$context) GUISetState () ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() select Case $msg = ($GUI_EVENT_PRIMARYDOWN) If (ControlListView("My GUI Context Menu", "", $listview , "GetSelectedCount")) Then $listcontext = GUICtrlCreateContextMenu($item1) GUICtrlCreateMenuitem("About",$listcontext) EndIf EndSelect If $msg = $GUI_EVENT_CLOSE Then ExitLoop WendAnyidea ? Edited April 8, 2005 by Nova Link to comment Share on other sites More sharing options...
GaryFrost Posted April 8, 2005 Share Posted April 8, 2005 here's an example of a double click expandcollapse popup#include <GUIConstants.au3> GUICreate("My GUI Context Menu",300,200) $listview = GUICtrlCreateListView ("col1 |col2|col3 ",10,10,200,150);,$LVS_SORTDESCENDING) $item1=GUICtrlCreateListViewItem("item2|col22|col23",$listview) $context = GUICtrlCreateContextMenu($item1) $item = GUICtrlCreateMenuitem("About button",$context) GUISetState () Dim $DIFF, $START,$DOUBLECLICKED,$MOUSESPEED ; Run the GUI until the dialog is closed While 1 $msg = GUIGetMsg() select Case $msg = ($GUI_EVENT_PRIMARYDOWN) Local $FOCUS = ControlGetFocus("My GUI Context Menu") If ($FOCUS == "SysListView321") Then $DIFF = TimerDiff($START) If ($MOUSESPEED = "") Then $MOUSESPEED = 500 EndIf If ($DIFF < $MOUSESPEED And $DOUBLECLICKED == 0) Then $ITEMCLICKED = GUICtrlRead($listview) If ($ITEMCLICKED > 0) Then MsgBox(0,"Test","Hello") EndIf $DOUBLECLICKED = 1 Else $DOUBLECLICKED = 0 EndIf $START = TimerInit() EndIf EndSelect If $msg = $GUI_EVENT_CLOSE Then ExitLoop Wend SciTE for AutoItDirections for Submitting Standard UDFs  Don't argue with an idiot; people watching may not be able to tell the difference.  Link to comment Share on other sites More sharing options...
Nova Posted April 8, 2005 Author Share Posted April 8, 2005 @gafrost : Tnx a million for your help so far man. The above code for the double click works perfectly ! but the context menu dosent work for me at all ! Is it working for u ? Link to comment Share on other sites More sharing options...
randallc Posted April 17, 2005 Share Posted April 17, 2005 this does not allow finding a single click as well, does it? - Only ensures a double click? Can I do the former? Thanks, Randall ExcelCOM... AccessCom.. Word2... FileListToArrayNew...SearchMiner... Regexps...SQL...Explorer...Array2D.. _GUIListView...array problem...APITailRW 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