Что нового

[Элементы GUI] Как создать список содержащий контролы

mrPuh

Новичок
Сообщения
19
Репутация
0
Всем привет!
Подскажите, пожалуйста, как создать список, строки которого могут содержать текст, контролы и пр?
Чтобы этот список можно было листать вверх-вниз и можно было добавлять/удалять элементы списка?
Что-то типа этого:
51564738fadf4178abd6fd6f8ca3634f.png

Только в строках не только текст, но и контролы
 

joiner

Модератор
Локальный модератор
Сообщения
3,470
Репутация
609
контролы чьего окна? своего или сторонней программы?
и что имеется ввиду под "прочим"?
 
Автор
M

mrPuh

Новичок
Сообщения
19
Репутация
0
Под контролами я имел ввиду чекбоксы, кнопки и пр. :smile:
Как сделать список, в каждой строке которого содержатся текст, чекбоксы, кнопки и т.д.?
 

Gilman

Новичок
Сообщения
16
Репутация
0
Тоже интересно, интересует, возможно ли реализовать подобное?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Записывайте в список название переменной в текстовом виде без "$" и когда нужно получайте её значение (сам контрол) функцией
Код:
Eval ( string )
 

joiner

Модератор
Локальный модератор
Сообщения
3,470
Репутация
609
что-то около этого. так как все-равно ТС не ответил на вопросы полностью

Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <EditConstants.au3>
Global $aCTRL[4][6], $aDC[1], $aCC[4] = ['GUICtrlCreateInput', 'GUICtrlCreateButton', 'GUICtrlCreateRadio', 'GUICtrlCreateCheckbox']
Global $CCtrl
Global $Form1 = GUICreate("Form1", 543, 228, 620, 253)
$aCTRL[0][0] = GUICtrlCreateInput("Input1", 48, 32, 121, 21)
$aCTRL[1][0] = GUICtrlCreateButton("Button1", 48, 72, 75, 25)
$aCTRL[2][0] = GUICtrlCreateCheckbox("Checkbox1", 56, 120, 97, 17)
$aCTRL[3][0] = GUICtrlCreateRadio("Radio1", 48, 152, 113, 17)
Local $bt = GUICtrlCreateButton("Получить список", 352, 176, 155, 25)
GUISetState(@SW_SHOW)
Local $nMsg, $nc, $cgp

While 1
	If UBound($aDC) > 1 Then
		For $i = 1 To UBound($aDC) - 1
			GUICtrlDelete($aDC[$i])
		Next
		ReDim $aDC[1]
	EndIf
	If $CCtrl Then
		$nc = Execute($CCtrl)
		$CCtrl = 0
		$cgp = ControlGetPos($Form1, '', $nc)
		_ArrayAdd($aCTRL, $nc & '|' & ControlGetText($Form1, '', $nc) & '|' & $cgp[0] & '|' & $cgp[1] & '|' & $cgp[2] & '|' & $cgp[3])
	EndIf
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $bt
			_getparam()
	EndSwitch
WEnd

Func _getparam()
	GUISetState(@SW_DISABLE, $Form1)
	Local $lgc = GUICreate("Form1", 450, 450, -1, -1, -1, -1, $Form1)
	Local $lv = GUICtrlCreateListView('1|2|3|4|5|6', 0, 0, 300, 300)
	Local $ain[5] = [GUICtrlCreateInput('', 5, 310, 100, 25), GUICtrlCreateInput('', 110, 310, 50, 25, $ES_NUMBER), GUICtrlCreateInput('', 160, 310, 50, 25, $ES_NUMBER), _
			GUICtrlCreateInput('', 210, 310, 50, 25, $ES_NUMBER), GUICtrlCreateInput('', 260, 310, 50, 25, $ES_NUMBER)]
	Local $al[4] = [GUICtrlCreateRadio('GUICtrlCreateInput', 310, 10, 140, 20), GUICtrlCreateRadio('GUICtrlCreateButton', 310, 35, 140, 20), _
			GUICtrlCreateRadio('GUICtrlCreateRadio', 310, 60, 140, 20), GUICtrlCreateRadio('GUICtrlCreatecheckbox', 310, 85, 140, 20)]
	Local $dc = GUICtrlCreateButton("Удалить", 100, 350, 75, 25)
	Local $ccr = GUICtrlCreateButton("Создать", 190, 350, 75, 25)
	GUISetState(@SW_SHOW, $lgc)
	Local $cgp
	For $i = 0 To UBound($aCTRL) - 1
		$aCTRL[$i][1] = ControlGetText($Form1, '', Number($aCTRL[$i][0]))
		$cgp = ControlGetPos($Form1, '', Number($aCTRL[$i][0]))
		$aCTRL[$i][2] = $cgp[0]
		$aCTRL[$i][3] = $cgp[1]
		$aCTRL[$i][4] = $cgp[2]
		$aCTRL[$i][5] = $cgp[3]
		GUICtrlCreateListViewItem($aCTRL[$i][0] & '|' & $aCTRL[$i][1] & '|' & $aCTRL[$i][2] & '|' & _
				$aCTRL[$i][3] & '|' & $aCTRL[$i][4] & '|' & $aCTRL[$i][5], $lv)
	Next
	Local $nMsg
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				GUIDelete($lgc)
				GUISetState(@SW_ENABLE, $Form1)
				WinActivate($Form1)
				Return
			Case $dc
				Local $ind = Number(_GUICtrlListView_GetSelectedIndices($lv))
				Local $txt = _GUICtrlListView_GetItemText($lv, $ind)
				ControlHide($Form1, '', Number($txt))
				_ArrayDelete($aCTRL, $ind)
				_ArrayAdd($aDC, $txt)
				_GUICtrlListView_DeleteItemsSelected($lv)
			Case $ccr
				Local $rs
				For $i = 0 To 3
					$rs = GUICtrlRead($al[$i])
					If $rs = 1 Then
						$CCtrl = $aCC[$i] & '('
						ExitLoop
					EndIf
				Next
				For $i = 0 To 4
					$rs = GUICtrlRead($ain[$i])
					If $i = 0 Then
						$CCtrl &= '"' & $rs & '"' & ','
					ElseIf $i >= 1 And $i < 4 Then
						$CCtrl &= $rs & ','
					ElseIf $i = 4 Then
						$CCtrl &= $rs & ')'
					EndIf
				Next
				GUIDelete($lgc)
				GUISetState(@SW_ENABLE, $Form1)
				WinActivate($Form1)
				Return
		EndSwitch
	WEnd
EndFunc   ;==>_getparam
идея, думаю, понятна, все, что создается хранится в списке(массиве), а там - куда фантазия выведет :smile:
 
Автор
M

mrPuh

Новичок
Сообщения
19
Репутация
0
Возможно ли и если - да, то как сделать вот так:
c4921f4ee2024bbb9c07895e1142ef48.png

Чтобы в каждой строке отображались кнопки, чекбоксы и пр.?
 

joiner

Модератор
Локальный модератор
Сообщения
3,470
Репутация
609
может тебе просто нужна прокрутка в окне ?
смотри пример в архиве. при клике мышью, удаляется элемент - это уже я дописал
 

Вложения

  • Прокрутка.zip
    2.5 КБ · Просмотры: 18
Автор
M

mrPuh

Новичок
Сообщения
19
Репутация
0
joiner сказал(а):
может тебе просто нужна прокрутка в окне ?
смотри пример в архиве. при клике мышью, удаляется элемент - это уже я дописал
joiner, это то что нужно!
Огромное спасибо! :beer:
 
Верх