На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ Inno Setup
Пожалуйста, выделяйте текст инсталлятора написанного на Inno Setup тегом [сode=ins] ... [/сode]. Для этого используйте кнопку [code=ins] в форме ответа или выпадающего списка, если нужно вставить код из другой программы.


Обязательно указывать:

  • Программу, используемую для создания инсталлятора.



Если в ходе решения проблемы возникли дополнительные вопросы, по возможности задаем их в той же теме.


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> Заполнить NewCheckListBox , Inno Setup
    В инсталляторе создаю новую страницу с TNewCheckListBox на ней. Вопрос, можно ли как-то заполнить его именами файлов из определенного каталога? Думаю, что капать надо в сторону Preprocessor'а, но что-то пока никак не решу эту проблему.
      Гм. Коли упонимается препроцессор, то получается, что содержимое каталога известно на момент компиляции setup'а ? Или таки имеется в виду получить список файлов в run time ??

      Добавлено
      Если именно через препроцессор, то примерно так:

      ExpandedWrap disabled
        #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
        В том-то и дела, что хотелось бы в Run Time! Просто я сделал без Preprocessor'а вот так:
        ExpandedWrap disabled
              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'ом, все равно "+".
          Уже третий день бьюсь, но никак не выходит! Функция ExtractTemporaryFile по маске не работает! В общем, скорее всего, автоматизировать не удастся.
            Цитата Profi @
            Функция ExtractTemporaryFile по маске не работает!

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

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

              Ну, смотри. У меня есть список файлов, которые к программе идут как дополнение (то есть без них она тоже будет работать на ура), мне надо составить список в TNewCheckListBox с именами этих файлов, чтобы юзер сам выбрал какие ставить, а какую нет. Дело в том, что этих файлов много, но все они лежат в одной папке и у всех одинаковое расширение (в папке есть и другие файлы). В инсталлятор я их по маске загоняю, а вот что делать теперь? Я придумал только извлечение во временный каталог, перебор их там с добавлением в TNewCheckListBox, ну и потом установку вручную с помощь FileCopy. В таком решении автоматизировать можно все, кроме того, что во временный каталог можно извлечь файл с заранее известным именем! Следовательно, все равно руками составлять список и писать кучу ExtractTemporaryFile (ну, или в цикле, но все равно список создавать).
                Profi
                Ну и? с помощью [#2] загоняешь список файлов в Check ListBox и при инсталяции проверяешь отмечен ли checkbox с именем файла, если отмечен, то устанавливаешь... Вроде всё просто.
                  Цитата jack128 @
                  Profi
                  Ну и? с помощью [#2] загоняешь список файлов в Check ListBox и при инсталяции проверяешь отмечен ли checkbox с именем файла, если отмечен, то устанавливаешь... Вроде всё просто.

                  Блин, точно! Я и забыл, что Proprecessor работает до компиляции инсталлятора!
                    Ага, ну теперь другая проблема. В help'е не нашел, можно ли в Preprocessore использовать dll?
                      Цитата Profi @
                      можно ли в Preprocessore использовать dll?

                      хм. А зачем тебе это?
                        Цитата jack128 @
                        Цитата Profi @
                        можно ли в Preprocessore использовать dll?

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

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

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

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

                            Добавлено
                            Блин, получилось наконец-то!
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0328 ]   [ 15 queries used ]   [ Generated: 27.04.24, 19:11 GMT ]