Что нового

Чтение из .txt в combobox(GUICtrlCreateCombo)

Detre

Новичок
Сообщения
70
Репутация
0
Всем доброго вечера, надеюсь я в правильную тему написал. Не могу понять за мат. часть. Может ли штатный combobox строить список из файла .txt?
Я знаю, что выбор из списка конкретную строку можно и оно юзается для удаленных дисков у меня, что абалдеть как удобно)))
Код:
Global $idComboBox = GUICtrlCreateCombo("C", 662, 95, 35, 21)
GUICtrlSetTip(-1, "Выберете букву диска")
GUICtrlSetColor(-1, 0x000000)
GUICtrlSetData($idComboBox, "D|E|A|B|F|G|H|I|G|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z")


В ответ, для чего нужно вытяжка из txt. Я периодически делаю выгрузку из AD и было бы удобно читать список не выходя из программки со скриптами, которая их отправляет на удаленные доменные компы, имеет ли оное такую возможность? К сожалению не смог найти ответ на данный вопрос. Вдобавок еще вопрос, есть ли возможность сокращать список по фильтру, например сокращение по первым двум символам? Заранее низкий поклон носителям знаний на этом чудесном форуме.
 

Andrey_A

Продвинутый
Сообщения
319
Репутация
68
Один из вариантов:
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

$sFile='C:\List.txt'

$aListFile=FileReadToArray($sFile)
_ArrayDisplay($aListFile)

$hGUI=GUICreate('Combo - Cписок из файла')

$Combo=GUICtrlCreateCombo('',10,10,330,150,3)

For $i=0 To UBound($aListFile)-1
  GUICtrlSetData(-1,$aListFile[$i])
Next

GUICtrlSendMsg(-1,$CB_SETCURSEL,0,0) ; Выбирает номер строки в списке Combo
GUICtrlSendMsg(-1,$CB_SETDROPPEDWIDTH,370,0) ; Ширина выпадающего списка Combo

GUISetState()

While 1
  $msg = GUIGetMsg()
  Switch $msg
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $Combo
      MsgBox(4096,'Тест','Combo, Выбран файл:'&@CRLF&GUICtrlRead($Combo))
  EndSwitch
WEnd
 
Автор
Detre

Detre

Новичок
Сообщения
70
Репутация
0
Один из вариантов:
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

$sFile='C:\List.txt'

$aListFile=FileReadToArray($sFile)
_ArrayDisplay($aListFile)

$hGUI=GUICreate('Combo - Cписок из файла')

$Combo=GUICtrlCreateCombo('',10,10,330,150,3)

For $i=0 To UBound($aListFile)-1
  GUICtrlSetData(-1,$aListFile[$i])
Next

GUICtrlSendMsg(-1,$CB_SETCURSEL,0,0) ; Выбирает номер строки в списке Combo
GUICtrlSendMsg(-1,$CB_SETDROPPEDWIDTH,370,0) ; Ширина выпадающего списка Combo

GUISetState()

While 1
  $msg = GUIGetMsg()
  Switch $msg
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $Combo
      MsgBox(4096,'Тест','Combo, Выбран файл:'&@CRLF&GUICtrlRead($Combo))
  EndSwitch
WEnd

