Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Создадим некий план программки: 0-Програмулька будет открывать файлы и папки 1-Создать список файлов и папок определенной директории. Имя переменной с этим списком пусть будет 2-Занести этот список в приготовленный ListBox с именем list 3-Назначить действие при выборе пункта из списка, т.е. при выборе будет создаваться переменная [open] с полным путем до файла, т.к. в списке будут только имена файлов 4-Назначить действие двойного клика, т.е. открытие файла или папки ну, вот в вкратце план ------ И так, на странице проекта создадим объект ListBox
При создании объекта открывается окно свойств
Зададим переменную (по умолчанию там ListBox1) для удобства (list) в место круглых надо квадратные, тут просто форматирование не проходит. Согласно плану список файлов будет находиться в переменной [fileList] и нам надо его отобразить в ListBox. Значит, в раздел Список пунктов поместим эту переменную вот так должно выглядить
Нажимаем ОК и переходим к пункту 1 нашего плана Для этого создадим кнопку
в свойствах команды заполним необходимые поля, это путь до сканируемой папки в примере C:\temp\*.*(обратите внимание на маску, без нее поиска не будет) Выставим чебоксы Включить файлы и папки. Результат сохраняем в переменную [fileList]
Quote
FileList "C:\temp\*.*" "Files" "[fileList]"
нажимаем ОК ну и последнее, назначаем действия, открываем ListBox, переходим на вкладку Команды и в секции Selection Changed напишем код переменной [open]. Создаем команду SetVar, для чего я уже описал выше в плане №3
в свойствах этой команды напишем следующий код
Quote
SetVar "[open]" "C:\temp\
"
переменная (list) взята из свойства ListBox выделенного элемента, в нем заносится значение выделенного пункта в ListBox, при запуске можно увидеть в дебагере. Переходим в секцию Double Click и назначаем команду для двойного клика по списку, вернее его пункту Команда будет Run в связке с FileExists, это надо для того, чтоб определить, что открываем файл или папку. Сам код
Quote
FileExists "[open]" "[ok]" If "[ok]" "=" "true" Run "[open]" "" "Wait" "" "" Else Run "[WindowsDir]explorer.exe" "[open]" "Wait" "" "" EndIf
файл будет открываться программой по умолчанию, но лучше открываемый файл открывать через ту прогу, которую она открывается. Пример открываем текстовой файл через виндовский NOTEPAD.EXE:
Quote
Run "[WindowsDir]NOTEPAD.EXE" "C:\temp\test.txt" "Normal" "" ""
Продолжим изучать ListBox В свойствах этого объекта есть возможность выбирать несколько файлов. Для этого надо поставить галочку в опции Множественный выбор? что мы и сделаем.
Это удобная функция нужна для одной операции к нескольким файлом. Например, нам надо скопировать несколько файлов в другую папку.... Вот этим мы и займемся. Галочку мы поставили, теперь перехожим во вкладку Команды и удаляем команду SetVar в секции Selection Changed, т.к. в этом случае она бесполезна.... При множественном выборе имена файлов в переменной (list) разделяются символом новой строки в ASII коде это будет штатный спецсимвол [#13]. И так допустим у нас есть в переменной (list) несколько файлов
Quote
test1.txt[#13]test2.txt[#13]test3.txt[#13]
нам надо разобрать эту строчку и сделать функцию копирования файлов. Для разбора этой строки в массив есть хорошая команда StrParse, переходим в секцию Double Click и удаляем все, что там написано. Создаем новую кнопку с заголовком “Копировать”, во вкладке Команда в секции Click создаем команду StrParse
Quote
StrParse "(list)" "[#13]" "[selekt]" "[count]"
в свойствах заполняем поля 1-Исходная строка для "разбора" конечно (list) 2-[#13] в качестве разделителя 3-массив, в котором будут храниться имена файлов, назовем [selekt] 4-количество элементов массива в нашем случае количество файлов [count]
Вот мы имеем массив с нужными нам файлами. Теперь нам надо каждый файл скопировать в другую папку, для работы с массивами, и не только с ними, но и с другими множественными операциями есть команда Loop, выбираем ее.
заполняем поля 1-начинаем перебор с 1 элемента 2-всего записей в массиве 3-счетчик цикла
Обратите внимание, что файл находится в определенном элементе массива и обращаемся к каждому элементу через счетчик цикла [selekt[i]] Во избежание ошибок создайте заранее папку, куда будете копировать файлы Можно тестировать исходник
Добавлено (03 Декабрь 2010, 08:10) --------------------------------------------- PS В ListBox можно зразу загрузить текстовой файл без использования цикла. Т.е. допустим у вас есть текстовой документ такого вида:
Белгород Благовещенск Биробиджан Брянск Владимир Волгоград Воронеж Екатеринбург Иваново Ижевск Иркутск Йошкар-Ола Казань Калининград Калуга Кемерово Киров Кострома Краснодар Красноярск Кудымкар Курган Курск Липецк Москва Нижний Новгород Новгород Новосибирск Омск Оренбург Орел Пенза
Как видите в файле список. Теперь надо в ListBox в "Список пунктов" поместим переменную, например [spisok] Загружаем наш текстовой файл:
Quote
FileToVar "C:\ spisok.txt" "[spisok]"
Вот и все, теперь список из файла находится в ListBox
- надо еще уточнить про способы записи элементов в листбокс. можно записывать вручную, можно записать переменные, можно записать одну переменную, которая содержит набор элементов, разделенных переводом строки. - уточнить как грамотно вытаскивать элементы, про опции "номер пункта" "текст пункта". Очень удобно использовать листбокс при загрузке/извлечении массивов переменных, в данном случае "номер пункта" можно использовать как индекс элемента в массиве. Полезен список при сортировке или переопределении элементов массива (загружаем туда что надо/выгружаем в новый массив). Получив кол-во элементов в листбоксе узнаем и предел обьема массива в нем, далее обработка в цикле при необходимости каждого элемента массива. Как задавать вопросы
увы. исчерпан лимит свободного времени. А следующий пробел неизвестен, поживем увидим. Мне кажется, я затронул самое необходимое, остальное пользователь может выяснить сам, т.к. первое получилось, а в остальном иследовании с играет азарт и т.д. У меня так было, сначала надо чтоб получилось элементарное, а потом загарается азарт и начинаются иследования, изучения и т.д.