"Рыбный день" инспектора данных

Вопросы программирования и использования среды Lazarus.

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

"Рыбный день" инспектора данных

Сообщение Alex2013 » 30.11.2016 07:18:02

Вообщем задумал я сделать свой "инспектор данных" ( по аналогии с инспектором объектов IDE Лазаруса или дельфи ) ...
Табличка ValueListEditor вполне работает однако мне уже нужно что-то более продвинутое и в то-же время более простое чем "нативный обжект инспектор " из Лазаруса ...
Немного повозившись сделал на пробу "живую рыбу" то есть чисто функциональный макет для уяснения постановки задачи .

ИзображениеИзображение

:arrow:Исходник демки тут

В общем нужно сделать :
1 Более надежно в плане прорисовки и управления
2 Сохранять данные в виде списка строк ...
3 Доступ к данным как по имени поля так и по индексу .
4 Добавление новых полей специальными функциями с указанием типа ( Целые числа , строки , цвета, "расширенные поля"(На пример вызов по клику на "кнопку расширения возможностей" диалога с TMemo ), варианты и тд )
То есть примерно так как сделано в демке :
Код: Выделить всё
...
    procedure C2P_ADD      (N,V:String);//String
    procedure C2P_ADD_Int  (N,V:String);//Int
    procedure C2P_ADD_Float(N,V:String);//Float
    procedure C2P_ADD_Bool (N,V:String);//bool
    procedure C2P_ADD_Cbox (N,V:String);//Cbox Variant
    procedure C2P_ADD_Color(N,V:String);//Color
    procedure C2P_ADD_FName(N,V:String);//FN
    procedure C2P_ADD_Font (N,V:String);//Font
    procedure C2P_ADD_Memo (N,V:String);//Memo
...
C2P_ADD('Название',' неизвестно');
C2P_ADD_INT('X','10');
C2P_ADD_INT('Y','10');
C2P_ADD_INT('W','100');
C2P_ADD_INT('H','10');
C2P_ADD_Color('C','0');
C2P_ADD_Color('CB','255');
C2P_ADD_Cbox('Рамка','0/Круг/Квадрат');
C2P_ADD_Bool('Прозрачность(0/1)','0');
C2P_ADD_Float('Угол','0.00');
C2P_ADD_FName('Картинка','pic01.jpg');
C2P_ADD_Font('Шрифт','[Size:10][BUI:110] FN:[Arial Narrow]');
C2P_ADD_Memo('Коментарий ','1...///2...///3...');   
...
5 О типах "знает" только прорисовка и управление на уровне инспектора .
6 Читать и менять данные чаще всего будет скрипт . ( Поэтому нужно как можно меньше заморочек с типами снимаемых и записываемых данных ...Имя поля есть ? Есть ! Читаем или записываем строку по имени, а что с данными сделает скрипт это "его личное дело " )

По демке :
1 Она как бы работает ( условно досрочно ) :wink:
2 В программе нет множества ограничений и проверок (например нет проверки на ввод пустой строки)
3 Надеюсь что в реальный проект этот тип-код не войдет
Последний раз редактировалось Alex2013 10.12.2016 20:11:42, всего редактировалось 7 раз(а).
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: "Рыбный день" инспектора данных

Сообщение olegy123 » 30.11.2016 10:06:58

пробуй:
http://wiki.lazarus.freepascal.org/VirtualTreeview

но нужно разбираться..

если данные будут строится в виде зависимостей (ключ->значение) и могут иметь различные "raw" данные: то нужно задействовать XML, либо JSON.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: "Рыбный день" инспектора данных

Сообщение Alex2013 » 30.11.2016 14:28:10

Спасибо ! Посмотрю ! (Правда глядя на картинку не представляю как там можно например сделать выбор цветов с их показом )
Вообще-то были идеи нарисовать свой компонент... но очень не хочется заворачиваться со своей реализацией строки ввода ...
Хотя возможно получится "допилить напильником" ТValueListEditor или TStringGrid.
...
А вообще разумеется буду рад любым конструктивным советам.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: "Рыбный день" инспектора данных

