Динамические панели, скроллинги и меню. С картинками в цвете и тд.

Автор:Gitarist
Дата:03.03.2022
Просмотров:2173
Скачиваний:603
Оценка:, Оценок - 2
Скачать (zip-файл; Размер - 322021)

Обсудить в форуме

Описание

Обновлено: 23.06.2023
Самое главное, что добавлены вычисляемые поля для скроллингов на основе массивов.

Обновлено: 09.01.2023
Версия для RS-Connect. Скроллинги из массива можно сохранить позицию строки.

Обновлено: 06.10.2022
1. Версия для RS-Connect
2. Доработки, касаемые всех версий.

Обновлено 03.10.2022
1. Теперь можно в диалоговой панели нажать Shift-F12 для просмотра параметров диалоговой панели (имена компонентов, значения ДО и ПОСЛЕ, положения на панели, размеры, тип данных и т.д.). В планах реализовать, чтобы можно было изменять значения прям там и тестировать (не меняя код), как будет выглядеть панель.
2. Теперь можно не задавать имена панелей (8 символов, которое). Ошибки не будет.

Обновлено 05.09.2022
Добавил класс TStudiaMsLs, который предназначен для построения скроллингов выбора (одиночного или множественного) на основе:
1. Таблицы TBFile. AddTableSource
2. Массива. AddArrSource
3. Таблицы и массива. AddTableSource и AddArrSource сразу.
Обновил btrdata.mac, взяв из дистрибутива RS-Bank V5.

Обновлено 31.08.2022
Добавил примеры для 6-ки.
Добавил новый функционал:
1. Переключение между вкладками в многостраничной панели по Ctrl-Tab.
2. Возможность блокировать вкладку. Например нужно пока не сохраним запись, не позволять переходить на другие вкладки.
3. Теперь поддерживают свойства полей (Field) SetFlagAnsiString(true), SetFlagPassword(true), SetFlagNoEdge(true).
4. Добавил новые значения для x0_ (AddField, AddLabel):
//, x0_ - расположение слева. если передать null, то поле расположено будет на предыдущем компоненте (справа) и +1
//, x0_ - расположение слева. если передать -1, то поле расположено будет на предыдущем компоненте (слева)
//, x0_ - расположение слева. если передать "-1" (как текст), то поле расположено будет после предыдущего компонента (справа) и - указаное число
//, x0_ - расположение слева. если передать "+1" (как текст), то поле расположено будет после предыдущего компонента (справа) и + указаное число
//, dx_ - ширина. если передать null - то ширина подберется автоматически, если передать отрицательное значение, то от максимальной ширины отнимется переданное значение

Так как все переходим на 6 версию, то представляю версию studia_scroll_manager.mac для RS-Bank V6 и RS-Connect, находится в папке V6.

3 макроса положить в папку ..\mac:
btrdata.mac - здесь его выкладывали в примерах. (В V5 в дистрибутиве есть в ..\Mac\Common\. Так что его в V5 подкладывать не нужно!)
ldmklbr.mac - здесь его выкладывали в примерах, но я исправил ошибки и доработал под версию 2.
studia_scroll_manager.mac - Самый главный макрос, с помощью которого можно легко создавать скроллинги, панели и меню:

внизу макроса "studia_scroll_manager.mac" описаны все методы, которые пригодятся для выполнения задач, связанных с пользовательским интерфейсом.

Источниками скроллинга могут быть:
1. Таблица.
2. Массив.
3. TKrnMdbRecordset (Из-за кривой работы этого класса, а именно: нет copy, автоинкрементное поле не является таковым, нужно акуратно использовать). (В 6 версии не работает).
4. RSD (SQL наше все):-)

Панели можно в коде создавать многостраничные, а также встраивать несколько скроллингов на одну панель (требуется нарисовать рамки, в которые будут встраиваться скроллинги).

Панели рисуются вообще легко. Не надо думать о том на какой строке находится тот или иной компонент.

Также есть такой тип как V_PICTURE, который позволяет отображать картинки (Даже хранящиеся в памяти, т.е. можно в таблице хранить изображение и загружать в это поле не сохраняя перед этим на диск). Пример есть в классе TStudiaConstant методы GetIconCalendarMem и GetIconCalendar2Mem :

var ImgObj : TImage = TImage();
ImgObj.ReStore(TStudiaConstant().GetIconCalendar2Mem().Stream);
var StudiaScrollManager = TStudiaScrollManager();
StudiaScrollManager.ObjPageControl.DestroyListPageControl();
StudiaScrollManager.ObjPageControl.AddListPageControl("Тест картинки", "F9 Сохранить Esc Выход", 30, 15, false, null, true, 0, 1, 0, 0);
StudiaScrollManager.ObjPageControl.SetUniNum("DLGTEST");
StudiaScrollManager.ObjPageControl.CurrentPageControl().AddListPanel("СТРАНИЦА 1", "Я всплывающая подсказка для страницы 1");
StudiaScrollManager.ObjPageControl.CurrentPageControl().CurrentPanel().SetPanelLeftAndRightAndTopAndBottom(2, 2, 2, 1);
StudiaScrollManager.ObjPageControl.CurrentPageControl().CurrentPanel().SetBorderLine(2);
StudiaScrollManager.ObjPageControl.CurrentPageControl().CurrentPanel().AddField(null, null, 2, true, TStudiaDlgDataType.V_PICTURE, "ImageMain", 25, 12, null, null, false, null).SetValue(ImgObj);
ImgObj = null;
ImgObj.ReStore(TStudiaConstant().GetIconCalendarMem().Stream);
StudiaScrollManager.ObjPageControl.CurrentPageControl().AddListPanel("СТРАНИЦА 2", "Я всплывающая подсказка для страницы 2");
StudiaScrollManager.ObjPageControl.CurrentPageControl().CurrentPanel().SetPanelLeftAndRightAndTopAndBottom(2, 2, 2, 1);
StudiaScrollManager.ObjPageControl.CurrentPageControl().CurrentPanel().SetBorderLine(2);
StudiaScrollManager.ObjPageControl.CurrentPageControl().CurrentPanel().AddField(null, null, 2, true, TStudiaDlgDataType.V_PICTURE, "ImageMain2", 25, 12, null, null, false, null).SetValue(ImgObj);
StudiaScrollManager.ObjPageControl.InitDialog();
StudiaScrollManager.ObjPageControl.Run(0);

