GARANTIR DESCONTO

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:

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

Guiodai

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:
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar