LazReport: баги и вопросы...
Модератор: Модераторы
alexs писал(а):это ГЛОБАЛЬНЫЕ массивы и все функции их используют.
Просто при старте программы приведи их содержимое к нужно кодировке.
Я сам именно так делаю.
А можно по подробнее: что это за массивы, где находятся, и как "привести" их к нужной кодировке (здесь интересно не использование функций, типа AnsiToUTF8, а сам принцип).
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Код: Выделить всё
{$IFDEF WINDOWS}
procedure ConvetToUTF8LocalConst;
var
i:integer;
begin
for i:=1 to 12 do
begin
LongMonthNames[i]:=UTF8Encode(LongMonthNames[i]);
ShortMonthNames[i]:=UTF8Encode(ShortMonthNames[i]);
end;
for i:=1 to 7 do
begin
ShortDayNames[i]:=UTF8Encode(ShortDayNames[i]);
LongDayNames[i]:=UTF8Encode(LongDayNames[i]);
end;
end;
{$ENDIF}
Надеюсь, всё понятно?
Есть ли решение для LazReport с экспортом отчетов в PDF, XLS, DOC и OpenOffice?
Правильно ли мое подозрение что LazReport базируется на FastReport?
Правильно ли мое подозрение что LazReport базируется на FastReport?
devICE писал(а):Правильно ли мое подозрение что LazReport базируется на FastReport?
Точнее, на его древнем предке FreeReport.
devICE писал(а):Есть ли решение для LazReport с экспортом отчетов в PDF, XLS, DOC и OpenOffice?
Правильно ли мое подозрение что LazReport базируется на FastReport?
для PDF есть реализация в самом LazReport-е см папку ..\lazreport\source\addons\pdfexport\ но кирилица экспортируется как ??? пока не разобрался что с этим делать, про остальное готовых рабочих решений видимо пока нет.
У меня вопрос такой: как бороться с косяком lazreporta?
в win32 работает все не без упреков, но все же, а под linux не хочет вообще:
- шрифты на привью в гноме крупнее чем винде и из-за этого некоторые строчки переносятся, а при печати размер шрифта как положено, но перенос строки все же не забывает и получается, что строка печатается до середине страницы и переносится
- шрифты на привью в кде так же не маленькие и видимо кодировка путается на печати, только знаки препинания и цифры
может я отстаю от жизни и люди уже нашли другой нормальный генератор отчетов? или вариант печати без ООо и html через браузер?
сижу на calculate(gentoo) gnome(gtk2) и kde4(qt4), fpc 2.4.0, lazarus 0.9.29
в win32 работает все не без упреков, но все же, а под linux не хочет вообще:
- шрифты на привью в гноме крупнее чем винде и из-за этого некоторые строчки переносятся, а при печати размер шрифта как положено, но перенос строки все же не забывает и получается, что строка печатается до середине страницы и переносится
- шрифты на привью в кде так же не маленькие и видимо кодировка путается на печати, только знаки препинания и цифры
может я отстаю от жизни и люди уже нашли другой нормальный генератор отчетов? или вариант печати без ООо и html через браузер?
сижу на calculate(gentoo) gnome(gtk2) и kde4(qt4), fpc 2.4.0, lazarus 0.9.29
Если кому-то надо - сегодня вымучал извращенский способ выводить графики в LazReport. См. код:
DSEnterRect надо привязать на событие объекту-отчёту.
В самом отчёте надо добавить элемент типа картинка, открыть редактор Memo-ы и вписать туды [SRGraphic] или любой другой идентификатор, какой вам нравится %).
Метод FillErrorsChartSerie просто заполняет объект класса TLineSeries моими данными, делается это так же как и обычно при работе с TChart.
Код: Выделить всё
procedure TSuppReport.DSEnterRect(Memo: TStringList; View: TfrView);
//При подготовке отчёта нужно среагировать на объект картинки и нарисовать туды чего-нить.
var
AsPicture : TfrPictureView;
TheChart : TChart;
TheSeries : TLineSeries;
TheStream : TMemoryStream;
begin
//Проверяем, если это то самое поле, какое надо - ставим туды картинку %).
if (Memo[0] = '[SRGraphic]') and (View is TfrPictureView) then begin
//Картинка графика. В принципе, сюды можно напрямик злобно нарисовать график из TChart %).
//Далее следует извращенский код с множеством шаманских пассов, мучалось это дело
//двое суток методом научного и не очень тыка, ковыряния гугла и исходников LCL, RTL
//и прочей лазарусной требухи, ибо документация по этому делу отсутствует напрочь,
//а графику в LazReport, судя по всему, мало кто из пишущих на лазарусе вообще
//разобрался как делать - в нете на эту тему встречаются только вопросы без ответов.
//Сформируем картинку графика с помощью TChart.
TheChart := TChart.Create(nil);
TheChart.Parent := Application.MainForm;
TheSeries := TLineSeries.Create(nil);
TheChart.Visible := false;
TheChart.AddSeries(TheSeries);
Self.FillErrorsChartSerie(TheSeries);
//Готовим поток для передачи данных.
TheStream := TMemoryStream.Create;
//Настроим размеры и цвета для графика...
TheChart.Height := 222;
TheChart.Width := 568;
TheChart.Color := clWhite;
TheChart.BackColor := clWhite;
//... и пишем картинку в поток.
TheChart.SaveToImage(TBitmap).SaveToStream(TheStream);
//Получим Picture картинки отчёта.
AsPicture := (View as TfrPictureView);
//Загрузим в неё изображение графика из потока.
TheStream.Position := 0;
AsPicture.Picture.LoadFromStreamWithFileExt(TheStream,'bmp');
//Уборка мусора.
TheStream.Free;
TheSeries.Free;
TheChart.Free;
//Нуу, в общем, как-то так...
end;
end;DSEnterRect надо привязать на событие объекту-отчёту.
Код: Выделить всё
TheReport.OnEnterRect := @DSEnterRect;В самом отчёте надо добавить элемент типа картинка, открыть редактор Memo-ы и вписать туды [SRGraphic] или любой другой идентификатор, какой вам нравится %).
Метод FillErrorsChartSerie просто заполняет объект класса TLineSeries моими данными, делается это так же как и обычно при работе с TChart.
http://fastreport.free.fr/Fr%20english/Frp5_en.html
тут человек делал TeeChart для FastReport 2.2
тут человек делал TeeChart для FastReport 2.2
Sagrer писал(а):Если кому-то надо - сегодня вымучал извращенский способ выводить графики в LazReport. См. код:
Что то Вы как-то заумно)
Мой фрагмент кода (событие frReport):
Код: Выделить всё
var
Pic : TPicture;
Chart : TChart;
BarSeries1 : TBarSeries;
tempBitmap: TBitmap;
procedure TFStandartQuery.frReport1EnterRect(Memo: TStringList; View: TfrView);
begin
if Memo.Count > 0 then begin
if (Memo[0] = '[Chart1]') and (View is TfrPictureView) then begin
tempBitmap.Width := 250;
tempBitmap.Height := 187;
tempBitmap.Canvas.Clear;
Chart.Series.Clear;
Chart.AddSerie(BarSeries1);
Chart.Width := tempBitmap.Width;
Chart.Height := tempBitmap.Height;
Chart.PaintOnCanvas(tempBitmap.Canvas, Rect(0,0,tempBitmap.Width,tempBitmap.Height));
Pic.Bitmap.Assign(tempBitmap);
(View as TfrPictureView).Picture.Assign(Pic);
end;
if (Memo[0] = '[Chart2]') and (View is TfrPictureView) then begin
end;
if (Memo[0] = '[Chart3]') and (View is TfrPictureView) then begin
end;
end;
end;Т.е. при сформированном нужного размера и стиля графике, код в три строки.
Минус такой реализации: если печатать на виртуальный PDF принтер, то весь документ векторный, а графики растровые.
Вот бы найти способ размещать в отчете векторную графику... мечты мечты.
Я давно подозревал, что хорошо бы реализовать интеграцию TAChart и LazReport.
К сожалению, в LazReport не разбираюсь.
Но если для этого будут нужны/полезны какие-то изменения в TAChart -- готов внести.
К сожалению, в LazReport не разбираюсь.
Но если для этого будут нужны/полезны какие-то изменения в TAChart -- готов внести.
TAChart для одного из своих проектов сильно видоизменил, добавил вторую вертикальную ось (правую), причем хитрую, подбирает шаг и максимальное значение так, чтобы сетка совпадала с первой осью (левой), и шаг был целочисленный и "красивый" по величине, при необходимости, меняет и максимальное значение (естественно, не меньше, чем значения данных) для первой оси, для красивости всего графика. Ни в одной навороченной платной компоненте такого не видел.
В другом временную шкалу сделал.
И эти модификации сейчас никак не совместимы с практически новым TAChart
(( В добавок, код такой, что сам сейчас разберусь с большим большим трудом (не профессиональный программист я), во многом методом тыка делал.
Есть еще потребности выводить в отчет просто векторную графику.
Исходя из вышесказанного, логичнее как-то доработать LazReport так, чтобы можно было рисовать на нем как на канве (по типу вывода на принтер) или вставлять вместо растровой графики кусок другой канвы. Тогда и векторную графику можно выводить через рисование на канве простейших фигур и, естественно, графики.
Вот как-то так, сумбурно.
В другом временную шкалу сделал.
И эти модификации сейчас никак не совместимы с практически новым TAChart
Есть еще потребности выводить в отчет просто векторную графику.
Исходя из вышесказанного, логичнее как-то доработать LazReport так, чтобы можно было рисовать на нем как на канве (по типу вывода на принтер) или вставлять вместо растровой графики кусок другой канвы. Тогда и векторную графику можно выводить через рисование на канве простейших фигур и, естественно, графики.
Вот как-то так, сумбурно.
Сегодня перегнал проектик в Линакс и столкнулся с багом LazReport: дизайнер и сам отчет выводится в маленьком окошке, изменить размер нельзя и перетащить за шапку можно только в низ.
Ребята кто уже сталкивался подскажите?
khvalera писал(а):Сегодня перегнал проектик в Линакс и столкнулся с багом LazReport: дизайнер и сам отчет выводится в маленьком окошке, изменить размер нельзя и перетащить за шапку можно только в низ.Ребята кто уже сталкивался подскажите?
... лечится установкой новой версии Lazarus
micbasov писал(а):для PDF есть реализация в самом LazReport-е см папку ..\lazreport\source\addons\pdfexport\ но кирилица экспортируется как ??? пока не разобрался что с этим делать, про остальное готовых рабочих решений видимо пока нет.
Никто не знает как такую проблему решить? Поковырялся в коде, пробовал настраивать раскладку через PReport.pas в PowerPDF и lr_e_pdf в PdfExport, результат - нулевой. Может кто посоветует альтернативные решения? Хороший pdf эмулятор принтера, не задающий лишних вопросов:)
