Fórum desenhando no qreport #350842
19/12/2007
0
Estou tentando desenhar alguns shapes (TQRShape) no quickreport que representam um diagrama elétrico. A minha intenção é utilizar o qreport para ter uma visão geral do diagrama e imprimi-lo. Os shapes são desenhados em tempo de execução de acordo com o diagrama original. Os shapes aparecem no modo design mas não aparecem no form de visualisar impressão. Só aparecem se eu tiver inserido eles manualmente no delphi.
O código é esse:
Alguém sabe o que pode estar errado? [/code]
O código é esse:
procedure TFormMain.Button1Click(Sender: TObject);
var
idxBar, idxLin, idxLnk: integer;
barra: TBarra;
linha: TCabo;
link: TLink;
qbarra: TQRShape;
qLinha: TQRShape;
dY: integer;
begin
{TransladarPagina(paginaAtiva, paginaAtiva.Width, 0);
AtivarPagina(paginaAtiva.PaginaEsquerda);}
FormVUnifilar.QuickRep1.Prepare;
dY := 100;
FormVUnifilar.QuickRep1.Width := paginaAtiva.Width;
FormVUnifilar.QuickRep1.Height := paginaAtiva.Height;
for idxLin := 0 to paginaAtiva.Linhas.Count - 1 do
begin
linha := paginaAtiva.Linhas.Items[idxLin];
FormVUnifilar.QuickRep1.InsertControl(TQRShape.Create(FormVUnifilar.QuickRep1));
qLinha := FormVUnifilar.QuickRep1.Controls[FormVUnifilar.QuickRep1.ControlCount - 1] as TQRShape;
qLinha.Parent := FormVUnifilar;
qLinha.Left := linha.Left;
qLinha.Top := linha.Top + dY;
qLinha.Height := linha.Height;
qLinha.Width := linha.Width;
qLinha.Brush.Color := clRed;
qLinha.Pen.Color := clRed;
end;
for idxBar := 0 to paginaAtiva.Barras.Count - 1 do
begin
barra := paginaAtiva.Barras.Items[idxBar];
FormVUnifilar.QuickRep1.InsertControl(TQRShape.Create(FormVUnifilar.QuickRep1));
qbarra := FormVUnifilar.QuickRep1.Controls[FormVUnifilar.QuickRep1.ControlCount - 1] as TQRShape;
qBarra.Parent := FormVUnifilar;
qBarra.Left := barra.Left;
qBarra.Top := barra.Top + dY;
qBarra.Height := barra.Height;
qBarra.Width := barra.Width;
qBarra.Brush.Color := clBlue;
end;
FormVUnifilar.ShowModal;
{FormVUnifilar.QuickRep1.Preview;}
end;
Alguém sabe o que pode estar errado? [/code]
Guiodai
Curtir tópico
+ 0
Responder
Posts
20/12/2007
Micheus
[b:030e1ae19d]guiodai[/b:030e1ae19d], acho que está estranho mesmo.
O processo de inclusão dos Shapes em run-time não estão muito corretas. Se vc pretende visualizá-los no QuickRep, vc deve definí-lo como Parent dos mesmos, e não o form onde vc o adicionou.
Passar no Create o Form como parâmetro, torna ele seu Owner e, no caso, não é necessário chamar IsertControl. Quando vc seta o valor de Parent, vc está dizendo onde o componente será ´pintado´.
Então, vc poderia modificar a criação dos shape´s para algo como:
para visualizar o relatório vc deve utilizar apenas: [i:030e1ae19d]FormVUnifilar.QuickRep1.Preview;[/i:030e1ae19d]
[i:030e1ae19d]FormVUnifilar.ShowModal;[/i:030e1ae19d], mostrará o form com o quickrep adicionado em run-time, o que lhe dará um resultado errado.
A função do método Prepare do QuickReport é montar o relatório em arquivo temporário que ele utiliza (um metafile). Então, vc só deverá chamar este método depois que adicionar, em run-time, os componentes desejados e não como vc utilizou (antes de ´tudo´).
Entretanto, quando vc utiliza o método Preview, ele automaticamente chamará este método. Logo, vc só deve utilizá-lo se desejar não visualizar, mas sim, se for imprimir diretamente (sem pré-visualização).
Abraços
O processo de inclusão dos Shapes em run-time não estão muito corretas. Se vc pretende visualizá-los no QuickRep, vc deve definí-lo como Parent dos mesmos, e não o form onde vc o adicionou.
Passar no Create o Form como parâmetro, torna ele seu Owner e, no caso, não é necessário chamar IsertControl. Quando vc seta o valor de Parent, vc está dizendo onde o componente será ´pintado´.
Então, vc poderia modificar a criação dos shape´s para algo como:
for idxLin := 0 to paginaAtiva.Linhas.Count - 1 do begin linha := paginaAtiva.Linhas.Items[idxLin]; with TQRShape.Create(FormVUnifilar) do begin Parent := FormVUnifilar.QuickRep1; Left := linha.Left; Top := linha.Top + dY; Height := linha.Height; Width := linha.Width; Brush.Color := clRed; Pen.Color := clRed; end; end; for idxBar := 0 to paginaAtiva.Barras.Count - 1 do begin barra := paginaAtiva.Barras.Items[idxBar]; with TQRShape.Create(FormVUnifilar) do begin Parent := FormVUnifilar.QuickRep1; Left := barra.Left; Top := barra.Top + dY; Height := barra.Height; Width := barra.Width; Brush.Color := clBlue; end; end;
para visualizar o relatório vc deve utilizar apenas: [i:030e1ae19d]FormVUnifilar.QuickRep1.Preview;[/i:030e1ae19d]
[i:030e1ae19d]FormVUnifilar.ShowModal;[/i:030e1ae19d], mostrará o form com o quickrep adicionado em run-time, o que lhe dará um resultado errado.
A função do método Prepare do QuickReport é montar o relatório em arquivo temporário que ele utiliza (um metafile). Então, vc só deverá chamar este método depois que adicionar, em run-time, os componentes desejados e não como vc utilizou (antes de ´tudo´).
Entretanto, quando vc utiliza o método Preview, ele automaticamente chamará este método. Logo, vc só deve utilizá-lo se desejar não visualizar, mas sim, se for imprimir diretamente (sem pré-visualização).
Abraços
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)