Войти

Показать полную графическую версию : GUI and Checkbox and DIM


-TRM-
09-02-2013, 14:43
Здравствуйте !
Есть скрипт :
#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
-TRM-,
1. Для поиска файлов есть функция _FO_FileSearch (http://azjio.narod2.ru/autoit3_docs/userfunctions/_FO_FileSearch.htm), она же в офлайн-справке. Или _FileListToArray.
2. Для списка лучше делать GUICtrlCreateListView с чекбосами (или GUICtrlCreateList без чекбоксов).

-TRM-
09-02-2013, 17:00
AZJIO, Чуть непонятно как в GUICtrlCreateListView можно чеквокс запихнуть...

AZJIO
09-02-2013, 17:45
-TRM-, в справке GUICtrlCreateListViewItem пример с чекбоксом. Стиль установить.

-TRM-
09-02-2013, 17:47
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
как тут можно загнать во второе поле то что загружается в первое поле?

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

AZJIO
10-02-2013, 00:21
справка (http://forum.oszone.net/post-2059446.html#post2059446) (поиск работает на вкладке "Поиск")
ScriptsCollection (http://u.to/3bgVAg), и к ней программа для поиска по коллекции TextReplace (http://u.to/wZZN), ещё Notepad++ вкладка "Найти в файлах".




© OSzone.net 2001-2012