Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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 @
Функция ExtractTemporaryFile по маске не работает!

А что, разве должна?
Цитата Profi @
В общем, скорее всего, автоматизировать не удастся.

Что автоматизируешь то??

Автор: Profi 28.12.06, 08:45
Цитата jack128 @
Что автоматизируешь то??

Ну, смотри. У меня есть список файлов, которые к программе идут как дополнение (то есть без них она тоже будет работать на ура), мне надо составить список в 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 @
можно ли в Preprocessore использовать dll?

хм. А зачем тебе это?

Автор: Profi 28.12.06, 10:11
Цитата jack128 @
Цитата Profi @
можно ли в Preprocessore использовать dll?

хм. А зачем тебе это?

Дело в том, что мне нужно получить не само имя файла, а его внутреннее имя (экспортируется в виде PChar). В коде-то я это сделал, а вот как в Preprocessor'е не нашел.

Автор: jack128 28.12.06, 11:07
Profi хм. Нет, в препроцессоре такой возможности не вижу.

А чем не нравится вариант в цикле вызывать ExtractTemporaryFile ?? (хотя он мне тоже не нравится :-)

Автор: Profi 28.12.06, 11:09
Цитата jack128 @
А чем не нравится вариант в цикле вызывать ExtractTemporaryFile ?? (хотя он мне тоже не нравится :-)

То есть, создать Preprocessor'ом список, потом пройтись по нему, извлекая в {tmp}, а потом уже оттуда их подключать. Мысль.

Добавлено
Блин, получилось наконец-то!

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)