Что нового

[Элементы GUI] Как снять выделение с ListView

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
http://autoit-script.ru/index.php/topic,5717.45.html
Вот в программе синхронизации по ссылке, если выделить созданный пункт в ListView и потом кликнуть в другом месте, то выделение снимается полностью.
А вот если запустить код отсюда
http://autoit-script.ru/index.php/topic,1598.0.html
то при выделении пункта и клике в другом месте вокруг пункта остаётся рамка пунктиром.
Почему так происходит?

И можно ли в ListView сделать выравнивание текста по центру?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
1. Элементы в ListView могут иметь фокус (пунктирная рамка), быть выделены (курсор) или и то, и другое одновременно. Управляется это с помощью функций _GUICtrlListView_SetItemFocused(), _GUICtrlListView_SetItemSelected() или _GUICtrlListView_SetItemState() соответственно.

2. Можно. См. _GUICtrlListView_JustifyColumn().
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
Большое спасибо.
Стыдно, конечно :smile:
Надо было сразу самому залезть в UDF. В следующий раз постараюсь сначала так и делать. В ней нашёл ответы и на другие свои вопросы.
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
Не... всё таки не всё понятно с этим выделением...
весь код от проги SynFolders перекопал... и всё равно не понимаю... если запустить скрипт, то выделение работает, как и в моей... т.е. при клике по незаполненной строке ListView остаётся выделение пунктиром... если скомпилить экзешник, то это выделение начинает пропадать... а в моём ListView выделение остаётся и при запуске скрипта и при запуске экзешника...
может, где то неявно всё таки убирается оно? т.е. где то запускается что то вроде обновление ListView? подскажите, пожалуйста...

Смотрю другие исходники на форуме, тоже эта рамка не пропадает...
Как же сделано в SynFolders, что её не становится?
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
Я добился того, чего хотел... но с немалым трудом... и не могу понять всё таки, почему в SynFolders это получается автоматом...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
я уже спрашивал http://autoit-script.ru/index.php/topic,7726.0.html
больной для меня вопрос :smile:
и объяснял, что сделал всё... если клик не по элементу ListView, то циклом снимается везде выделение...
Код:
_GUICtrlListView_SetItemState($hListView, $j, 0, 1)

это команда внутри цикла...
сейчас продолжил работу... в другом месте пришлось ставить выделение... воспользовался
Код:
_GUICtrlListView_SetItemSelected($hListView, $i_Index, True, False)

выделяло замечательно... а вот снять выделение таким вот
Код:
_GUICtrlListView_SetItemSelected($hListView, $i_Index, False, False)

не выходило... т.е. активность пропадает, остаётся выделение точечками, т.е. фокус...
Код:
_GUICtrlListView_SetItemSelected($hListView, $i_Index, False, -1)

а вот так пропадают и точечки... я неправильно понял описание в GUIListView.udf, видимо... поясните, почему так выходит, пожалуйста... спасибо...
пишу здесь,потому что использование ListView во многом смотрел в исходниках ко второй версии SynFolders...

BaRsupillamy [?]
пишу здесь,потому что использование ListView во многом смотрел в исходниках ко второй версии SynFolders
Это не правильный подход!
Правильнее будет продолжить здесь.

Перенёс ваш вопрос из "SynFolders 3.0 - Программа для синхронизации папок" сюда.
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
похоже, проблема в компе и системе :smile:
дома работает вот это:
Код:
_GUICtrlListView_SetItemSelected($hListView, $i_Index, False, False)

а на работе вот это:
Код:
_GUICtrlListView_SetItemSelected($hListView, $i_Index, False, -1)

даже не знаю, как разобраться со всем этим... но так как будет использоваться на работе, буду подстраиваться под рабочий комп...
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
BaRsupillamy
Используй аналогичные функции с приставкой Get. Если вернут положительное, то используй функции с приставкой Set. Иначе не понятно как ты снимаешь выделение и фокус, если не знаешь индекса. В описании к функциям нет такого -1 в четвёртом параметре. Есть только -1 во втором.
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
Спасибо за ответ... проверил, докладываю...
Код:
ConsoleWrite("State of string №" & $i_Index & " is " & _GUICtrlListView_GetItemSelected($hListView, $i_Index) & @CRLF)
	_GUICtrlListView_SetItemSelected($hListView, $i_Index, -1) ; снимаем выделение с проверяемого компа
ConsoleWrite("State of string №" & $i_Index & " is " & _GUICtrlListView_GetItemSelected($hListView, $i_Index) & @CRLF)

делаем так и получаем... выделение ставится при клике, а после так:
State of string №22 is True
State of string №22 is False
т.е. состояние Selected снимается...
если я в конце убираю "-1" или "False", то выделение снимается, а фокус (выделение точками) остаётся...
вообще складывается впечатление, что от запуска к запуску меняется... т.е. ставлю вот эти "-1" или "False", а потом запускаю несколько раз, а эти точки то появляются, то исчезают...
потому и писал в SynFolders... там этих точек не возникает...

ну вот... убрал все свои снятия выделений, а они больше не появляются... не знаю... пока всё хорошо... может, где то чего то наменял в процессе... буду пока так, если ещё появятся, опять напишу...

ну вот... не затрагиваю вроде бы вообще эту область... опять точки эти появились... и не пропадают при клике в другом месте...
 
Автор
B

BaRsupillamy

Новичок
Сообщения
58
Репутация
0
вообще ни строки не тронул только что, просто перезапустил код - пропали... т.е. зависит не понятно от чего...
 
Верх