Сообщение zub » 30.11.2016 17:13:13

>>но очень не хочется заворачиваться со своей реализацией строки ввода ...
Ты думаешь что все кто пишет компоненты вынуждены делать свою реализацию всего всего?

>>А вообще разумеется буду рад любым конструктивным советам.
1 В таком виде это не инспектор данных.
2 По контролу на "данное" очень жирно.
3 D^.Data:=NewStr(V); огребешь тут проблем
4 Древовидная структура данных?

>>по аналогии с инспектором объектов IDE Лазаруса или дельфи
Впечетлен твоими художественными вкусами - из рыбы в рыбу лепишь разноцветных квадратиков))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: "Рыбный день" инспектора данных

Сообщение Alex2013 » 30.11.2016 20:34:00

zub писал(а): В таком виде это не инспектор данных.

Согласен на 50% ( Все-же код работает ... но согласен все очень очень криво ...)
zub писал(а):2 По контролу на "данное" очень жирно.

Возможно ...
zub писал(а):3 D^.Data:=NewStr(V); огребешь тут проблем

Уже огреб! :wink: Хотя в принципе не критично ... Просто нужно следить за случаем "пустая строка" и на каждое изменение "освежать" указатель
(То есть ВСЕГДА делать DisposeStr(...) и по новой NewStr(... ) Зато память экономится... )
zub писал(а):4 Древовидная структура данных?

Пока нет но проблем не предвидится (Просто временная вставка дополнительных элементов с отступом, а в данные понятное дело ссылка на сублист )

zub писал(а):>>по аналогии с инспектором объектов IDE Лазаруса или дельфи
Впечетлен твоими художественными вкусами - из рыбы в рыбу лепишь разноцветных квадратиков))


Уел,однако ... :D Там только мемо то балды зеленый для отличия, а цвета (при выборе) показывать как-то все равно нужно ...

Зы
Между делом обнаружил две загадочные фичи :
1 Клавиатурный код точки 191 (А не 46 как в ASCI)
2 Динамическое создание дочерной формы с TMemo работает нормально только если на основной форме есть хоть один TMemo
(неважно видимый или нет ) Регистрация класса ?
Последний раз редактировалось Alex2013 30.11.2016 23:33:27, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: "Рыбный день" инспектора данных

Сообщение zub » 30.11.2016 20:51:21

>>Согласен на 50% ( Все-же код работает ... но согласен все очень очень криво ...)
Инспектор какогото набора строк.
Сама идея хранить все в строках - порочна.
>>Возможно ...
Я недооценил. не по контролу а по куче контролов))
>>Зато память экономится... )
Ну хз. поясни в каком месте? у тебя всё через одно место (строки), сам бог велел тут быть строке а не указателю

>>создание дроченой формы
Незнаю как у дроченых форм, у дочерних обычно всё ок)). Наверно создаешь както странно
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: "Рыбный день" инспектора данных

Сообщение olegy123 » 30.11.2016 23:40:51

Alex2013 писал(а):А вообще разумеется буду рад любым конструктивным советам.

http://delphigears.blogspot.com/2011/08 ... eview.html
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: "Рыбный день" инспектора данных

Сообщение Alex2013 » 30.11.2016 23:53:58

1
поясни в каком месте
NewStr выделяет память под текущий размер строки ...
Да String это сейчас как бы самостоятельно делает ... Но черт его знает что происходит в рекорде тем более в распределяемом динамически ...
Перестраховался...
2
Инспектор какого-то набора строк.

Это внешний формат (в скриптах нет указателей ( как минимум по умолчанию ) )
Но с полем DATA:Pointer можно делать что угодно .
3
Наверно создаешь както странно...

M:=TMemo.Create ( Tmp_Form );
Что странного ?
Причем достаточно просто создать даже не вставляя в форму чтобы влезло исключение после Tmp_Form.free ...
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: "Рыбный день" инспектора данных

