Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Инсталляторы > Заполнить NewCheckListBox |
Автор: Profi 25.12.06, 17:31 |
В инсталляторе создаю новую страницу с TNewCheckListBox на ней. Вопрос, можно ли как-то заполнить его именами файлов из определенного каталога? Думаю, что капать надо в сторону Preprocessor'а, но что-то пока никак не решу эту проблему. |
Автор: jack128 25.12.06, 21:12 |
Гм. Коли упонимается препроцессор, то получается, что содержимое каталога известно на момент компиляции setup'а ? Или таки имеется в виду получить список файлов в run time ?? Добавлено Если именно через препроцессор, то примерно так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> #define FindHandle #define FindResult #define Mask "F:\p2p на E\Games\Preferans\*.hlp" #sub ProcessFoundFile #define fn FindGetFileName(FindHandle) CheckListBox.AddCheckBox('{#fn}', '', 0, True, True, False, True, nil); #endsub // где в секции [Code] CheckListBox := TNewCheckListBox.Create(Page); CheckListBox.Width := Page.SurfaceWidth; CheckListBox.Height := ScaleY(97); CheckListBox.Flat := True; CheckListBox.Parent := Page.Surface; #for {FindHandle = FindResult = FindFirst(Mask, 0); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile |
Автор: Profi 26.12.06, 08:35 |
В том-то и дела, что хотелось бы в Run Time! Просто я сделал без Preprocessor'а вот так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> if FindFirst('Plugins\*.dmp',FindRec) then begin try Repeat if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY=0 then NewCheckListBox1.AddCheckBox(FindRec.Name,'',0,false,true,false,false,nil); Until not FindNext(FindRec); finally FindClose(FindRec); end; end; Но за вариант с Proprocessor'ом, все равно "+". |
Автор: Profi 27.12.06, 16:32 |
Уже третий день бьюсь, но никак не выходит! Функция ExtractTemporaryFile по маске не работает! В общем, скорее всего, автоматизировать не удастся. |
Автор: jack128 28.12.06, 08:36 |
А что, разве должна? Что автоматизируешь то?? |
Автор: Profi 28.12.06, 08:45 |
Ну, смотри. У меня есть список файлов, которые к программе идут как дополнение (то есть без них она тоже будет работать на ура), мне надо составить список в TNewCheckListBox с именами этих файлов, чтобы юзер сам выбрал какие ставить, а какую нет. Дело в том, что этих файлов много, но все они лежат в одной папке и у всех одинаковое расширение (в папке есть и другие файлы). В инсталлятор я их по маске загоняю, а вот что делать теперь? Я придумал только извлечение во временный каталог, перебор их там с добавлением в TNewCheckListBox, ну и потом установку вручную с помощь FileCopy. В таком решении автоматизировать можно все, кроме того, что во временный каталог можно извлечь файл с заранее известным именем! Следовательно, все равно руками составлять список и писать кучу ExtractTemporaryFile (ну, или в цикле, но все равно список создавать). |
Автор: jack128 28.12.06, 08:54 |
Profi Ну и? с помощью [#2] загоняешь список файлов в Check ListBox и при инсталяции проверяешь отмечен ли checkbox с именем файла, если отмечен, то устанавливаешь... Вроде всё просто. |
Автор: Profi 28.12.06, 09:05 |
Цитата jack128 @ Profi Ну и? с помощью [#2] загоняешь список файлов в Check ListBox и при инсталяции проверяешь отмечен ли checkbox с именем файла, если отмечен, то устанавливаешь... Вроде всё просто. Блин, точно! Я и забыл, что Proprecessor работает до компиляции инсталлятора! |
Автор: Profi 28.12.06, 09:37 |
Ага, ну теперь другая проблема. В help'е не нашел, можно ли в Preprocessore использовать dll? |
Автор: jack128 28.12.06, 10:07 |
хм. А зачем тебе это? |
Автор: Profi 28.12.06, 10:11 |
Дело в том, что мне нужно получить не само имя файла, а его внутреннее имя (экспортируется в виде PChar). В коде-то я это сделал, а вот как в Preprocessor'е не нашел. |
Автор: jack128 28.12.06, 11:07 |
Profi хм. Нет, в препроцессоре такой возможности не вижу. А чем не нравится вариант в цикле вызывать ExtractTemporaryFile ?? (хотя он мне тоже не нравится :-) |
Автор: Profi 28.12.06, 11:09 |
Цитата jack128 @ А чем не нравится вариант в цикле вызывать ExtractTemporaryFile ?? (хотя он мне тоже не нравится :-) То есть, создать Preprocessor'ом список, потом пройтись по нему, извлекая в {tmp}, а потом уже оттуда их подключать. Мысль. Добавлено Блин, получилось наконец-то! |