Автор Тема: [Элементы GUI] Выделение элементов ListView  (Прочитано 4969 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Lubitel Softa [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 1
  • Пол: Мужской
    • http://www.japonwarez.com
    • Награды
Всем доброго дня. Пишу маленький скриптик для установки обновлений Windows 7 и застрял на таком моменте: как в ListView выделить строку с нужным мне значением? В моём конкретном случае, в списке должна выделяться строка с именем обновления, которое устанавливается в текущий момент. Помогите, пожалуйста, разобраться.

Нажмите для отображения изображения в оригинальном размере.

Код: AutoIt [Выделить]
#NoTrayIcon
#RequireAdmin


If WinExists (@ScriptName) Then Exit
AutoItWinSetTitle (@ScriptName)


#include <File.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <GuiListView.au3>


AutoItSetOption ("MustDeclareVars", 1)

Global $tValue = DllStructCreate ("dword")
Global $search_upd, $sFPath, $aFiles, $iFiles, $msg, $iPrecent, $counter, $updates, $Form1, $Reboot, $Install, $Cancell, $Exit, _
$Silent_Checkbox, $ListView, $ProgressBar, $Label_Copyright, $nMsg, $FileSize, $FileSizeText, $ImenaObnov, $iPrecent
Global $msu = "msu"
Global $cab = "cab"


;Если установщик запущен не под 7, то выдаётся уведомление и работа завершается
If @OSVersion <> "WIN_7" Then
    MsgBox (48, "Установщик © StaforceBonus - Windows 7", "Программа рассчитана на работу только в среде Windows 7")
    Exit
EndIf


;В зависимости от разрядности ОС выбирается папка с обновлениями и все обновы считываются в массив
Select
    Case @OSArch = "X86"
        FileChangeDir (@ScriptDir & "\x86")
        $sFPath = (@ScriptDir & "\x86")
        $search_upd = FileFindFirstFile ("*.*")

    Case @OSArch = "X64"
        DllCall ("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "ptr", DllStructGetPtr ($tValue))
        Sleep (2000)
        FileChangeDir (@ScriptDir & "\x64")
        $sFPath = (@ScriptDir & "\x64")
        $search_upd = FileFindFirstFile ("*.*")
EndSelect

$aFiles = _FileListToArray ($sFPath, "*.*", 1)

If FileExists ($sFPath) = 0 Then
    MsgBox (16, "Установщик © StaforceBonus - Windows 7", "В текущем расположении отсутствуют папки x86/x64")
    Exit
EndIf

If IsArray ($aFiles) = 0 And FileExists ($sFPath) = 1 Then
    MsgBox (16, "Установщик © StaforceBonus - Windows 7", "В папке " & $sFPath & " не обнаружены обновления для Windows 7 " & @OSArch)
    Exit
EndIf

$iFiles = $aFiles[0]


;Графический интерфейс
$Form1 = GUICreate ("Установщик © StaforceBonus - Windows 7", 410, 412, 333, 344)
GUISetIcon ("C:\Windows\Icons\Applications\App 03.ico", -1)

$Reboot = GUICtrlCreateCheckbox ("Перезагрузка в конце", 8, 352, 137, 25)
GUICtrlSetState (-1, $GUI_CHECKED)

$Install = GUICtrlCreateButton ("Установить всё", 5, 313, 121, 33)
$Cancell = GUICtrlCreateButton ("Прервать установку", 145, 313, 121, 33)
$Exit = GUICtrlCreateButton ("Выход", 283, 313, 121, 33)

$Silent_Checkbox = GUICtrlCreateCheckbox ("Установка фоном", 160, 352, 113, 25)
GUICtrlSetState (-1, $GUI_CHECKED)

$ListView = GUICtrlCreateListView ("Пакеты обновления|Размер", 0, 0, 409, 281, $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT)
_GUICtrlListView_SetColumnWidth ($ListView, 0, 300)
_GUICtrlListView_SetColumnWidth ($ListView, 1, 92)

$ProgressBar = GUICtrlCreateProgress (0, 285, 409, 17, $PBS_SMOOTH)

$Label_Copyright = GUICtrlCreateLabel ("© StaforceTEAM - Lubitel Softa", 127, 392, 155, 17)
GUICtrlSetFont (-1, 8, 400, 0, "Tahoma")

GUISetState (@SW_SHOW)


;Заполнение имён обновлений и их размеров в ListBox
For $i = 1 To $aFiles[0]
    If FileGetSize ($aFiles[$i]) >= 1048576 Then
        $FileSize = Round (FileGetSize ($aFiles[$i]) / 1048576, 2)
        $FileSizeText = $FileSize & " МБ"
    Else
        $FileSize = Round (FileGetSize ($aFiles[$i]) / 1024, 2)
        $FileSizeText = $FileSize & " КБ"
    EndIf

    GUICtrlCreateListViewItem ($aFiles[$i] & "|" & $FileSizeText, $ListView)
Next


;Здесь к кнопкам привязаны действия
Do
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Exit
            Exit
        Case $Install
            _Install()
    EndSwitch
Until $nMsg = $GUI_EVENT_CLOSE


;Установка обновлений
Func _Install()
$iPrecent = 0

While $search_upd = 1
    $updates = FileFindNextFile ($search_upd)
    If @error Then ExitLoop

    $iPrecent += (100 / $iFiles)
    GUICtrlSetData ($ProgressBar, $iPrecent)

    Switch StringRight ($updates, 3)
        Case $msu
            ShellExecuteWait ("wusa.exe", $updates & " /quiet /norestart", $sFPath, "open")
        Case $cab
            ShellExecuteWait ("PkgMgr.exe", "/ip /m:" & $updates & " /quiet /norestart", $sFPath, "open")
    EndSwitch

    If $iPrecent >= 100 Then
        $nMsg = $GUI_EVENT_CLOSE
    EndIf
WEnd
EndFunc

;Включение обратно перенаправления системных папок в Windows х64
If @OSArch = "X64" Then
    DllCall ("kernel32.dll", "int", "Wow64RevertWow64FsRedirection", "ptr", DllStructGetPtr ($tValue))
EndIf


Русское сообщество AutoIt

[Элементы GUI] Выделение элементов ListView
« Отправлен: Июнь 14, 2011, 21:28:44 »

Оффлайн Sky-WaLkeR [?]

  • Продвинутый
  • ***
  • Сообщений: 332
  • Репутация: 95
  • Пол: Мужской
    • Naboko
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: [Элементы GUI] Выделение элементов ListView
« Ответ #1, Отправлен: Июнь 14, 2011, 21:54:22 »
Роль выделения строчки в ListView играет функция _GUICtrlListView_SetItemSelected в GuiListView UDF.
(нажмите для показа/скрытия)

Оффлайн Lubitel Softa [?]

  • Новичок
  • *
  • Сообщений: 2

  • Автор темы
  • Репутация: 1
  • Пол: Мужской
    • http://www.japonwarez.com
    • Награды
Re: [Элементы GUI] Выделение элементов ListView
« Ответ #2, Отправлен: Июнь 15, 2011, 00:49:55 »
Код который написан полное Г. Переписал заново и использовал функцию _GUICtrlListView_SetItemSelected - всё работает. Спасибо.

Оффлайн VladUs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 621
  • Репутация: 180
  • Пол: Мужской
    • Награды
Re: [Элементы GUI] Выделение элементов ListView
« Ответ #3, Отправлен: Июнь 15, 2011, 01:23:35 »
Sky-WaLkeR  [?]
Цитировать
Роль выделения строчки в ListView играет функция _GUICtrlListView_SetItemSelected в GuiListView UDF

Вообще - то существуют и встроенные, в Autoit решения, без подключения  дополнительных библиотек.
Я говорю про функцию ControlListView() с высылаемой командной "Select"
Например:

Код: AutoIt [Выделить]
$Gui = GUICreate("")
$list = GUICtrlCreateListView("Ст1      |Ст2 |Ст3  ",10,10,330,350)
$item1 = GUICtrlCreateListViewItem("строка1 | 1| 1   ", $list)
$item2 = GUICtrlCreateListViewItem("строка2 | 2| 2   ", $list)

GUIRegisterMsg($WM_SYSCOMMAND,"WM_SYSCOMMAND")
GUISetState()

While 1
    Sleep (1000)
    ControlListView($Gui, "", $list, "Select", 0) ; выделяем первую строку
    Sleep(1000)
    ControlListView($Gui, "", $list, "Select", 1) ; выделяем вторую строку
WEnd

Func WM_SYSCOMMAND($hwnd,$msg,$wParam,$lParam)
    $SC_CLOSE = 0xF060
    Switch $wParam
    Case $SC_CLOSE
        Exit
        Return 0
    EndSwitch
EndFunc
 


Делай что должен и  будь что будет

Русское сообщество AutoIt

Re: [Элементы GUI] Выделение элементов ListView
« Ответ #3 Отправлен: Июнь 15, 2011, 01:23:35 »

Оффлайн SharkyEXE [?]

  • Новичок
  • *
  • Сообщений: 80
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Элементы GUI] Выделение элементов ListView
« Ответ #4, Отправлен: Сентябрь 08, 2018, 16:59:28 »
VladUs

Здравствуйте.

Здесь Вы привели образец, в котором жестко привязаны номер строк

выделяем первую строку
выделяем вторую строку


У меня есть окно, в котором нужно нажать на строку, где написано Динамики ( строка Динамики может быть под любым номером - первая, вторая, пятая )

Пожалуйста, помогите мне

Информация об окне ( Autoit Windows Info )

(нажмите для показа/скрытия)

Спаисбо.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
Скорблю и помню.


Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Элементы GUI] Выделение элементов ListView
« Ответ #5, Отправлен: Сентябрь 08, 2018, 17:18:41 »
Код: AutoIt [Выделить]
ShellExecute("mmsys.cpl")
WinWaitActive("Звук")

$iItem = ControlListView("Звук", "", "SysListView321", "FindItem", "Динамики")
ControlListView("Звук", "", "SysListView321", "Select", $iItem)
ControlSend("Звук", "", "SysListView321", "{space}")


Оффлайн SharkyEXE [?]

  • Новичок
  • *
  • Сообщений: 80
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Элементы GUI] Выделение элементов ListView
« Ответ #6, Отправлен: Сентябрь 08, 2018, 17:26:58 »
InnI