Сообщение olegy123 » 01.12.2016 01:22:02

Alex2013 писал(а):1
поясни в каком месте
NewStr выделяет память под текущий размер строки ...
Да String это сейчас как бы самостоятельно делает ... Но черт его знает что происходит в рекорде тем более в распределяемом динамически ...
Перестраховался...

String - подсчитывает кол-во ссылок на эту переменную если кл-во ссылок=0 String удаляется..

NewStr makes a copy of the string S on the heap, and returns a pointer to this copy. If the string is empty then Nil is returned.
NewStr создает в куче стринговое значение ..которое нужно удалять..
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: "Рыбный день" инспектора данных

Сообщение zub » 01.12.2016 08:37:04

M:=TMemo.Create ( Tmp_Form );
Что странного ?
Причем достаточно просто создать даже не вставляя в форму чтобы влезло исключение после Tmp_Form.free ...

Да хоть что странное, создаешь та ты не одной строчкой и используешь потом тоже както.
Исключение - типичная кривизна кода

Добавлено спустя 1 час 45 минут 14 секунд:
>>NewStr выделяет память под текущий размер строки ...
Она всегда выделена под размер. Ты дублируешь строки, наоборот тратишь память)) но в данном случае это экономия на спичках
>>Да String это сейчас как бы самостоятельно делает ... Но черт его знает что происходит в рекорде тем более в распределяемом динамически ...
В смысле черт его знает?)) Были какието проблемы?
>>Перестраховался...
Скорее натер пули чесноком и приготовился стрелять себе в ноги))

>>Но с полем DATA:Pointer можно делать что угодно .
Есть гораздо более простые пути чтобы делать всё что угодно. Только наверно чтоб их понять надо съесть всех собак DATA:Pointer

>>А вообще разумеется буду рад любым конструктивным советам.
Делай контрол, а не формошлепай на форме.
Делай динамическую регистрацию отображаемых "типов", их редакторов и прочего. Иначе как не крутись получится монолитная какаха
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: "Рыбный день" инспектора данных

Сообщение Alex2013 » 01.12.2016 11:50:50

zub писал(а):Делай контрол, а не формошлепай на форме.
Делай динамическую регистрацию отображаемых "типов", их редакторов и прочего. Иначе как не крутись получится монолитная какаха

Я так и думаю сделать... но есть затык в виде строки ввода внутри ячейки ...
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: "Рыбный день" инспектора данных

Сообщение zub » 01.12.2016 11:54:27

>>но есть затык в виде строки ввода внутри ячейки ...
Создашь TEdit поверх своего контрола
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: "Рыбный день" инспектора данных

Сообщение Alex2013 » 07.07.2017 19:03:19

И так добрался я (по совету "вещего Олега" ) до "Виртуального Дерева" (то бишь VirtualTreeView)...
http://wiki.lazarus.freepascal.org/VirtualTreeview

ИзображениеИзображение
:arrow: Третий вариант тестового проекта ...
Как понятно из скриншота редактор полей пока внешний (по двойному клику )

Вопросы знатокам :
1 Как максимально просто подключить "встроенный" редактор полей ?
2 Как сделать в VirtualTreeView поля с дополнительным элементом управления ?
(грубо говоря кнопкой, картинкой, панелькой выбора цвета и т.д. )
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: "Рыбный день" инспектора данных

Сообщение Alex2013 » 12.07.2017 00:53:15

ИзображениеИзображение
Выкладываю очередной результат исследования
(Просто думаю это будет самая простая серия примеров для "разбора полетов" с VirtualTree )
:arrow: vt_иследование_04.7z
Первый вопрос почти снят .
Но второй пока висит ... (То есть с комбо_боксом более менее понятно но мне нужен не только он )
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: "Рыбный день" инспектора данных

Сообщение olegy123 » 12.07.2017 10:07:35

Alex2013 писал(а):Но второй пока висит ... (То есть с комбо_боксом более менее понятно но мне нужен не только он )

точно также как с TEdit/TComboBox.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru