Обсуждение:Динамическое создание диалогов из макроса средствами языка 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. На сегодня время уже упущенно и нагонять его никто не будет, работает же!
Да вообщем-то цель создания этой библиотеки была совсем другая - иметь возможность программно формировать файл ресурсов. Как пример, формирование диалога или меню с учётом прав пользователя и т.д. и т.п.
>> ОтветитьА горизонтальную прокрутку я, кстати, написал таки ( krupennikov 31.08.2011 11:28 )
5(1)Правда, для этого приходится стеком открывать диалоговые панели. Но работает нормально, зрительно совершенно неотличимо от прокрутки в системных модулях.
>> ОтветитьЗначит труды не напрасны и это радует! ( LDmitry 31.08.2011 13:17 )
5(1)Not specified
>> Ответить
Где найти описание структуры 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
>> Ответить