Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


четверг, 18 декабря 2008 г.

Мысли навеянные Delphi-кодингом 2. JCL+JVCL.

Недавно мне нужно было написать по учёбе пару программок.

С одной домашней работой меня очень выручила библиотека JCL, в частности класс JclExprEval.TExpressionCompiler, позволяющий парсить и вычислять значения математических функций. Хотя, если бы этого парсера не было, я бы просто зашил некоторое количество функций прямо в программу. В конце концов, это же просто очередная программка для университета. Но благодаря JCL, в программку можно ввести любую одномерную функции и получить её график.

Кстати, тот же Lazy Delphi Builder не состоялся бы без JCL. 

А у TJvDbGrid есть вкусное свойство, позволяющее назначать каждой колонке свой редактор.

Это о плюсах свободных библиотек.

А теперь о минусах.

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

Например, при написании вышеупомянутой программке, я с удивлением выяснил, что JclExprEval не умеет обрабатывать возведение в степень. При этом классы написаны так, что ключевые элементы спрятаны в private и написав наследника нужный функционал не добавить. В общем, я скопировал JclExprEval в папку с проектом и добавил нужную операцию.

А сейчас пишу другую домашку, и для неё мне нужен хороший бесплатный DbGrid и возможность экспорта данных в html, csv. Я помню, что в JVCL было несколько гридов и какие-то компоненты умеющие экспортировать данные. Я опущу тот момент, что мне пришлось основательно повозиться, чтобы установить свежий snapshot из svn\trunk. Скажу лишь, что в поисках компоненты для экспорта я снова столкнулся с тем, что для универсально использования некоторые компоненты вообще неприспособленны. Зато бесплатно, гы-гы.

Маленький список проблем:

TJvgExportHTML вообще ничего не делает. Ибо метода Execute у него просто нет. Судя по записям в баг-трекере, это нормальное явление для компонент из пакета Globus, ибо “часть компонент находится в альфа стадии”.

TJvDBGridHTMLExport экспортирует данные только в файл и при этом теряет unicode символы.

В который раз сталкиваюсь с тем, что самому написать было бы быстрее, чем искать подходящее решение на стороне. =) Использование сторонних библиотек - это сложнее чем делегирование заданий типа "широкоформатная печать спб", тут самому много чего делать приходится.

10 комментариев:

  1. Спору нет, JVCL гриды очень хороши... для бесплатных. Но стоит только попользоваться, например, DevExpress'овскими и как будто переходишь на новый уровень.

    ОтветитьУдалить
  2. Не нашел как тут подписаться на комменты.

    ОтветитьУдалить
  3. мысли навеяные статьёй ))
    как поменялось все, теперь для написания домашек используют сторонние компоненты, упрощая программу...
    а еще лет 6 назад мы делали домашки на паскале и борладндовском си, реализуя все что необходимо сами. просто не откуда было все это взять ))
    и только в курсовых, мы могли себе позволить использовать делфи и vc и любые другие средства для реализации задачи...

    ОтветитьУдалить
  4. Михаилу:
    Разумеется, некоторые коммерческие гриды лучше бесплатных. =) Я с DevExpress-вским гридом работал совсем немного и с довольно старой версией, но не припомню чтобы там было что-то, без чего нельзя было бы обойтись.

    А на комменты можно подписаться только через RSS. Смотри ссылку "RSS комментариев к странице"(недавно добавил).

    ОтветитьУдалить
  5. 2 ctapmex:
    лет 6 назад я тоже писал лабораторки на Borland C++ под Дос. Между прочим, многие компоненты/классы существовали ещё и в те времена, но я, например, тогда даже не знал что это такое и как ими пользоваться. Хотя, Дельфей я тогда тоже не знал. =)

    ОтветитьУдалить
  6. Но ведь TExprCompileParser.CompileExpr объявлена как виртуальная?

    ОтветитьУдалить
  7. 2 GunSmoker:
    Да, действительно. Значит либо я ступил, либо увидел, что класс TExprBinaryVmOp объявлен в секции implementation и решил, что без него ничего не получится.

    ОтветитьУдалить
  8. Я посмотрю подробнее позже. Сейчас времени не хватает.

    ОтветитьУдалить

Постоянные читатели