Что нового

Почему не работает GUICtrlCreateListViewItem?

V

VitAl2013

Гость
Вот код:
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>

$pos = ControlGetPos ("[REGEXPTITLE:(Active).*Pro/ENGINEER]",  "", "[CLASS:Sash; INSTANCE:13]")
	$Status = GUICreate("Status", 500, 100, 0, 0, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_POPUP,$WS_GROUP,$WS_TABSTOP))
	$S_List = GUICtrlCreateListView("№|Process comment", 0, 0, 500, 500, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
	_GUICtrlListView_SetColumnWidth($S_List, 0, 30)
	_GUICtrlListView_SetColumnWidth($S_List, 1, 500-30)
	
	GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM)
	GUISetState(@SW_SHOW)
	
	$item1 = GUICtrlCreateListViewItem("", $S_List)
	GUICtrlSetData($item1, "1|ITEM1")
	$item2 = GUICtrlCreateListViewItem("", $S_List)
	GUICtrlSetData($item2, "2|ITEM1")


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd


при открытии получаю окно, итемов в нём нет.

ЗЫ 3.3.6.0

Неск мин спустя нашёл что если обрубить так:
Код:
$S_List = GUICtrlCreateListView("№|Process comment", 0, 0, 500, 500);, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))

То начинает работать. Отсюда вопрос что в них не так в этих стилях, и не может ли быть это ошибкой?

Конкретно барахлит вот с этим:
Код:
$ES_WANTRETURN


Как настроить стили чтоб подкручивалось вниз при добавлении новых итемов?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
VitAl2013
у GUICtrlCreateListView нет таких стилей, которые ты хочешь установить. вот тут можешь глянуть его стили
ListView Styles
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Вот так, всё работает:
Код:
$S_List = GUICtrlCreateListView("№|Process comment", 0, 0, 500, 500, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$WS_VSCROLL))
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
VitAl2013 сказал(а):
Код:
BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_VSCROLL))

Ни один из этих стилей не предназначен для списка.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yashied [?]
Ни один из этих стилей не предназначен для списка.
Да, я согласен. Но факт... Если при $ES_WANTRETURN небыли видны Item`ы , то на другие стили реакции нет :scratch:

Почему AutoIt их "кушает"?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Garrett [?]
Почему AutoIt их "кушает"?
Скорее всего потому что этот стиль содержит в себе (BitOR) значение другого стиля, поддерживаемого элементом ListView.
 
Автор
V

VitAl2013

Гость
А как его заставить подкручивать список вниз каждый раз при добавлении нового итема?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Вот так:
Код:
$S_List = GUICtrlCreateListView("№|Process comment", 0, 0, 500,100)
 
Автор
V

VitAl2013

Гость
Не подкручивает, пробовал - постоянно вверху висит - № 1 постоянно перед глазами, надо ему както явно указать.
Неужели придётся использовать:
Код:
ControlSend ($Status, "", $S_List, "{end}")

каждый раз после:
Код:
$item2 = GUICtrlCreateListViewItem("", $S_List)

?

Кусочек кода чтоб не писать самим, для проверки:
Код:
$item1 = GUICtrlCreateListViewItem("1|ITEM1", $S_List)
	$item2 = GUICtrlCreateListViewItem("2|ITEM1", $S_List)
	$item3 = GUICtrlCreateListViewItem("3|ITEM1", $S_List)
	$item4 = GUICtrlCreateListViewItem("4|ITEM1", $S_List)
	$item5 = GUICtrlCreateListViewItem("5|ITEM1", $S_List)
	$item6 = GUICtrlCreateListViewItem("6|ITEM1", $S_List)
	$item7 = GUICtrlCreateListViewItem("7|ITEM1", $S_List)
	$item8 = GUICtrlCreateListViewItem("8|ITEM1", $S_List)
	$item9 = GUICtrlCreateListViewItem("9|ITEM1", $S_List)
	$item10 = GUICtrlCreateListViewItem("10|ITEM1", $S_List)


Может подскажите? Я подобным макаром пытаюсь сделать отдельноплавающий стстус бар, гдеб отображался ход работ и по мере прохождения открыживался. Встретил вот такую штуку $LVS_EX_CHECKBOXES, но никаких чекбоксов в листе я не вижу.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
А может добавлять новый Item в начало списка?
Вы по умолчанию добавляете все десять Item`ов в скрипт, или в процессе работы скрипка Item`ы добавляются?

CreatoR сказал(а):
Garrett [?]
Почему AutoIt их "кушает"?
Скорее всего потому что этот стиль содержит в себе (BitOR) значение другого стиля, поддерживаемого элементом ListView.
Да, скорее всего :(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Я бы использовал такую функцию:

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

$Status = GUICreate("Status", 500, 100, 0, 0, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_POPUP, $WS_GROUP, $WS_TABSTOP))

$n_List = GUICtrlCreateListView("№|Process comment", 0, 0, 500, 100)
_GUICtrlListView_SetColumnWidth($n_List, 0, 30)
_GUICtrlListView_SetColumnWidth($n_List, 1, 500 - 30)

GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)

For $i = 1 To 10
	$iItem = _GUICtrlCreateListViewItemEx("", $n_List, 1)
	GUICtrlSetData($iItem, $i & "|ITEM1")
	
	Assign("item" & $i, $iItem)
Next

GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _GUICtrlCreateListViewItemEx($sText, $nLV_ID, $iShowItem=1)
	Local $nLV_ItemID = GUICtrlCreateListViewItem($sText, $nLV_ID)
	
	If $iShowItem Then
		_GUICtrlListView_EnsureVisible($nLV_ID, _GUICtrlListView_GetItemCount($nLV_ID)-1)
	EndIf
	
	Return $nLV_ItemID
EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
CreatoR
Прекрасное решение _GUICtrlListView_EnsureVisible!

P.S. Отсюда вывод! Нужно почаще листать UDF Help. ;D
Кстати, сначала в поиске решения задачи с EnsureVisible я столкнулся здесь, а уже потом стал искать её в UDF Help.
Ох уж это неординарное мышление. ;D
 
Автор
V

VitAl2013

Гость
Да действительно нестандартно, разбираюсь...
VitAl2013 [?]
Может подскажите? Я подобным макаром пытаюсь сделать отдельноплавающий стстус бар, гдеб отображался ход работ и по мере прохождения открыживался. Крыженье идёт не попорядку так как некоторые функции вложены в другие функции. Встретил вот такую штуку $LVS_EX_CHECKBOXES, но никаких чекбоксов в листе я не вижу.
Пока буду крыжить иконками через:
Код:
GUICtrlSetImage (номер итема, стандартный.dll, номер иконки)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
VitAl2013 [?]
Встретил вот такую штуку $LVS_EX_CHECKBOXES, но никаких чекбоксов в листе я не вижу.
Этот стиль нужно добавлять в 6-той параметр:

Код:
$n_List = GUICtrlCreateListView("№|Process comment", 0, 0, 500, 100, -1, $LVS_EX_CHECKBOXES)


P.S
Кстати о статус (точнее прогресс) баре: ListView_Progress
 
Верх