Что нового

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

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 471
Репутация
2 401
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
 
Верх