ViSiToR
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Zloy_Gelud 01:47 07-01-2009 Цитата: Если нажали на кнопку и выбран какой-нить индекс в объекте ListView, то появлялось бы сообщение с выбранным индексом, если же ничего не выбрано, то сообщение с какой-нить руганью. И как установить авто-выравнивание ширины ВСЕХ колонок в зависимости от текста в них. | Код: #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiImageList.au3> #include <WindowsConstants.au3> Opt('MustDeclareVars', 1) Global $hListView, $hButton, $hGUI CreateGUI() Func CreateGUI() Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE) Local $iExListViewStyle = BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES) $hGUI = GUICreate("Безопасное извлечение устройства", 470, 250) $hListView = GUICtrlCreateListView("Имя|Тип|Полный объем|Свободно|Файловая система", 10, 10, 450, 180, -1, $iExWindowStyle) _GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle) $hButton = GUICtrlCreateButton("Остановить", 10, 200) GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") GUISetState() Local $hImage = _GUIImageList_Create(16, 16, 5, 3) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -8) _GUICtrlListView_SetImageList($hListView, $hImage, 1) Local $tblDrives = DriveGetDrive("REMOVABLE") ; таблица съемных устройств If Not @error Then Local $iItemsAdded_Count = 0 For $i = 1 To $tblDrives[0] If ($tblDrives[$i] <> "a:") Then ; исключаем флоппик $iItemsAdded_Count += 1 Local $strLabel = DriveGetLabel($tblDrives[$i]) If ($strLabel == "") Then ; если метка отсутствует $strLabel = "Съемный диск" EndIf Local $nSpaceTotal = DriveSpaceTotal($tblDrives[$i]) Local $nSpaceFree = DriveSpaceFree($tblDrives[$i]) Local $strFS = DriveGetFileSystem($tblDrives[$i]) Local $nItem = _GUICtrlListView_AddItem($hListView, "(" & StringUpper($tblDrives[$i]) & ") " & $strLabel, 0) _GUICtrlListView_SetItemParam($hListView, $nItem, $tblDrives[$i]) _GUICtrlListView_AddSubItem($hListView, $nItem, "Съемный диск", 1) _GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceTotal * 1024 ^ 2), 2) _GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceFree * 1024 ^ 2), 3) _GUICtrlListView_AddSubItem($hListView, $nItem, $strFS, 4) EndIf Next If $iItemsAdded_Count > 0 Then For $i = 0 To _GUICtrlListView_GetColumnCount($hListView)-1 _GUICtrlListView_SetColumnWidth($hListView, $i, -1) Next Else _GUICtrlListView_SetColumnWidth($hListView, -1, $LVSCW_AUTOSIZE_USEHEADER) EndIf EndIf While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $hButton Local $sSel_Index = _GUICtrlListView_GetSelectedIndices($hListView, 0) Local $iSel_Index = Number($sSel_Index) Local $sSel_Drive = _GUICtrlListView_GetItemText($hListView, $iSel_Index, 0) If $sSel_Index = "" Then MsgBox(48, "Внимание!", "Выберите устройство из списка.", 0, $hGUI) Else MsgBox(64, "Внимание!", "Выбранное устройство: " & $sSel_Drive, 0, $hGUI) EndIf EndSwitch WEnd GUIDelete() EndFunc ;==>CreateGUI Func String_GetFormattedSize($nBytes, $cFormat = "FMTSIZE_AUTOMATIC") Local $strResult = "" If ($cFormat == "FMTSIZE_AUTOMATIC") Then If ($nBytes > 1024) Then If ($nBytes / 1024 < 1024) Then $strResult = String(Round($nBytes / 1024, 2)) & " КБ" Else If ($nBytes / 1024 ^ 2 < 1024) Then $strResult = String(Round($nBytes / 1024 ^ 2, 2)) & " МБ" Else If ($nBytes / 1024 ^ 3 < 1024) Then $strResult = String(Round($nBytes / 1024 ^ 3, 2)) & " ГБ" Else $strResult = String(Round($nBytes / 1024 ^ 4, 2)) & " ТБ" EndIf EndIf EndIf Else $strResult = String($nBytes) EndIf ElseIf ($cFormat == "FMTSIZE_BYTES") Then $strResult = String($nBytes) ElseIf ($cFormat == "FMTSIZE_KB") Then $strResult = String(Round($nBytes / 1024, 2)) & " КБ" ElseIf ($cFormat == "FMTSIZE_MB") Then $strResult = String(Round($nBytes / 1024 ^ 2, 2)) & " МБ" ElseIf ($cFormat == "FMTSIZE_GB") Then $strResult = String(Round($nBytes / 1024 ^ 3, 2)) & " ГБ" ElseIf ($cFormat == "FMTSIZE_TB") Then $strResult = String(Round($nBytes / 1024 ^ 4, 2)) & " ТБ" EndIf Return StringReplace($strResult, ".", ",") EndFunc ;==>String_GetFormattedSize Func WM_COMMAND($hWnd, $nMsg, $lParam, $wParam) EndFunc | Неплохой скрипт кстати. P.S А как извлечение будет делаться, просто интересно? И ещё, функцию String_GetFormattedSize() можно укоротить в этом случае: Код: Func _String_GetDisplaySize($iByteSize, $iRound=2) Local $asBytes[9] = [8, ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB'] ;Last two unreachable Local $iBytes_Val = 2 ^ 10 If $iByteSize < $iBytes_Val Then Return $iByteSize & ' Bytes' For $i = 8 To 1 Step -1 If $iByteSize >= $iBytes_Val ^ $i Then Return Round($iByteSize / $iBytes_Val ^ $i, $iRound) & $asBytes[$i] Next EndFunc | Но в общем случае она сама по себе не плохая, сам написал?
---------- ViSiToR a.k.a CreatoR CreatoR это не ник, CreatoR это стиль жизни! |
|