Что нового

[Окна, Диалоги] Визуальный выбор варианта из предложенного списка неопр. длинны

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Всем Ку!
Помогите с таким вопросом. Как лучше организовать визуальный выбор варианта из списка неопр. длинны(<10).
Ну типа появляется запрос и можно выбрать 1 выриант из предложенных.
Через что это проще сделать, еще хочется чтобы это было в минамал стиле, без лишных окон. Может как через выпадающее меню?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Ниче не понял. это комбобокс что ли?
Ну попробуй так
Код:
$hGUI = GUICreate('Test', 200, 200)
$hLabel = GUICtrlCreateLabel('Choose me', 10, 50)
$hCombo = GUICtrlCreateCombo('', 50, 50, 100, 100)
GUICtrlSetData($hCombo, 'Element 1|Element 2|Element 3')
GUISetState()
While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case -3
			ExitLoop
		Case $hCombo
			MsgBox(64, 'Combo select', 'You have selected this combo element: ' & GUICtrlRead($hCombo))
	EndSwitch
WEnd
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Примерно это.
А можно ли личерез List это сделать чтобы сразу все варианты были видны и при клике на нужный соотв. выбирался?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
r35p3ct
дружище, если хочешь ListBox делай ListBox, хочешь что-то другое, делай другое. я что не вижу никакой проблемы. в чем у тебя затык?
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Да просто думал, может у кого есть готовое решение в виде функции.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
OffTopic:
r35p3ct
:shok:
удивил так удивил ;D
 
Автор
R

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Если кому интересно будет....
Код:
#include "WinAPI.au3"



$par='a1&b2&c3&d4&e5&f6&g7'
ConsoleWrite( PopUp($par)& @LF)

func PopUp($string)
$WS_POPUP = 0x80000000
$WS_BORDER = 0x00800000
$WS_CLIPSIBLINGS = 0x04000000
$WS_EX_TOPMOST = 0x00000008
$WS_EX_WINDOWEDGE = 0x00000100
$LB_GETCARETINDEX = 0x019F
$LB_GETTEXTLEN = 0x018A
$LB_GETTEXT = 0x0189
$WS_VSCROLL = 0x00200000

$Form1 = GUICreate("SelEntri", 158, 110, 500, 500, BitOR($WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS), BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
$List1 = GUICtrlCreateList("", 0, 0, 158, 120,BitOR($WS_VSCROLL,$WS_BORDER))
$line=StringRegExpReplace($string,'&','|')
GUICtrlSetData($List1, $line)
GUISetState(@SW_SHOW)
GUICtrlSetData($List1, "Выход")

$mousepos=MouseGetPos()
WinMove('SelEntri','',$mousepos[0], $mousepos[1])
$Lhwnd=GUICtrlGetHandle($List1)
While 1
	$nMsg = GUIGetMsg()
	if  $nMsg= $List1 then
			$iIndex=_GUICtrlListBox_GetCaretIndex($Lhwnd)
			local $data=_GUICtrlListBox_GetText($Lhwnd, $iIndex)
;~ 			ConsoleWrite('>>' & $data& @LF)
			If $data='Выход' then Return 0
			Return $data
	EndIf
WEnd
EndFunc
Func _GUICtrlListBox_GetCaretIndex($hWnd)
;~ 	If $Debug_LB Then __UDF_ValidateClassName($hWnd, $__LISTBOXCONSTANT_ClassNames)
	If IsHWnd($hWnd) Then
		Return _SendMessage($hWnd, 0x019F)
	Else
		Return GUICtrlSendMsg($hWnd, 0x019F, 0, 0)
	EndIf
EndFunc   ;==>_GUICtrlListBox_GetCaretIndex
Func _GUICtrlListBox_GetText($hWnd, $iIndex)
;~ 	If $Debug_LB Then __UDF_ValidateClassName($hWnd, $__LISTBOXCONSTANT_ClassNames)

	Local $tText = DllStructCreate("wchar Text[" & _GUICtrlListBox_GetTextLen($hWnd, $iIndex) + 1 & "]")
	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
	_SendMessage($hWnd, 0x0189, $iIndex, DllStructGetPtr($tText), 0, "wparam", "ptr")
	Return DllStructGetData($tText, "Text")
EndFunc   ;==>_GUICtrlListBox_GetText
Func _GUICtrlListBox_GetTextLen($hWnd, $iIndex)
;~ 	If $Debug_LB Then __UDF_ValidateClassName($hWnd, $__LISTBOXCONSTANT_ClassNames)
	If IsHWnd($hWnd) Then
		Return _SendMessage($hWnd, 0x018A, $iIndex)
	Else
		Return GUICtrlSendMsg($hWnd, 0x018A, $iIndex, 0)
	EndIf
EndFunc   ;==>_GUICtrlListBox_GetTextLen
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,665
Репутация
2,463
r35p3ct [?]
Если кому интересно будет
Зачем так сложно? :scratch:

Вот тот же пример но более прост и понятен:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

$par = 'a1&b2&c3&d4&e5&f6&g7'
ConsoleWrite(PopUp($par) & @LF)

Func PopUp($sString)
	Local $aMousePos, $Form1, $List1, $sData
	
	$aMousePos = MouseGetPos()
	$Form1 = GUICreate("SelEntri", 158, 110, $aMousePos[0], $aMousePos[1], BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
	$List1 = GUICtrlCreateList("", 0, 0, 158, 120, BitOR($WS_VSCROLL, $WS_BORDER))
	GUICtrlSetData($List1, StringRegExpReplace($sString & "|Выход", '&', '|'))
	
	GUISetState(@SW_SHOW)
	
	While 1
		$nMsg = GUIGetMsg()
		
		Switch $nMsg
			Case $List1
				$sData = GUICtrlRead($List1)
				
				If $sData = 'Выход' Then
					GUIDelete($Form1)
					Return 0
				EndIf
				
				ContinueCase
			Case $GUI_EVENT_CLOSE
				GUIDelete($Form1)
				Return $sData
		EndSwitch
	WEnd
EndFunc
 
Верх