В Панелях и скроллингах в полях с типом V_DATE и если разрешено редактирование этого поля/таблицы, то можно вызвать календарь (для удобства заполнения).

Исправлена ошибка (системного скроллинга), если не задавать все поля и скроллинг в режиме редактирования, то те поля, которые не заданы обнуляются и это очень не весело. У меня это исправлено.

Очень легко раскрашивать скроллинги и назначать иконки. Даже в скроллинги встроенные в панель.

Нажав в скроллинге Shift-F12 - можно посмотреть (в зависимости от источника):
Таблица: Поля таблицы (Выбрав этот пункт и в появившемся скроллинге нажав F7 можно просмотреть поля и ключи (как в Оболочка RSL)), Поля записи.
Массив: Поля записи.
RSD: Поля записи.

Нажав Ctrl-Shift-F12 - выделенные записи можно направить в отдельный скроллинг, для удобства просмотра.

Нажав Shift-F1 (при назначенной справке в коде) открывает страницу справки. Поясню: В скроллинге системно нельзя назначить страницу справки, как в панели.

Также при небольших правках можно использовать этот макрос и в RS-Connect (я уже во всю использую. Используя источник "Массив". Да именно массив. Потому, что веб интерфейс собирается по массиву).

Очень много возможностей, описывать можно очень долго...

В качестве примера будет функционал для транспорта КД в XML и загрузка этого файла на дистрибутив:
Файлы из папки Пример скинуть также в папку ..\mac:
studia_transport_crd_export_import_run.mac - Запускной файл.
studia_tools_transport_crd.mac - Инструмент для Импорта/Экспорта КД.
studia_transport_crd_run.mac - Интерфейсная часть.

Вверху макросов все описано что да как.

Текст примера

 Все в архиве. Но например простой скроллинг по открытым счетам с балансовым счетом 40702:

import "..\\mac\\studia_scroll_manager.mac";

private class TStudiaUserFunc()
	macro Func_Enter(ob, parm1)
		var T_AccountID = ob.CurRecord.(parm1);
		if (T_AccountID <= 0)
			return;
		end;

		MsgBox(ob.CurRecord.rec.Account);
	end;
end;

var StudiaUserFunc = TStudiaUserFunc();

var StudiaScrollManager = TStudiaScrollManager();
StudiaScrollManager.ObjScrolling.DestroyListObjScrolling();
StudiaScrollManager.ObjScrolling.AddListObjScrolling();

StudiaScrollManager.ObjScrolling.CurrentScrolling().StudiaInitTBFile("account.dbt", "R", 3, null, "bank.def");
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListNitroValue("Open_Close", 0, "", null); // Фильтр по ключу

StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListConditionValue("Balance", 0, "40702", null); // Условия

StudiaScrollManager.ObjScrolling.CurrentScrolling().InitListGetX("Open_Close,", "Open_Close,^Sort,ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ"); // Чтобы Ctrl-PageDown переходил в конец

// SHIFT-F1 - Вызов справки
StudiaScrollManager.ObjScrolling.CurrentScrolling().SetHelpPage("mvodb.chm", 1993);

StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("Account"    , "Лицевой счет" ,15,2,0,0,0,0);
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("Balance"    , "Бал.счет"     ,5,2,0,0,0,0);

StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("R0"         , "Остаток"     ,15,2,2,0,0,0);
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("PlanRest"   , "Планируемый остаток" ,15,2,2,0,0,0);
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("Client"     , "Код клиента"    ,10,2,0,0,0,0);
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("NameAccount"     , "Название счета"    ,10,2,0,0,0,0);
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("AccountID"  , "AccountID"    ,0 ,2,0,0,0,0);
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListColInfo("Open_Close"  , "Open_Close"    ,0 ,2,0,0,0,0);

StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListOperation(DLG_KEY, 13, -1 , StudiaUserFunc, "Func_Enter", CM_IGNORE, "AccountID");

StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListFieldColor(0, 0, 2, 0, "R0", 3, $0, null, "");  // Остаток больше 0 выделяем зеленым цветом всю строку
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListFieldColor(0, 0, 7, 12, "R0", 2, $0, null, ""); // Остаток меньше 0 выделяем красным цветом всю строку
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListFieldColor(0, 0, 0, 0, "R0", 0, $0, null, "Account");  // Остаток равным 0 выделяем желтым цветом поле Лицевой счет
StudiaScrollManager.ObjScrolling.CurrentScrolling().AddListFieldIcon(3053, 2, "R0", 0, $0, null, "R0");  // Остаток равным 0 устанавливаем иконку для поля Остаток

StudiaScrollManager.ObjScrolling.CurrentScrolling().ShowScroll("Список открытых лицевых счетов", "Esc~ Выход", true, 0,0,0,0);