Помогите. OnDrawColumnCell сразу не отрисовывает грид

Модераторы: alexs, Модераторы

Помогите. OnDrawColumnCell сразу не отрисовывает грид

Сообщение veb86 » 05.06.2025 14:48:45

Добрый день. Сразу скажу я не программист, это больше хобби пишу программу для рабочей автоматизации. Столкнулся с проблемой что при первом запуске TrxDBGRID не применяет форматирование, которое описано в событии OnDrawColumnCell. Зато при смене фокуса между строчками сразу все становится видно. Что делать незнаю. Прикладываю полный код программы, она только начата. По сути там нечего смотреть. Подскажите как это починить, пожалуйста. Не охота вешать кнопку, которая будет принудительно заставлять применится формтированию.

Библиотека sqlite3.dll, не влазиет в архив(((
Вложения
CALC.zip
(59.08 КБ) Скачиваний: 23
veb86
новенький
 
Сообщения: 65
Зарегистрирован: 16.03.2016 12:58:35

Re: Помогите. OnDrawColumnCell сразу не отрисовывает грид

Сообщение alexs » 05.06.2025 15:15:48

1. Отрисовка самого грида 1-й раз происходит ДО вызова TframeSynchDevice(CurrentFrame).Activate; - по факту он рисуется когда происходит расположение фрейма с ним на форме.
2. Зачем вообще использовать свою отрисовку? Может достаточно метода RxDBGrid.OnGetCellProps? На мой взгляд он покрывает 90% случаев для управления цветом и формой текста в ячейке и фоном ячейки. И также - его назначить во время разработки - зачем делать всё в рантайме - также гораздо сложнее.
2. Зачем вообще такие сложности по работе с данными (не визуальаня часть)? зачем всё создавать в динамике? Почему нельзя заранее создать все наборы данных с их полями? Насчёт мем-таблиц тоже не уверен - может можно просто SQLQuery обойтись? Зачем лишний раз данные из одного компонента гонять в другой?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Помогите. OnDrawColumnCell сразу не отрисовывает грид

Сообщение veb86 » 05.06.2025 15:33:50

Я слабый программист.
по 3-ему вопросу: В свое время примером мне помог Ed Doc из телеги, ну и посоветовал Ваш компонент. Он сказал что без memdataset нелзя работать. Логику я примерно понял и меня она устроила. Тем более в планах проводить большие вычисления с данными внутри полей, и нахождение таблиц внутри памяти, должно наверное дать ускорение при обработке данных. Но вообще мне надо хотя бы медленное решение до ума довести. А это в моем случае долго. И я постоянно застреваю в разработке на несколько дней)
2-й вопрос: Я попробую, но мне в будущем надо будет внутри ячеек рисовать кнопки и выподающие списки. Я правда пока незнаю как это делать. Буду читать, мучить chatGPT и прочее

У меня не получилось принудительно вызвать событие что бы оно перерисовало grid. Я начал обращаться к ИИ, то что я выслал это итог его попыток принудительно запустить событие OnDrawColumnCell
veb86
новенький
 
Сообщения: 65
Зарегистрирован: 16.03.2016 12:58:35

Re: Помогите. OnDrawColumnCell сразу не отрисовывает грид

Сообщение alexs » 05.06.2025 16:44:02

Кнопки внутри ячеек и выпадающие списки уже есть. Просто включить. На кнопки можно повесить свои обработчики.
А по вопросу данных - SQLQuery это и есть данные, полученные с помощью запроса находящиеся в памяти в вашей программы. А так ещё добавляется ненужное копирование. И ещё плюсик SQLQuery - с помощью его легко делается редактирование этих данных - достаточно определить запросы на изменение данных.
Основной посыл моего ответа был в том, что не нажно делать лишний код - обычно компоненты уже предоставляют требуемый вам функционал из коробки. Ну можно с помошью обработчиков чуть чуть переопределить поведение.
А в вашем примере всё как будет из мира питона или ещё чего подобноно - в котором никто не умеет нормально с БД общаться и приходится кучу обвязок писать чтобы оно хоть как-то шевелилось.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Помогите. OnDrawColumnCell сразу не отрисовывает грид

Сообщение veb86 » 06.06.2025 09:42:32

А по вопросу данных - SQLQuery это и есть данные, полученные с помощью запроса находящиеся в памяти в вашей программы. А так ещё добавляется ненужное копирование. И ещё плюсик SQLQuery - с помощью его легко делается редактирование этих данных - достаточно определить запросы на изменение данных.
Основной посыл моего ответа был в том, что не нажно делать лишний код - обычно компоненты уже предоставляют требуемый вам функционал из коробки. Ну можно с помошью обработчиков чуть чуть переопределить поведение.
А в вашем примере всё как будет из мира питона или ещё чего подобноно - в котором никто не умеет нормально с БД общаться и приходится кучу обвязок писать чтобы оно хоть как-то шевелилось.

Когда я обращался за помощью в группу Lazarus в телеге, я обратился туда с этим примером https://devlaz.ru/lazarus_sqlite/ . Моих знананий нехватало, что бы сделать так: при изменении ячейки в гриде (мне нужно редактировать прям в gride, без отдельных форм редактирования), внести изменения в таблицу sql. Я прям жутко тупил. Пример порвали в клочья, говоря о том что это неправильно и что нужен dataset для нормальной работы. Я попросил простой пример что бы увидить как это делать правильно для простых задачах. Получил пример примерно такого взаимодействия с БД, как вы видите. После Ваших слов я теперь вообще перестал понимать, для чего тогда вообще нужен memdataset?

Может достаточно метода RxDBGrid.OnGetCellProps?

Переписал код на данный метод, но так и не получилось решить проблему, все равно перерисовка происходит только при смене фокуса. Думаю повешу на данном этапе кнопку, при нажатии которой будет происходить применения форматирования в grid, как временное решение).

Вы уж извините, я буду иногда приставать с вопросами. Сильно не серчайте, если они будут глупами.
veb86
новенький
 
Сообщения: 65
Зарегистрирован: 16.03.2016 12:58:35

Re: Помогите. OnDrawColumnCell сразу не отрисовывает грид

Сообщение alexs » 09.06.2025 12:01:09

Вот простейший пример с созданием фрейма в рантайме - минимум действий. Всё визуально. Код только на создание фрейма и расскраску.

PS
В базе объекты надо бы более осмысленно называть. И про первичные ключи не забывать у таблиц. И типы данных тоже уточнять можно. SQLlite это конечно проглатывает. Но более "настоящие" СУБД могут активно сказать ФИ.
Вложения
test1.zip
(101.62 КБ) Скачиваний: 10
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4063
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru