Polyphem Posted December 19, 2006 Share Posted December 19, 2006 HiHo, I'm currently integrating GUICtrlCreateList in my largest project. But it does not behave exactly as i want it to. Two things would make me happy: 1) I deactivated sorting. Is it possible to add new values to the top of the list instead of the bottom? 2) How do I read the all items of the List to a string or an array? GUICtrlRead returns only the value selected. Thanks and best regards Polyphem This post will be edited again by Polyphem: Tomorrow, 11:55 AM Link to comment Share on other sites More sharing options...
Polyphem Posted December 20, 2006 Author Share Posted December 20, 2006 (edited) Solved. Maybe this is useful for someone else. Needs Beta for ShellExecute. Btw: Is it possible to suppress the ShellExecute error messages, when the file could not be found ("Windows cannot find...")? Edit: Updated to execute items only on doubleclick expandcollapse popup;=============================================================================== ; Description: Example Script for custom GUICtrlCreateList behavior ; - List items are execute on Doubleclick ; - List items clicked, which are not executable, are deleted automatically ; - New items will be added at the top of the list ; - List width is automatically adjusted corresponding to item length ; (used MonoSpace font 'Courier' for letter to pixel conversion) ; - Read all list items to string, items delimited by '|' ; Author(s): Polyphem ; Version: V1.1, 2006/12/20 ;=============================================================================== #include <GUIConstants.au3> #Include <GuiList.au3> Global $listctrl_content = "", $listctrl_max_width = 0 Global $font_to_pixel_ratio = 8.4 ; Seems to fit for the used MonoSpace font 'Courier' Global Const $WM_COMMAND = 0x0111 ; needed for Doubleclick Opt('RunErrorsFatal',0) ; otherwise not found entries in the list would terminate the script ;================ ; GUI ;================ GUICreate('Custom GUICtrlCreateList', 400, 200) $listctrl = GUICtrlCreateList("", 10, 10, 390, 120, BitOR($WS_BORDER, $WS_VSCROLL, $LBS_NOTIFY, $LBS_DISABLENOSCROLL, $WS_HSCROLL)) GUICtrlSetFont(-1, 8, 400, 4, "Courier"); MonoSpace Font => need for the correct width adjustment GUICtrlSetColor(-1, 0x0000ff) GUICtrlSetData($listctrl,'http://de.wikipedia.org/wiki/Schriftart|msconfig|notepad|Testitem - will be deleted on click|Testitem - to test the automatic width adjustment - Looooooooooooooooooooooooooooooooooooooooooooooooogggggggggggggggg') listctrl_set_width($listctrl) $add_item_to_list_button = GUICtrlCreateButton(" Add Item to Top of List ", 240, 130,150) $add_item_to_list_input = GUICtrlCreateInput("",10,130,200) $display_list_items_as_string = GUICtrlCreateButton(" Show all items in list ", 240, 170,150) GUISetState() GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND") ; needed for Doubleclick ;================ ; Main Loop Start ;================ While 1 $msg = GUIGetMsg() Select Case $msg = $add_item_to_list_button listCtrl_add_item($listctrl,$add_item_to_list_input) case $msg = $display_list_items_as_string MsgBox(0,"Display all list items",display_list_items($listctrl)) Case $msg = $GUI_EVENT_CLOSE Exit EndSelect WEnd ;================ ; Main Loop End ;================ ;================ ; Functions ;================ Func listCtrl_add_item($a_listctrl,$a_add_item_to_list_input) for $i = 0 to _GUICtrlListCount($a_listctrl)-1 if $i = 0 Then $listctrl_content = _GUICtrlListGetText($a_listctrl,$i) Else $listctrl_content = $listctrl_content & '|' & _GUICtrlListGetText($a_listctrl,$i) EndIf Next GUICtrlSetData($a_listctrl,"") GUICtrlSetData($a_listctrl,GUICtrlRead($a_add_item_to_list_input) & '|' & $listctrl_content) listctrl_set_width($a_listctrl) $listctrl_content = "" $listctrl_max_width = 0 EndFunc Func listctrl_shellexecute_selected_item($a_listctrl) $read = GUICtrlRead($a_listctrl) ShellExecute($read) If @error Then _GUICtrlListDeleteItem($a_listctrl, _GUICtrlListSelectedIndex($a_listctrl)) ; delete item from list if not executable listctrl_set_width($a_listctrl) EndIf EndFunc Func listctrl_set_width($a_listctrl) for $i = 0 to _GUICtrlListCount($a_listctrl)-1 if $listctrl_max_width < StringLen(_GUICtrlListGetText($a_listctrl,$i)) Then $listctrl_max_width = StringLen(_GUICtrlListGetText($a_listctrl,$i)) EndIf Next GUICtrlSetLimit($a_listctrl,$listctrl_max_width * $font_to_pixel_ratio) $listctrl_max_width = 0 EndFunc Func display_list_items($a_listctrl) for $i = 0 to _GUICtrlListCount($a_listctrl)-1 if $i = 0 Then $listctrl_content = _GUICtrlListGetText($a_listctrl,$i) Else $listctrl_content = $listctrl_content & '|' & _GUICtrlListGetText($a_listctrl,$i) EndIf Next Return $listctrl_content EndFunc ;================ ; Functions for Doubleclick ;================ Func List_DoubleClick($a_listctrl) listctrl_shellexecute_selected_item($a_listctrl) EndFunc Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam) Local $nNotifyCode = _HiWord($wParam) Local $nID = _LoWord($wParam) Local $hCtrl = $lParam Local Const $LBN_DBLCLK = 2; Switch $nID Case $listctrl Switch $nNotifyCode Case $LBN_DBLCLK List_DoubleClick($listctrl) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc Func _HiWord($x) Return BitShift($x, 16) EndFunc ;==>_HiWord Func _LoWord($x) Return BitAND($x, 0xFFFF) EndFunc ;==>_LoWord Edited December 20, 2006 by Polyphem This post will be edited again by Polyphem: Tomorrow, 11:55 AM Link to comment Share on other sites More sharing options...
PaulIA Posted December 21, 2006 Share Posted December 21, 2006 Just for some additional reference, you might want to take a look at A3LListbox.au3 in Auto3Lib. There is a function that I use to adjust the width of the list box and you can use regular fonts. There is also an InsertString function that allows you to insert a string anywhere in the list box that you want. Auto3Lib: A library of over 1200 functions for AutoIt Link to comment Share on other sites More sharing options...
Polyphem Posted December 21, 2006 Author Share Posted December 21, 2006 Nice, thanks, will have a look. Width seems easy, and setting an item on top also by first querying the amount of items and then set a new one +1. This post will be edited again by Polyphem: Tomorrow, 11:55 AM 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