Здравствуйте.

Отлично, я Вам очень благодарен

Можно, Вас, немного, микро расширить Ваш код

После запуска Вашего кода появляется окно с заголовком Свойства: Динамики

1) Найти вкладку Дополнительные возможности ( вкладка может быть под любым номером )

2) Нажать на вкладку Дополнительные возможности

3-1) Если установлена птичка/галочка на строке Отключить все эффекты : в окне с заголовком Свойства: Динамики нажать кнопку Отмена

3-2) Если не установлена птичка/галочка на строке Отключить все эффекты :
- поставить птичку\галочку в строке Отключить все эффекты
- в окне с заголовком Свойства: Динамики нажать кнопку Применить
- в окне с заголовком Свойства: Динамики нажать кнопку ОК

3-3) В окне с заголовком Звук нажать кнопку ОК

Пожалуйста, я Вас очень прошу

Спасибо.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Сентябрь 08, 2018, 17:35:39 от SharkyEXE »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: [Элементы GUI] Выделение элементов ListView
« Ответ #7, Отправлен: Сентябрь 08, 2018, 17:32:18 »
SharkyEXE
Мало того, что это старая тема, так ещё ваше "расширение" никакого к ней отношения не имеет.
Я думаю вам лучше обратиться в Стол заказов.

Русское сообщество AutoIt

