Что нового

Получение текста из списка

MnM

Post-Hardcore
Сообщения
679
Репутация
90
getigor01
Код:
#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <GuiListBox.au3>
#Region GUIListCreate
$Form1 = GUICreate("Form1", 310, 121, 192, 124)
$List = GUICtrlCreateList("", 0, 0, 121, 97)
GUICtrlSetData(-1, "45|475|77")
$Button_GetText = GUICtrlCreateButton("Button1", 136, 8, 75, 25)
GUISetState(@SW_SHOW)
#endRegion
While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Button_GetText
			__GetList()
	EndSwitch
WEnd
Func __GetList()
	Local $a_ListText[GUICtrlSendMsg($List, $LB_GETCOUNT, 0, 0)]
	For $i=0 To UBound($a_ListText)-1
		$a_ListText[$i]=_GUICtrlListBox_GetText($List,$i)
	Next
	_ArrayDisplay($a_ListText)
EndFunc
 

Jotun

Новичок
Сообщения
31
Репутация
0
Может кто-нибуть подсказать как правильно пользоваться функцией $LB_GETTEXT из ListBoxConstants.au3
У меня она постоянно критует. Вот так мне удалось получить текст, но после этого всё равно крит.

Код:
#include <GUIConstantsEx.au3>
#include <ListBoxConstants.au3>

Opt ( "GUIOnEventMode", 1 )

$Main = GUICreate ("", 600,500, 700, 400 )
$LBox = GUICtrlCreateList ("", 125, 120, 125, 250)
$TestB = GUICtrlCreateButton ("TEST", 320, 200, 70, 40 )

For $i = 1 To 10
	GUICtrlSendMsg ( $LBox, $LB_ADDSTRING, 0, "String " & $i )
Next

GUISetState ( @SW_SHOW, $Main )
GUISetOnEvent ( $GUI_EVENT_CLOSE, "_Exit", $Main )
GUICtrlSetOnEvent ( $TestB, "_Tester")

While 1
	Sleep (1000)
WEnd

Func _Tester ()

	local $x = ""
	$pos = GUICtrlSendMsg ( $LBox,  $LB_GETCURSEL, 0, 0 )
	GUICtrlSendMsg ( $LBox ,  $LB_GETTEXT, $pos, $x  )
	MsgBox ( 0, "", $x )

EndFunc

Func _Exit ()
	Exit
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Jotun,
Текст выделенной строки можно примерно так получить.
Код:
#include <GUIConstantsEx.au3>
#include <ListBoxConstants.au3>

Opt('GUIOnEventMode', 1)

$hMain = GUICreate('Test', 600, 500)
$iLBox = GUICtrlCreateList('', 125, 120, 125, 250)
$iTestB = GUICtrlCreateButton('TEST', 320, 200, 70, 40)

For $i = 1 To 10
	GUICtrlSendMsg($iLBox, $LB_INSERTSTRING, -1, 'String ' & $i)
Next

GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit', $hMain)
GUICtrlSetOnEvent($iTestB, '_Tester')

While Sleep(1000)
WEnd

Func _Tester()
	Local $i_Ind, $t_Txt = DllStructCreate('wchar[4096]'), $p_Txt = DllStructGetPtr($t_Txt)

	$i_Ind = GUICtrlSendMsg($iLBox, $LB_GETCURSEL, 0, 0)
	If $i_Ind < 0 Then
		$i_Ind = Random(0, GUICtrlSendMsg($iLBox, $LB_GETCOUNT, 0, 0) - 1, 1)
		GUICtrlSendMsg($iLBox, $LB_SETCURSEL, $i_Ind, 0)
	EndIf
	GUICtrlSendMsg($iLBox, $LB_GETTEXT, $i_Ind, $p_Txt)
	MsgBox(64, 'Info', 'Index: ' & $i_Ind & @LF & 'Text: ' & DllStructGetData($t_Txt, 1))
EndFunc   ;==>_Tester

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

Jotun

Новичок
Сообщения
31
Репутация
0
madmasles сказал(а):
Jotun,
Текст выделенной строки можно примерно так получить.
Код:
#include <GUIConstantsEx.au3>
#include <ListBoxConstants.au3>

Opt('GUIOnEventMode', 1)

$hMain = GUICreate('Test', 600, 500)
$iLBox = GUICtrlCreateList('', 125, 120, 125, 250)
$iTestB = GUICtrlCreateButton('TEST', 320, 200, 70, 40)

For $i = 1 To 10
	GUICtrlSendMsg($iLBox, $LB_INSERTSTRING, -1, 'String ' & $i)
Next

GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit', $hMain)
GUICtrlSetOnEvent($iTestB, '_Tester')

While Sleep(1000)
WEnd

Func _Tester()
	Local $i_Ind, $t_Txt = DllStructCreate('wchar[4096]'), $p_Txt = DllStructGetPtr($t_Txt)

	$i_Ind = GUICtrlSendMsg($iLBox, $LB_GETCURSEL, 0, 0)
	If $i_Ind < 0 Then
		$i_Ind = Random(0, GUICtrlSendMsg($iLBox, $LB_GETCOUNT, 0, 0) - 1, 1)
		GUICtrlSendMsg($iLBox, $LB_SETCURSEL, $i_Ind, 0)
	EndIf
	GUICtrlSendMsg($iLBox, $LB_GETTEXT, $i_Ind, $p_Txt)
	MsgBox(64, 'Info', 'Index: ' & $i_Ind & @LF & 'Text: ' & DllStructGetData($t_Txt, 1))
EndFunc   ;==>_Tester

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Я наверное изучение DllStructure чуть позже начну вместе с вашим примером, пока решил воспользоваться
Код:
#include <GuiListBox.au3>
_GUICtrlListBox_GetText
 
Верх