Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   GUI and Checkbox and DIM (http://forum.oszone.net/showthread.php?t=253574)

-TRM- 09-02-2013 14:43 2086301

GUI and Checkbox and DIM
 
Здравствуйте !
Есть скрипт :
Код:

#include <GUIConstants.au3>
Global $TMP=@ScriptDir & "\tmp.ttt"
GUICreate ("My GUI default font")  ; will create a dialog box that when displayed is centered
$Tab1 = GUICtrlCreateTab(8, 8, 545, 393)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$Zakladka1 = GUICtrlCreateTabItem("Закладка 1")
$InputPut = GUICtrlCreateInput(IniRead($TMP,"Directory","in",@SystemDir), 28, 40, 300, 21)
$Zakladka2 = GUICtrlCreateTabItem("Закладка 2")
DP_load()
$Zakladka3 = GUICtrlCreateTabItem("Закладка 3")
GUISetState ()

; Run the GUI until the dialog is closed
While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend

Func DP_load()
        $DPfiles=0
        $search3 = FileFindFirstFile(@SystemDir & "\*.exe")
        If $search3 = -1 Then

;                Exit
        Else
                While 1
                        $file = FileFindNextFile($search3)
                        If @error Then ExitLoop
                        $DPfiles+=1
                        IniWrite($TMP,"DP",$DPfiles,$file)
                        IniWrite($TMP,"DPFiles",$file,$DPfiles)
                WEnd
                IniWrite($TMP,"Setting","FilesDP",$DPfiles)
                $DPfiles+=1
                Dim $aDrive[$DPfiles]
                Dim $CheckboxDP[UBound($aDrive)]
                $next=0
                $stolb=24
                For $ind = 1 To UBound($aDrive) - 1
                        If $ind = 16 Then;Смещение в право столбца выбора
                                $next=0
                                $stolb+=170
                        ElseIf $ind = 31 Then
                                $next=0
                                $stolb+=170
                        ElseIf $ind = 46 Then
                                MsgBox(64,"","Не достаточно места для отображения !")
                                ExitLoop
                        EndIf
                        $next+=24
                        $CheckboxDP[$ind] = GUICtrlCreateCheckbox(IniRead($TMP,"DP",$ind,""), $stolb, 14+$next, 165, 17)
                Next
                FileClose($search3)
        EndIf
EndFunc

Задача такая-отобразить в GUI все найденные ЕХЕ файлы и при выборе чекбокса должно появляться сообщение с именем этого файла.
Поизвращался как мог.
Проблема первая-немог сделать скролинг,чтобы мог видеть все файлы-пришлось переносить по столбцам и выводить сообщение о лимите файлов.
Вторая проблема-Незнаю как универсально в CASE $CheckboxDP.... определить чекбокс, чтобы прочитать имя.
Третья проблема-Незнаю как сделать копию чекбоксов в Закладка 3 чтобы при нажатии в Закладка 2 на определённый чекбокс изменялся вид чекбокса в Закладка 3 т.е. думаю это сделать так :
Case $Checkbox?
If GUICtrlRead ($CheckboxDP?)=1 Then
GUICtrlSetStyle ($Checkbox?, BitOR($BS_CHECKBOX,$BS_AUTOCHECKBOX,$BS_CENTER,$WS_TABSTOP))
GUICtrlSetFont($Checkbox?, 8, 400, 4, "MS Sans Serif")
Else
GUICtrlSetStyle ($Checkbox?, BitOR($BS_CHECKBOX,$BS_AUTOCHECKBOX,$BS_LEFT,$WS_TABSTOP))
GUICtrlSetFont($Checkbox?, 8, 400, 1, "MS Sans Serif")
EndIf
Заранее спасибо.

AZJIO 09-02-2013 16:17 2086357

-TRM-,
1. Для поиска файлов есть функция _FO_FileSearch, она же в офлайн-справке. Или _FileListToArray.
2. Для списка лучше делать GUICtrlCreateListView с чекбосами (или GUICtrlCreateList без чекбоксов).

-TRM- 09-02-2013 17:00 2086392

AZJIO, Чуть непонятно как в GUICtrlCreateListView можно чеквокс запихнуть...

AZJIO 09-02-2013 17:45 2086430

-TRM-, в справке GUICtrlCreateListViewItem пример с чекбоксом. Стиль установить.

-TRM- 09-02-2013 17:47 2086433

AZJIO, Я вот погуглил и нашёл такой скрипт
Код:

#include <GUIConstantsEx.au3>
#include <File.au3>
#include <WinAPIEx.au3>
#include <GuiListView.au3>

Dim $aDir[3] = [@SystemDir, @WindowsDir, @MyDocumentsDir]
$iInd = 0

$hGui = GUICreate('Test My', 400, 320)
$nListView = GUICtrlCreateListView('Первое поле', 2, 2, 394, 268, $GUI_SS_DEFAULT_LISTVIEW, _
        BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
$hListView = GUICtrlGetHandle($nListView)
_GUICtrlListView_AddColumn($nListView, 'Второе поле', 380)

$nButtonGo = GUICtrlCreateButton('Go', 75, 280, 100, 30)
$nButtonSave = GUICtrlCreateButton('Save', 225, 280, 100, 30)
GUISetState()

_WinAPI_EmptyWorkingSet()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButtonGo
            $aFiles = _FileListToArray($aDir[$iInd], '*', 1)
            If @error Then ContinueLoop
            Dim $aItems[$aFiles[0]][1]
            For $i = 1 To $aFiles[0]
                $aItems[$i - 1][0] = $aFiles[$i]
            Next
            $aFiles = 0
            _GUICtrlListView_DeleteAllItems($hListView)
            _GUICtrlListView_BeginUpdate($hListView)
            _GUICtrlListView_AddArray($hListView,$aItems)
            _GUICtrlListView_EndUpdate($hListView)
            ;_GUICtrlListView_SetItemChecked($nListView, -1) ;Check All
            WinSetTitle($hGui, '', $aDir[$iInd])
            $aItems = 0
            $iInd += 1
            If $iInd = 3 Then $iInd = 0
        Case $nButtonSave
            $iCount = _GUICtrlListView_GetItemCount($nListView)
            If Not $iCount Then ContinueLoop
            $sText = ''
            For $i = 0 To $iCount - 1
                If _GUICtrlListView_GetItemChecked($nListView, $i) Then
                    $sText &= _GUICtrlListView_GetItemText($nListView, $i) & @CRLF
                EndIf
            Next
            If Not $sText Then ContinueLoop
            $sText = 'Dir: ' & WinGetTitle($hGui) & @CRLF & @CRLF & StringTrimRight($sText, 2)
            $sFile = @ScriptDir & '\Dir_' & StringRegExpReplace(WinGetTitle($hGui), '^.*\\', '') & '.txt'
            $hFile = FileOpen($sFile, 2)
            FileWrite($hFile, $sText)
            FileClose($hFile)
            $iCount = 0
            $sText = ''
            $sFile = ''
            $hFile = 0
    EndSwitch
WEnd

как тут можно загнать во второе поле то что загружается в первое поле?

Цитата:

Цитата AZJIO
в справке GUICtrlCreateListViewItem пример с чекбоксом. Стиль установить. »

У меня в справке пример с чекбоксом отсутствует-ссылочку не дадите?

AZJIO 10-02-2013 00:21 2086712

справка (поиск работает на вкладке "Поиск")
ScriptsCollection, и к ней программа для поиска по коллекции TextReplace, ещё Notepad++ вкладка "Найти в файлах".


Время: 21:41.

Время: 21:41.
© OSzone.net 2001-