Что нового

GUI - Графический интерфейс - создание ListBox

forfrends

Новичок
Сообщения
176
Репутация
3
Всем привет!
Благодарен всем тем, кто помогает мне осваивать autoit! :D :IL_AutoIt_1:

У меня возник еще один вопрос.
Я пытаюсь в Kode создать меню со скролом, но в качестве просмотра не такст а картинка
Диалоговое окно должно выглядеть примерно так:

4820af4bb08e.png


кнопки и т.д. не так важны, главное прокрутка.
картинка примерно такая:
59806397f0cc.jpg


разрешение 443 x 1085 пикс. Оригинал картинки:
http://s002.radikal.ru/i198/1004/7e/dc8579ff254a.jpg

помогите пожалуйста, а то в Kode у меня даже начать не получается
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
forfrends [?]
Я пытаюсь в Kode создать меню со скролом, но в качестве просмотра не такст а картинка
А почему не построить этот список элементами?
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
просто потому что на рисунке нужно нарисовать стрелочки и указатели на определенные поля

Ладно, если так нельзя, то подскажите как сделать список элементов, а то и это у меня не получается
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
В общем, мне нужно создать диалоговое окно в котором будет находится вышеуказааный рисунок в Box-е со скролом, как показанно на рисунке 1
А в Kode у меня это не получается.
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Подскажите кто-нибудь хоть что-нибудь! :wall_brake:
 

Fever

Скриптер
Сообщения
308
Репутация
112
а почему кодой? :blink:

Код:
GUICreate('', 300, 200)
$list = GUICtrlCreateListView('Переменная|Значение', 10, 10, 280, 180)
GUICtrlCreateListViewItem('1|12',$list)
GUICtrlCreateListViewItem('2|12',$list)
GUICtrlCreateListViewItem('3|12',$list)
GUICtrlCreateListViewItem('4|12',$list)
GUICtrlCreateListViewItem('5|12',$list)
GUICtrlCreateListViewItem('6|12',$list)
GUICtrlCreateListViewItem('7|12',$list)
GUICtrlCreateListViewItem('8|12',$list)
GUICtrlCreateListViewItem('9|12',$list)
GUICtrlCreateListViewItem('10|12',$list)
GUICtrlCreateListViewItem('11|12',$list)
GUICtrlCreateListViewItem('12|12',$list)
GUICtrlCreateListViewItem('13|12',$list)
GUICtrlCreateListViewItem('14|12',$list)
GUICtrlCreateListViewItem('15|12',$list)
GUICtrlCreateListViewItem('16|12',$list)
GUISetState()

While 1
	Switch GUIGetMsg()
	Case -3
		Exit
	EndSwitch
WEnd
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Это ясно.
но как сделать что бы вместо
Код:
GUICtrlCreateListViewItem('1|12',$list)

пролистывалась картинка (длинная очень) представленна выше
 

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
forfrends
посмотри пример на GUICtrlCreateListView, там после 20 пунктов появится полоса прокрутки.
Используются функции из справки UDF и в ней есть _GUICtrlListView_SetItemImage, пример иконок здесь. И используй поиск по форуму

Пример с чекбоксами, но принцип тот же.
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
$hGUI= GUICreate("Тест ListView", 220, 180)
; тире делает колонку шире, стили скрывают заголовок колонки, сохранять выделение при потери фокуса; дополнительные стили - подсветка всей выбранной строки, чекбоксы в списке
$hListView = GUICtrlCreateListView  ('---------------' ,5,5,210,70 , $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT + $LVS_EX_CHECKBOXES)
GUICtrlSetBkColor(-1,0xf0f0f0) ; 0xE0DFE3 - цвет стандартный серый
$item1=_GUICtrlListView_AddItem($hListView,'итем' ) ; создаём пункты
$item2=_GUICtrlListView_AddItem($hListView,'ха' )
$item3=_GUICtrlListView_AddItem($hListView,'новое' )
$item4=_GUICtrlListView_AddItem($hListView,'вот ещё' )
  
_GUICtrlListView_SetItemChecked($hListView,$item1) ; отмечаем галочкой чекбоксы
_GUICtrlListView_SetItemChecked($hListView, $item3)

$start=GUICtrlCreateButton ("жми", 135,95,55,22)
$Pos=GUICtrlCreateButton ("размер", 35,95,55,22)
GUICtrlCreateLabel ('В отличии от обычных чекбоксов в окне, в ListView есть прокрутка в ящике, если строки не вмещаются.', 5,125,210,50)

GUISetState   ()

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $start ; проверяем галочки в чекбоксах
			If _GUICtrlListView_GetItemChecked($hListView,$item1)=1 Then MsgBox(0, "Сообщение",' "итем" отмечен.', 4)
			If _GUICtrlListView_GetItemChecked($hListView,$item2)=1 Then MsgBox(0, "Сообщение",' "ха" отмечен.', 4)
			If _GUICtrlListView_GetItemChecked($hListView,$item3)=1 Then MsgBox(0, "Сообщение",' "новое" отмечен.', 4)
			If _GUICtrlListView_GetItemChecked($hListView,$item4)=1 Then MsgBox(0, "Сообщение",' "вот ещё" отмечен.', 4)
		Case $msg = $Pos ; меняем размер для проверки скрола
			GUICtrlSetPos ($hListView, 5,5,210,80)
		Case $msg = -3
			ExitLoop
	EndSelect
