Обсуждение:Динамическое создание диалогов из макроса средствами языка RSL

5 (2)
  • Развернуть Обсуждение:Динамическое создание диалогов из макроса средствами языка RSL ( Обсуждение примера  04.03.2010 21:17 )
    5(1)
    Вашему вниманию представлена библиотека, которая позволяет создавать диалоги и меню во время выполнения программы и сразу же их запускать.
    Реализована библиотека на базе класса TStream + формат lbr-файла.

    В архиве сама библиотека ldmklbr.mac и примеры создания экранных ресурсов tstmklbr.mac

    Успехов!


    Посмотреть пример
    >> Ответить
    • Развернуть Ого, даже в вин-интерфейсе работает, хоть и кривовато. ( Ltybc  05.03.2010 16:18 )
      5(1)
      Жалко только что сам файл lbr все равно создается.
      >> Ответить
    • Развернуть Динамическое создание диалогов ( krupennikov  05.03.2010 17:51 )
      5(1)
      На самом деле гораздо интереснее было бы просто иметь доступ к свойствам ресурсов, чтобы во время исполнения программы была бы возможность управлять, например, цветом полей, или маской ввода, да хотя бы чтоб текст можно было поменять на кнопке динамически. Отсутствие таких возможностей при работе со стандартными диалогами блокирует возможность разрабатывать свои модули, полностью укладывающиеся в стандарты интерфейса RS - нельзя, скажем, выделять набор записей в скроллинге, или к примеру работу с макетами документов на RSL не воспроизведешь, по причине отсутствия возможности выделять поля цветом. Очень часто при разработке приходится идти на серьезные упрощения по сравнению с тем, чего хотелось бы. Не говоря уже о том, что страдает внешний вид программы, а вместе с ним и интуитивность интерфейса для пользователей. Но пожалуй еще сильнее мешает отсутствие такой возможности как горизонтальная прокрутка диалоговых панелей. То есть сделать то ее конечно можно, но для этого нужно так извращаться, что в более-менее массовой разработке такие способы применять не будешь. А ширины экрана катастрофически не хватает, приходится делать по горячим клавишам переключение вида скроллинга, заменяя выводимые столбцы, но это для пользователей не очень-то удобно.
      >> Ответить
      • Развернуть Добавил меню ( LDmitry  09.03.2010 14:25 )
        5(1)
        Полностью согласен! Но к сожалению нам никогда не увидеть(для консоли) того, что здесь было написано и это печально. Здесь даже дело не в лени разработчика, а в том, что изначально он не ставил перед собой такие задачи при работе с экранным интерфейсом. Предполагалось дать возможность посмотреть поля записи, да формочки ввода для выпуска отчёта и ВСЁ! Никто и не мог предположить, что RSL превратится в довольно-таки мощную среду разработки приложений для RS-Bank'a. На сегодня время уже упущенно и нагонять его никто не будет, работает же!

        Да вообщем-то цель создания этой библиотеки была совсем другая - иметь возможность программно формировать файл ресурсов. Как пример, формирование диалога или меню с учётом прав пользователя и т.д. и т.п.

        >> Ответить
    • Развернуть Где найти описание структуры Lbr-файла? ( RevinPA  30.08.2011 11:36 )
      5(1)
      Прекрасная библиотека, начали ее активно использовать. Подскажите где найти описание структуры Lbr-файла?
      >> Ответить
      • Развернуть Описания библиотеки нет! ( LDmitry  31.08.2011 10:31 )
        5(1)
        Даже общение с Кубриным в своё время не дало никаких результатов. У меня сложилось ощущение, что описание существовало только в коде. На мою просьбу, предоставить часть кода описывающий формат, я получил вежливый отказ. Пришлось его получать экспериментальным путём, на каждом шаге создания библиотеки, панели, различных элементов анализировать lbr-файл. С описанием можно познакомиться, если внимательно изучить код библиотеки, старался максимально сделать его прозрачным. Надо понимать, что описание, полученное экспериментальным путём, не точная копия, а работоспособный вариант. И встречный вопрос, для каких целей вы хотите использовать описание структуры файла ресурсов?
        >> Ответить
        • Развернуть Хотели немного доработать. ( RevinPA  31.08.2011 12:55 )
          5(1)
          Хотели немного доработать эту библиотеку под свои нужды, а для этого более детально разобраться что из себя представляет lbr. Собственно я уже в целом разобрался экспериментальным путём :)).
          >> Ответить
          • Развернуть Пример доработки под свои нужды, может и нам понадобится ( LDmitry  31.08.2011 13:14 )
            5(1)
            Not specified
            >> Ответить
            • Развернуть примера пока еще нет ( RevinPA  31.08.2011 13:32 )
              5(1)
              Примера пока еще нет, он в работе. Как сделаю обязательно выложу.
              >> Ответить
              • Развернуть В утилите RCE32 - создание LBR есть возможность импорта/экмпорта в XML. ( dburg  01.09.2011 11:20 )
                5(1)
                Может это вам поможет для дальнейшего изучения.

                ResLib - XML конвертор.
                Использование программы:
                resxml [/i] [/d] [/x] [/n] resfile xmlFileOrDir [resName restype]
                /i - импорт из XML-файла в библиотеку ресурсов
                /d - xmlFileOrDir содержит имя каталога, иначе - имя файла
                /x - если библиотека ресурсов существует, она не будет перезаписана. По умолчанию создается новая библиотека
                /n - не использовать для проверки XML-файла схему reslib.xsd
                /cp:code_page - можно задать кодировку, в которой будут создаваться выходные XML-файлы.
                в качестве code_page может быть указано одно из следующих значений:
                rsansi, lcansi, rsoem, lcoem, utf8, utf16le, utf16be.
                По-умолчанию используется rsoem
                >> Ответить
      • Развернуть Динамические контролы ( YuSer  06.09.2011 17:58 )
        5(2)
        Я, извиняюсь, возможно я что-то не понимаю и скажу не в тему, но зачем для работы с контролами библиотека? Разве нельзя сделать вот так, например:
        import RSForms;
        
        class (TForm) MyFormClass()
        
           InitTForm( NULL, "SimpleForm");
        
           var m_Title = "MySimpleForm";
        
           var lbMain   = TControl ("RSCmnCtl.dll:{894D1416-4B62-4AB0-B15F-6F6BC01AD101}");
           var btnClose = TControl ("RSCmnCtl.dll:{B6B64B8A-D9A8-439D-A3A0-A590B4AED762}");
        
           addHandler    ( EV_ON_LOAD, R2M(this, "OnLoad"));
           btnClose.addHandler     ( 1, R2M(this, "btnClose_OnClick"));
        
           macro btnClose_OnClick (Sender: Object)
             GetFrame.Close(0);
           end;
        
           macro OnLoad (Sender: Object, pbCancel: @Bool)
             this.MinWidth  = 8467;
             this.MinHeight = 6350;
             this.MinTrackWidth  = 8467;
             this.MinTrackHeight = 6350;
        
             this.Caption = m_Title;
        
             this.AddControl ( lbMain, "lbMain", true);
        
             lbMain.Width       = this.Width  - 100;
             lbMain.Height      = this.Height - 800;
             lbMain.Left        = 50;
             lbMain.Top         = 0;
             lbMain.AnchorType  = 3;
             lbMain.AddItem("First row");
             lbMain.AddItem("Second row");
        
             this.AddControl ( btnClose, "btnClose", true);
        
             btnClose.Top        = lbMain.Height + 100;
             btnClose.Left       = this.Width - (btnClose.Width + 100);
             btnClose.Cancel     = True;
             btnClose.AnchorType = 5;
             btnClose.Caption    = "Close";
        
           end;
        
        end;
        
        var myForm = MyFormClass();
        myForm.DoModal();
        

        GUID контрола и его модуль показываются в дизайнере на информационной панели, если в него (контрол) ткнуть мышкой. И почти все свойства и методы контрола доступны в коде для изменения.
        >> Ответить
    • Развернуть Ошибка в коде, которая не позволяет использовать длину строки выше 255 символов ( Gitarist  31.10.2018 06:56 )
      5(1)
      А если ввести длинну строки равную 256 происходит вылет.

      Для исправления нужно в
      private
      class TField

      в строке примерно 186

      lbr.Write( 0, V_INTEGER, 1 ); //?
      заменить на
      lbr.Write( int(DecPoint/255), V_INTEGER, 1 ); // Количество по 255
      >> Ответить