Chart - criando e imprimindo em runtime |
Top Previous Next |
|
Tudo sobre criação de gráficos em run-time E impressão: ======================================================= Uses TeeProcs, TeEngine, Chart, Series;
const TotalSeries = 2; var Serie: array [0..TotalSeries] of TLineSeries;
procedure FormCreate; var I: Integer; begin for I := 0 to TotalSeries do begin Serie[I] := TLineSeries.Create(Self); // Do tipo linha Serie[I].LinePen.Width := 2; Serie[I].ValueFormat := '#,##0.00'; // Aquelas caixinhas sobre cada ponto: Serie[I].Marks.Visible := True; Serie[I].Marks.Style := smsValue; Serie[I].Marks.BackColor := clWhite; Serie[I].Marks.Font.Size := 7; Serie[I].Marks.Frame.Visible := False; end; // Titulos e cores. Serie[0].Title := 'PC'; Serie[0].SeriesColor := clBlue; //prodvlrcus Serie[1].Title := 'FP'; Serie[1].SeriesColor := clRed; //totpagar Serie[2].Title := 'FR'; Serie[2].SeriesColor := clGreen; //totreceber end;
procedure BotaoExecutarClick; begin for I := 0 to TotalSeries do Serie[I].Clear; Query.First;
while not Query.EOF do begin Dia := Query.GetDataStr('data','dd'); Serie[0].Add( Query.GetValor('valor1'), Dia, Serie[0].SeriesColor); Serie[1].Add( Query.GetValor('valor2'), Dia, Serie[1].SeriesColor); Serie[2].Add( Query.GetValor('valor2'), Dia, Serie[2].SeriesColor); for I:= 0 to TotalSeries do Grafico.AddSeries( Serie[I] ); Query.Next; end; Grafico.BottomAxis.ExactDateTime := True; // Se o rodapé for data, coloque isto end;
procedure ImprimirButtonClick; var A : array[0..TotalSeries] of TLineSeries; S : Integer; begin QuickReport2 := TQuickReport2.Create(Self); // É necessário criar series locais para o QR pois o TChart é chato. Ele não pode // ser destruído se tiver componentes TSeries acoplados. Deve-se primeiro dar um // Free nos TSeries vinculados e depois dar um Free no QR. Isto também vale para // Forms auto-create. for S := 0 to TotalSeries do begin A[s] := TLineSeries.Create(Self); // Para passar os valores da var serie[s] é necessário usar um assign A[s].Assign(Serie[s]); QuickReport2.QRDBChart1.AddSeries(A[s]); end;
QuickReport2.QRDBChart1.Title.Text[0] := 'Gráfico Estoque/Financeiro - Período: ' + DataInicialEdit.GetData + ' a ' + DataFinalEdit.GetData; QuickReport2.QRDBChart1.Title.Font := Grafico.Title.Font; QuickReport2.QRDBChart1.BottomAxis.ExactDateTime := True; QuickReport2.QRDBChart1.BottomAxis.Title.Caption := 'Dia'; QuickReport2.QRDBChart1.BottomAxis.ExactDateTime := True; QuickReport2.Preview; // Sem a linha abaixo dá um Access Violation (GPF) ao passar pelo QR.Free. for S := 0 to TotalSeries do A[s].Free; QuickReport2.Free end;
procedure FormCloseQuery; var I: Integer; begin for I := 0 to TotalSeries do Serie[I].Free; // Necessario remover da memoria end;
|