|
|
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток всем! Есть приложение (клиент) и сервер MS SQL (сервер). Завис над проблемой, просьба поделится любыми идеями по её поводу, пожалуйста. Суть: 1. Есть поля в дереве (TcxDBTreeList), которые в runtime создаются, на основании данных в БД. Назовём этот набор полей словом "макет". 2. Необходимо для некоторых полей макета (в БД можно добавить всё что угодно, при необходимости) нужно в runtime добавить обработчики определённых событий. Причём код обработчика зависит от наименования поля. Также он зависит от значения других полей. Например, если колонка "A" = 0, то колонку "B" нужно покрасить в красный цвет. Даже если я для каждого поля в коде (клиента) напишу свои процедуры (обработчик событий) - как их корректно "прилепить" к конкретным полям дерева? Пока вижу только вариант хардкода - проверять названием поля (вот и вопрос ещё- а где именно?) и если оно соответствует нужному полю - присваивать обработчику нужного события этого поля - имя конкретной процедуры. Но может есть идеи по поводу более красивого решения? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 17:37 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Вариант 1. Возвращать одним запросом настройку колонок, а другим данные. Если компоненты доступа поддерживают несколько датасетов, то можно и в одном Очень ограниченный вариант, в программе нужно реализовать несколько вариантов обработок, корые будут назначаться в зависимости от настроек. Вариант 2 Загнать форму со всеми компонентами в базу, создавать её динамически и крутить код формы скриптом. В скрипте можно реализовать любую отрисовку. Довольно сложный путь. Не приходится рассчитывать на быструю работу клиента. Но в настольных DB приложениях это обычно и не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 20:03 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
DimaBr, В запросе "одном", как раз и получаю список полей, для дерева, из БД. О данных никакой речи не идёт. Это, есс-но, отдельный запрос в отдельный датасет и его привязка к дереву есть DesignTime. Вопрос в другом: как в RunTime к полю дерева привязать нужный обработчик события, например, OnGetDisplayText. Суть задачи - для некоторых полей или их скрывать, или менять шрифт, или красить фон цветом и т.д. Т.е. даже если есть некоторые нарисованные поля DesignTime, я при выборе "макета" всё существующие удаляю и генерирую новые на основании списка полей в БД. Так вот у всех новых, созданных, полей дерева названия тоже новые. Вот сейчас пробую при создании присваивать нужные названия полям (дерева в клиенте) и потом, проверяя их имена, задавать хардкодом нужные обработчики события OnGetDisplayText (мне нужно тупо обнулить текст), дабы не плодить в БД отдельные поля, которые будут пустыми, в зависимости от логики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 20:26 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
DimaBrВариант 1. Возвращать одним запросом настройку колонок, а другим данные. Если компоненты доступа поддерживают несколько датасетов, то можно и в одном Очень ограниченный вариант, в программе нужно реализовать несколько вариантов обработок, корые будут назначаться в зависимости от настроек. Вариант 2 Загнать форму со всеми компонентами в базу, создавать её динамически и крутить код формы скриптом. В скрипте можно реализовать любую отрисовку. Довольно сложный путь. Не приходится рассчитывать на быструю работу клиента. Но в настольных DB приложениях это обычно и не нужно. А вариант 2 не подходит, ибо форма уже есть одна, статичная, в ней меняется только список полей (точнее создаётся динамически) дерева TcxDBTreeList. И список его полей таки и хранится в БД. Вот только как обработчики событий в БД сохранить и RunTime восстановить - это вопрос. p.s. Под хранением "формы в БД" - имелся в виду *.dfm? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 20:29 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
DimaBrВариант 1. Очень ограниченный вариант, в программе нужно реализовать несколько вариантов обработок, корые будут назначаться в зависимости Вот я о том в начальном посте и писал - что только хардкод. Не хватает "генерации" кода из текста , из строки или потока, RunTime, в Delphi. Но, у меня на каждый "макет" (набор полей) свой класс есть. Может как-то можно через GetInterface дёрнуть что-то и получить нужное? Если, есс-но, таковой реализовать. ООП меня спасёт? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 20:37 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Romka-Fes Не хватает "генерации" кода из текста , из строки или потока, RunTime, в Delphi. Но, у меня на каждый "макет" (набор полей) свой класс есть. Может как-то можно через GetInterface дёрнуть что-то и получить нужное? Если, есс-но, таковой реализовать. ООП меня спасёт? ))) Всего хватает. Из набора условий создается скрипт, скрипт запускается в едином OnGetCellParams или как там оно назвается, и возвращает цвет/фон/стиль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 20:50 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Romka-FesВопрос в другом: как в RunTime к полю дерева привязать нужный обработчик события, например, OnGetDisplayText. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 20:57 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
DimaBr, таки только хардкод. А если тянуть надо код из бд...? я же не могу сделать Код: pascal 1. 2. 3. 4. 5. Или есть решения таковой проблемы, известные? Пока, как идиотизм, вижу вариант сохранения Blob'a с BPL в БД и загрузки из него пакета с вызовом из него метода через Application.MainForm.GetInterface ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:07 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
asviridenkovRomka-Fes Не хватает "генерации" кода из текста , из строки или потока, RunTime, в Delphi. Но, у меня на каждый "макет" (набор полей) свой класс есть. Может как-то можно через GetInterface дёрнуть что-то и получить нужное? Если, есс-но, таковой реализовать. ООП меня спасёт? ))) Всего хватает. Из набора условий создается скрипт, скрипт запускается в едином OnGetCellParams или как там оно назвается, и возвращает цвет/фон/стиль Поделитесь деталями реализации, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:15 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
asviridenkovRomka-Fes Не хватает "генерации" кода из текста , из строки или потока, RunTime, в Delphi. Но, у меня на каждый "макет" (набор полей) свой класс есть. Может как-то можно через GetInterface дёрнуть что-то и получить нужное? Если, есс-но, таковой реализовать. ООП меня спасёт? ))) Всего хватает. Из набора условий создается скрипт, скрипт запускается в едином OnGetCellParams или как там оно назвается, и возвращает цвет/фон/стиль что есть "скрипт", в данном контексте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:17 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Romka-FesПоделитесь деталями реализации, пожалуйста. А что здесь может быть непонятно? Например делаем табличку для пользователя Поле Условие Закрасить Цвет Фон State =3 NAME green Преобразуется в if State=3 then Colors['NAME'] := 'green'; Выполняем скрипт давая ему на вход значение полей и получаем цвет/фон для ячеек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:19 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Romka-Fesasviridenkovпропущено... Всего хватает. Из набора условий создается скрипт, скрипт запускается в едином OnGetCellParams или как там оно назвается, и возвращает цвет/фон/стиль что есть "скрипт", в данном контексте? Текст выполняемый в интерпретаторе скриптов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:20 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
asviridenkovRomka-Fesпропущено... что есть "скрипт", в данном контексте? Текст выполняемый в интерпретаторе скриптов в каком таком? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:26 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
asviridenkovRomka-FesПоделитесь деталями реализации, пожалуйста. А что здесь может быть непонятно? Например делаем табличку для пользователя Поле Условие Закрасить Цвет Фон State =3 NAME green Преобразуется в if State=3 then Colors['NAME'] := 'green'; Выполняем скрипт давая ему на вход значение полей и получаем цвет/фон для ячеек я цвет могу получить из без скрипта. Вопрос - как привязать это к обработчику конкретного события конкретного объекта формы. В данному случае - к полю дерева TcxDBTreeList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:28 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Romka-Fesasviridenkovпропущено... Текст выполняемый в интерпретаторе скриптов в каком таком? Например в FastScript. Но это мой Вариант 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:32 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
DimaBr, Поэтому скрипты тут не помогут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:35 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Romka-FesDimaBr, Поэтому скрипты тут не помогут. Тут уже ничего не поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:36 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
DimaBr, Тут возможно, или явно, надо лезть в RTTI, но я тут пока не в теме, вот почему и спрашиваю. Мне бы дёрнуть интерфейс некий, передав параметром имя поля, и получить из него указать не процедуру, которую я смогу динамически присвоить обработчику события вновь созданного поля. Это реально? Или я фантазирую? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:39 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
asviridenkovRomka-FesDimaBr, Поэтому скрипты тут не помогут. Тут уже ничего не поможет Т.е., по Вашему, без использования скриптов, задача не решаема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:46 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:52 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Romka-Fesasviridenkovпропущено... Тут уже ничего не поможет Т.е., по Вашему, без использования скриптов, задача не решаема? Задача решаема массой способов, в том числе и через RTTI, причем любой способ требует от силы пол часа. Но вариант решения через скрипты позволяет заложить максимальную универсальность, т.к. можно формулировать сколь угодно сложные условия, интерпретатору выражений без разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:54 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
asviridenkovRomka-FesПоделитесь деталями реализации, пожалуйста. А что здесь может быть непонятно? Например делаем табличку для пользователя Поле Условие Закрасить Цвет Фон State =3 NAME green Преобразуется в if State=3 then Colors['NAME'] := 'green'; Выполняем скрипт давая ему на вход значение полей и получаем цвет/фон для ячеек А в целом - это маразм. Т.е. не имеет отношения к сути вопроса. Чукча писатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 21:55 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
DimaBr, А если методов DoDrawCell много, у разных полей, что именно найдёт Find? Учитывая что поля создаются RunTime. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 22:51 |
|
||
|
TcxDBTreeList: привязать обработчики определённых событий Runtime
|
|||
|---|---|---|---|
|
#18+
Зачем много методов ? Что бы отличить одну колонку от другой, можно передать в скрипт рисуемую колонку. Скрипт, задающий поведение отрисовки храниться в базе. Его можно поменять не меняя исходник программы (без перекомпиляции) В примере скрипт висит на ColumnCustomDraw, это самый простой вариант, можно повесить на View/Tree CustomDraw Следующий уровень - назначить скриптом каждой колонке свой скриптовый обработчик Следующий уровень - перенеси весь код управления формой в скрипт Следующий уровень - перенести саму форму в базу Итого, в конце. Есть ядро, которое умеет читать с базы данные, строить по ним форму и выполнять код формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2019, 23:18 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39818064&tid=2039449]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
401ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 204ms |
| total: | 720ms |

| 0 / 0 |