Не прокает на 938 строк в тексте. Попробовал на 3 строки, работает((( К тому же, нельзя ли обойтись без выпадания окна _ArrayDisplay???
 

All2khoff

Продвинутый
Сообщения
347
Репутация
65
Не прокает на 938 строк в тексте. Попробовал на 3 строки, работает((( К тому же, нельзя ли обойтись без выпадания окна _ArrayDisplay???
отредактируйте или замените эти строки
Код:
;~ _ArrayDisplay($aListFile)

$hGUI=GUICreate('Combo - Cписок из файла')

$Combo=GUICtrlCreateCombo('',10,10)
 
Автор
Detre

Detre

Новичок
Сообщения
70
Репутация
0
Понял почему не хочет открывать большой файл, после того как PS эскспортирует файл, в конце у него 3 пустые строки и из-за этого не читает файл как надо, есть идеи как поправить его?)
Сообщение автоматически объединено:

Понял почему не хочет открывать большой файл, после того как PS эскспортирует файл, в конце у него 3 пустые строки и из-за этого не читает файл как надо, есть идеи как поправить его?)
Нашел, если кому нужно в PS указываем Get-ADComputer -Filter * -SearchBase "OU=Domain Computers , DC=DOMAIN, DC=net" | Sort Name | Select -expandproperty Name | %{ $_.TrimEnd(" ") } | Out-File -Encoding "default" C:\Names.txt И убирает все лишнее, только результат оставляет.
Сообщение автоматически объединено:

Один из вариантов:
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

$sFile='C:\List.txt'

$aListFile=FileReadToArray($sFile)
_ArrayDisplay($aListFile)

$hGUI=GUICreate('Combo - Cписок из файла')

$Combo=GUICtrlCreateCombo('',10,10,330,150,3)

For $i=0 To UBound($aListFile)-1
  GUICtrlSetData(-1,$aListFile[$i])
Next

GUICtrlSendMsg(-1,$CB_SETCURSEL,0,0) ; Выбирает номер строки в списке Combo
GUICtrlSendMsg(-1,$CB_SETDROPPEDWIDTH,370,0) ; Ширина выпадающего списка Combo

GUISetState()

While 1
  $msg = GUIGetMsg()
  Switch $msg
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $Combo
      MsgBox(4096,'Тест','Combo, Выбран файл:'&@CRLF&GUICtrlRead($Combo))
  EndSwitch
WEnd
Разобрался со своими тараканами в виде файла, огромное спасибо за подсказку. Не подскажешь, есть ли возможность фильтрации по первым символам?
 
Последнее редактирование:

All2khoff

Продвинутый
Сообщения
347
Репутация
65
Не подскажешь, есть ли возможность фильтрации по первым символам?
чуть более подробно можно? что-то вроде ввести первые символы имени пк и чтобы в выпадающем списке были только пк начинающиеся с этих букв?
 
Автор
Detre

Detre

Новичок
Сообщения
70
Репутация
0
куда предполагается вводить символы?
В тот же combobox, в котором теперь у меня теперь показывает список компов)
Сообщение автоматически объединено:

куда предполагается вводить символы?
Есть что-нибудь "такое" в арсенале?)
 
Последнее редактирование:

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
_GUICtrlComboBox_AutoComplete - может из этого получится мастерить, по крайней мере события при вводе букв, а уж чем заполнить можно поиском по массиву данных, ну и также автоматически раскрыть список. Вроде всё есть для сооружения необходимого кода.
 

All2khoff

Продвинутый
Сообщения
347
Репутация
65
сейчас чуть чуть поковырял вот этот код
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>


$sFile='d:\comps.txt'

$aListFile=FileReadToArray($sFile)
;~ _ArrayDisplay($aListFile)

$hGUI=GUICreate('Combo - Cписок из файла')

$Combo=GUICtrlCreateCombo('',20,40,330,150) ;обрати внимание здесь я убрал стиль элемента

For $i=0 To UBound($aListFile)-1
  GUICtrlSetData(-1,$aListFile[$i])
Next

GUICtrlSendMsg(-1,$CB_SETCURSEL,0,0) ; Выбирает номер строки в списке Combo
GUICtrlSendMsg(-1,$CB_SETDROPPEDWIDTH,370,0) ; Ширина выпадающего списка Combo

GUISetState()

While 1
  $msg = GUIGetMsg()
  Switch $msg
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $Combo
      MsgBox(4096,'Тест','Combo, Выбран файл:'&@CRLF&GUICtrlRead($Combo))
  EndSwitch
WEnd

и если сразу после запуска начать вводить имя пк то список промотается до него.
Снимок.JPG
Снимок2.JPG
 
Верх