WEnd
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
Прикольно!
Спасибо! Вот только я немогу разобраться как туда большой рисунок вставить( не иконку а .jpg-файл (или .bmb .gif и т.д.)
 

bulldog5293

Знающий
Сообщения
172
Репутация
10
А если в
Код:
$hListView = GUICtrlCreateListView  ('---------------' ,5,5,210,70 ,, $LVS_NOCOLUMNHEADER + $LVS_SHOWSELALWAYS)
ещё больше нада указать, какой стиль тогда нада задовать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AZJIO [?]
тире делает колонку шире
Вообще то для этого есть функция _GUICtrlListView_SetColumnWidth.

forfrends
Копия GUI на основе снимка первого сообщения:

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

$GUI = GUICreate("GEPARD3.2.1", 610, 280, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU))

$nTab = GUICtrlCreateTab(5, 5, 590, 240)

GUICtrlCreateTabItem("Общие")

GUICtrlCreateTabItem("Входные параметры")

; Last option Calls CoInitializeEx
$hListView = _GUICtrlListView_Create($GUI, "", 15, 40, 466, 190, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_NOSORTHEADER), $WS_EX_CLIENTEDGE, True)

_GUICtrlListView_InsertColumn($hListView, 0, "Входные параметры", 225)
_GUICtrlListView_InsertColumn($hListView, 1, "Значения", 220)

For $i = 1 To 77
	_GUICtrlListView_AddItem($hListView, "")
Next

$sURL = "http://s002.radikal.ru/i198/1004/7e/dc8579ff254a.jpg"
$sFile = @TempDir & "\LV_Back.jpg"
InetGet($sURL, $sFile)
_GUICtrlListView_SetBkImage($hListView, $sFile)

GUICtrlCreateTabItem("")


$nLoad_Buttton = GUICtrlCreateButton("&Загрузить", 485, 180, 100, 22)
$nSave_Buttton = GUICtrlCreateButton("&Сохранить", 485, 210, 100, 22)

GUICtrlCreateButton("Ок", 335, 250, 80, 22)
GUICtrlCreateButton("Отмена", 425, 250, 80, 22)
GUICtrlCreateButton("Сброс", 515, 250, 80, 22)

WinSetState($hListView, "", @SW_HIDE)
GUICtrlSetState($nLoad_Buttton, $GUI_HIDE)
GUICtrlSetState($nSave_Buttton, $GUI_HIDE)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $nTab
			GUISetState(@SW_LOCK)
			
			If GUICtrlRead($nTab) = 1 Then
				WinSetState($hListView, "", @SW_SHOW)
				
				GUICtrlSetState($nLoad_Buttton, $GUI_SHOW)
				GUICtrlSetState($nSave_Buttton, $GUI_SHOW)
			Else
				WinSetState($hListView, "", @SW_HIDE)
				
				GUICtrlSetState($nLoad_Buttton, $GUI_HIDE)
				GUICtrlSetState($nSave_Buttton, $GUI_HIDE)
			EndIf
			
			GUISetState(@SW_UNLOCK)
	EndSwitch
WEnd

;=========================================================================================================
DllCall('ole32.dll', 'long', 'CoUinitialize') ; Must call for each CoInitializeEx call made
;=========================================================================================================

Func WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
	Local $TagNMHDR = DllStructCreate("int hWndFrom;int iIDFrom;int iCode;int iItem;int iButton;ptr pitem", $lParam)
	If @error Then Return $GUI_RUNDEFMSG
	
	Local $hWndFrom = DllStructGetData($TagNMHDR, "hWndFrom")
	Local $iEvent = DllStructGetData($TagNMHDR, "iCode")
	
	Switch $hWndFrom
		Case _GUICtrlListView_GetHeader($hListView)
			Switch $iEvent
				Case $HDN_ITEMCHANGING, $HDN_ITEMCHANGINGW
					Return 1 ;Prevent columns resizing
			EndSwitch
		Case $hListView
			Switch $iEvent
				Case $LVN_ITEMCHANGING, $LVN_BEGINDRAG
					Return 1 ;Prevent items selection
			EndSwitch
	EndSwitch
	
	Return $GUI_RUNDEFMSG
EndFunc


:laugh:
 
Автор
F

forfrends

Новичок
Сообщения
176
Репутация
3
а можно по-подробнее объяснить что здесь и как, а то я еще слабоват в Autoit?
Мне непонятна сама процедура создания ListBox описанная здесь
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
forfrends [?]
Мне непонятна сама процедура создания ListBox описанная здесь
Это не ListBox, а ListView, а принцип здесь таков - Создаётся ListView с определённым количеством пустых элементов в нём, ну и далее создаётся фоновое изображение в ListView.

Что конкретно непонятно в примере? если есть отдельные вопросы (не затрагивающие напрямую этот пример), то лучше создайте новую тему для каждого из них.
 
Верх