Fastreport (4.13) в Lazarus
Не нашел соответствующей темы. если что - сильно не пинать а лишь ткнуть носом - где это обсуждалось.
итак. Lazarus 1.0.4. Win7 64 Bit.
при сборке требует FastScript. ставим его. вылазят следующие ошибки:
всё собирается и устанавливается.
теперь FastReport. тут веселее:
правка (тут и далее - закомменчен - оригинальный код. псоле него - мой)
далее
я не силен в винапи но нонче
что то явно не сходится. судя по строке нам нужен WindowPos. попробовал сделать так (хотя чую что сие не верно):
далее
у TZCompressionStream конструктор таков
далее
о чудо - оно скомпилилось.
но при перезапуске затребовало zlib1.dll... подсунул взятое тут http://www.winimage.com/zLibDll/index.html (ненаю какой надо и как корректнее. с учетом 64 битной винды). Насколько я понимаю - либа используется для компрессии отчетов. если я не планирую это делать - можно ли отключить сей функционал, что бы не тскать за собой бесполезную dll-ку?
запустилось. однако иконки компонентов отсутствуют. ну да это ладно. кидаем компонент на форму. делаем простейшее
возможно что как раз та правка что я делал по поводу WindowPos и ведет к сим глюкам. если надо исправить иначе - подскажите как.
кстати - версия репорта с лазаре светится как 4.12.1.1.
Основная задача моя - использовать репорт в Линухе. но пока даже под виндой он в итоге - не работает толком (под линух - попробую позже). Если какие то правки не корректны - подскажите что да как надо сделать.
итак. Lazarus 1.0.4. Win7 64 Bit.
при сборке требует FastScript. ставим его. вылазят следующие ошибки:
C:\lazarus\componentsEx\fs\Source\fs_isysrtti.pas(484,26) Error: Can't determine which overloaded function to call
C:\lazarus\componentsEx\fs\Source\fs_isysrtti.pas(486,26) Error: Can't determine which overloaded function to call
правлю строки
...
Result := frxInteger(Round(Caller.Params[0]))
...
Result := frxInteger(Trunc(Caller.Params[0]))
...
на...
Result := frxInteger(Round(Integer(Caller.Params[0])))
...
Result := frxInteger(Trunc(Integer(Caller.Params[0])))
...
всё собирается и устанавливается.
теперь FastReport. тут веселее:
C:\lazarus\componentsEx\fr\Source\frxDsgnIntf.pas(1071,15) Error: Illegal type conversion: "TIntegerSet" to "Int64"
правка (тут и далее - закомменчен - оригинальный код. псоле него - мой)
//SetOrdValue(frxInteger(S));
SetOrdValue(Integer(S));
далее
C:\lazarus\componentsEx\fr\Source\frxCtrls.pas(487,12) Error: Illegal type conversion: "TMessage" to "TWMWindowPosMsg"
я не силен в винапи но нонче
TMessage = record {fields according to ICS}
msg : UINT;
case longint of
0: (
wParam : WPARAM;
lParam : LPARAM;
Result : LRESULT;
);
1: (
wParamlo,
wParamhi : HALFPARAM; // Is there Windows type for half an wparam?
lParamlo,
lParamhi : HALFPARAM;
Resultlo,
Resulthi : HALFLRESULT;
);
end;
а
TWMWindowPosMsg = record
Msg : UINT;
Unused : Integer;
WindowPos : PWindowPos;
Result : LRESULT;
end;
что то явно не сходится. судя по строке нам нужен WindowPos. попробовал сделать так (хотя чую что сие не верно):
//with TWMWindowPosMsg(Message).WindowPos^ do
with PWindowPos(message.lParamlo)^ do
далее
C:\lazarus\componentsEx\fr\Source\frxGZip.pas(93,109) Error: Wrong number of parameters specified for call to "Create"
C:\lazarus\componentsEx\fr\Source\frxGZip.pas(171,109) Error: Wrong number of parameters specified for call to "Create"
у TZCompressionStream конструктор таков
constructor Create(dest: TStream; compressionLevel: TZCompressionLevel = zcDefault);
так что правлю так:
//Compressor := TZCompressionStream.Create(Dest, TZCompressionLevel(Compression){$IFDEF WIN64}, 15 {$ENDIF});
Compressor := TZCompressionStream.Create(Dest, TZCompressionLevel(Compression));
далее
frxCustomDBRTTI.pas(0,0) Fatal: Can not find unit fs_idbrtti used by frxCustomDBRTTI.
странно. в FastScript - исходник есть. однако в пакет он отчего то не попал. пока просто зкомментил сей модуль. что бы хоть что то увидеть.о чудо - оно скомпилилось.
но при перезапуске затребовало zlib1.dll... подсунул взятое тут http://www.winimage.com/zLibDll/index.html (ненаю какой надо и как корректнее. с учетом 64 битной винды). Насколько я понимаю - либа используется для компрессии отчетов. если я не планирую это делать - можно ли отключить сей функционал, что бы не тскать за собой бесполезную dll-ку?
запустилось. однако иконки компонентов отсутствуют. ну да это ладно. кидаем компонент на форму. делаем простейшее
frxReport1.ShowReport;
ловим кучку радостей в виде окон ошибок (см. вложение)возможно что как раз та правка что я делал по поводу WindowPos и ведет к сим глюкам. если надо исправить иначе - подскажите как.
кстати - версия репорта с лазаре светится как 4.12.1.1.
Основная задача моя - использовать репорт в Линухе. но пока даже под виндой он в итоге - не работает толком (под линух - попробую позже). Если какие то правки не корректны - подскажите что да как надо сделать.
Комментарии
Пакеты для работы с БД и дизайнера сам добавлял. В принципе работает. Но много глюков. Самая большая проблема с русской кодировкой, идут ??. И в дизайнере, и в отчетах. Например у меня отчеты по русски называется и при наследование не может читать предков. Ну и вывод русского текста. В поддержку писал, но никаких исправлений пока нет.
ну тут пока хотя бы просто запустить отчет.
насколько я помню дельфевый фаст - работал с юникодом. быть может можно ему подсунуть в рантайме юникодную строку?
скажу более. три довольно крупных конторы предлагали небесплатную доработку для лазаря... но как то на контакт всё равно не идут
а с TWMWindowPosMsg(Message) косяков не было? я так понимаю, что часть косяков моих связаны с 64битностью. этот, возможно, тоже. (а 64 бита это для меня принципиально в силу специфики проекта)
Ну ресурсы и отчеты FastReport идут в UTF-8. Наверно там надо настраивать опциями компилятора. Интересно бы собрать на Lazarus for Linux и посмотреть. Есть еще момент с кодировками. Если использовать frxDBDataSet, который в гриде выводит русский нормально, то есть у frxMemo стоит DataSet и Field работает, а в интерпритаторе выражения - нет
Вроде нет.
А какую базу данных и компоненты доступа Вы будете использовать?
гм... буду пробовать... но, наверно, попозжа. чичаз надо добить остальные части проекта...
хотелось бы всё ж услышать комменты разрабов
база - думаю не суть это принципиально. сейчас - постгрес. потом (хотя возможно и не так уж отдаленно ) sqlite. ну и mssql, access быть может.
для доступа - сейчас ZEOS. скорее всего на нем и остановимся.