Re: [Элементы GUI] Выделение элементов ListView
« Ответ #7 Отправлен: Сентябрь 08, 2018, 17:32:18 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
5537 Просмотров
Последний ответ Август 16, 2010, 20:53:06
от XpycT
2 Ответов
2570 Просмотров
Последний ответ Апрель 02, 2011, 22:24:21
от tigerby
9 Ответов
5650 Просмотров
Последний ответ Январь 05, 2012, 11:04:53
от BaRsupillamy
4 Ответов
3526 Просмотров
Последний ответ Февраль 04, 2012, 11:08:38
от StarEdik
4 Ответов
3541 Просмотров
Последний ответ Июнь 11, 2012, 19:07:56
от CreatoR
7 Ответов
6107 Просмотров
Последний ответ Сентябрь 23, 2012, 16:15:53
от AZJIO
1 Ответов
1611 Просмотров
Последний ответ Январь 17, 2014, 22:31:01
от InnI
1 Ответов
1767 Просмотров
Последний ответ Июнь 02, 2016, 07:49:06
от F9
3 Ответов
1025 Просмотров
Последний ответ Сентябрь 12, 2016, 21:05:40
от Alofa
1 Ответов
639 Просмотров
Последний ответ Апрель 05, 2017, 18:59:47
от InnI