PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Quick Report / ForceNewPage #254514

14/10/2004

0

Bom dia

Estou tentando fazer o meu relatorio. Ja evolui mas ainda estou com um pequeno problema.

Tenho uma tabela com a seguinte estrutura


Cultivar     A1   A2   B1  B2  C1  C2
   CV1       -    -    12  14  -   -
   CV2       16   17   -   -   8   9
   CV3       21   21   14  16  6   5



sendo A locus A
B locus B
........

A1 alelo A1
A2 alelo A2
B1 alelo B1
B2 alelo B2
.....
....

Eu gostaria que saisse desta forma



                          Cultivar CV1    // título

     
             Locus       Alelo1       Alelo2

             B              12            14


ou seja para cada cultivar, em uma página separada, só se imprimiria os locus onde os alelos
estao presentes (com valores)

Inicialmente criei uma variavel aQRLabel como abaixo

var
  Frm_Rel_RegT: TFrm_Rel_RegT;
  aQRLabel: array of TQRLabel;
  NPage : Boolean;

Depois no evento BeforePrint do QuickReport criei os QRLabel necessarios como abaixo


procedure TFrm_Rel_RegT.QuickRep2BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
var
  I : Integer;
begin
  SetLength(aQRLabel, (Table1.FieldCount - 3) div 2);
  for I := 0 to Length(aQRLabel) -1 do
    begin
      aQRLabel[i] := TQRLabel.Create(ChildBand1);
      aQRLabel[i].Parent := ChildBand1;
    end;
end;

Criei alem da banda title uma banda detail (QRBand2) onde coloquei os cabeçalhos

                          Cultivar CV1    // título

     
             Locus       Alelo1       Alelo2

Configurei as propriedades ForceNewPage e HasChild como True o no evento BeforePrint coloquei
a seguinte programação

procedure TFrm_Rel_RegT.ChildBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var
  i      : Integer;
  campo  : Integer;
  cont   : Integer;
  altura : Integer;
begin
  campo := 1;
  cont := 0;
  altura := 0;
  for i := 0 to ((Table1.FieldCount - 3) div 2) - 1  do
    begin
      if Table1.Fields[campo].AsString <> ´´ then
        begin
          aQRLabel[cont].Caption := Principal.DBGrid1.Columns[campo].Title.Caption;
          aQRLabel[cont].Left := 112;
          aQRLabel[cont].Top := 1 + 30 * altura;
          if altura = 22 then  // locus por pagina
            begin
              NPage := True;
              altura := 0;
              Break;
            end
         else
           begin
             cont := cont + 1;
             altura := altura + 1;
           end;
        end;
      inc(campo, 2);
    end;

  for I := cont to Length(aQRLabel) -1 do
    aQRLabel[i].Caption := ´´;
end;


Como com o uso da ForceNewPage na procedure criava uma pagina antes da impressao dos dados
dos primeiros 22 locus eu resolvi só por uma variavel global que indicasse que em seguida deveria
ter uma nova pagina. Esta variavel é NPage (Boolean).

Em seguida no evento AfterPrinter escrevi a seguinte procedure


procedure TFrm_Rel_RegT.ChildBand1AfterPrint(Sender: TQRCustomBand;
  BandPrinted: Boolean);
begin
  if NPage then
     begin
       QuickRep2.NewPage;
       NPage := False
     end;
end;


com isto já consigoConsegui criar a 2102 paginas correspondente aos 2102 registros e mostrando
somente os allelos com valores e criar a página seguinte dos registros com mais de 22 locus e
imprimir os valores dos 22 primeiros na primeira página da registro que eles pertencem. O ultimo
problema é fazer imprimir os restantes dos locus (acima de 22) na nova página criada.

Troquei o local das duas procedura anteriores da banda Detail para a Child.


Alguma sugestao (qualquer uma será bem vinda pois estou muito tempo nela)


Ja agradeço

[b:60e16f7d09][color=red:60e16f7d09]Editado pelo Moderador (AZ) para inserir BBCode e facilitar a leitura.[/color:60e16f7d09][/b:60e16f7d09]


Carlos Machado

Carlos Machado

Responder

Posts

18/10/2004

Carlos Machado

[quote:498d7e0580=´Carlos Alberto Machado´]
Sobe

Bom dia

Eu uso o Delphi 5 e o QuickReport 6.2

No assunto coloquei ForceNewPage pois inicialmente em vez de usar NewPage usei ForceNewPage. Neste caso criou uma segunda pagina so que na primeira a parte referente ao ChildBand ficou em branca e a segunda ficou com os dadoa referente as primeiros 22 locos, que deveriam ficar na primeira página, enquanto que os dados apos os 22 também não apareceram.

Estou tentando fazer o meu relatorio. Ja evolui mas ainda estou com um pequeno problema.

Tenho uma tabela com a seguinte estrutura


Cultivar     A1   A2   B1  B2  C1  C2
   CV1       -    -    12  14  -   -
   CV2       16   17   -   -   8   9
   CV3       21   21   14  16  6   5



sendo A locus A
B locus B
........

A1 alelo A1
A2 alelo A2
B1 alelo B1
B2 alelo B2
.....
....

Eu gostaria que saisse desta forma



                          Cultivar CV1    // título

     
             Locus       Alelo1       Alelo2

             B              12            14


ou seja para cada cultivar, em uma página separada, só se imprimiria os locus onde os alelos
estao presentes (com valores)

Inicialmente criei uma variavel aQRLabel como abaixo

var
  Frm_Rel_RegT: TFrm_Rel_RegT;
  aQRLabel: array of TQRLabel;
  NPage : Boolean;

Depois no evento BeforePrint do QuickReport criei os QRLabel necessarios como abaixo


procedure TFrm_Rel_RegT.QuickRep2BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
var
  I : Integer;
begin
  SetLength(aQRLabel, (Table1.FieldCount - 3) div 2);
  for I := 0 to Length(aQRLabel) -1 do
    begin
      aQRLabel[i] := TQRLabel.Create(ChildBand1);
      aQRLabel[i].Parent := ChildBand1;
    end;
end;

Criei alem da banda title uma banda detail (QRBand2) onde coloquei os cabeçalhos

                          Cultivar CV1    // título

     
             Locus       Alelo1       Alelo2

Configurei as propriedades ForceNewPage e HasChild como True o no evento BeforePrint coloquei
a seguinte programação

procedure TFrm_Rel_RegT.ChildBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var
  i      : Integer;
  campo  : Integer;
  cont   : Integer;
  altura : Integer;
begin
  campo := 1;
  cont := 0;
  altura := 0;
  for i := 0 to ((Table1.FieldCount - 3) div 2) - 1  do
    begin
      if Table1.Fields[campo].AsString <> ´´ then
        begin
          aQRLabel[cont].Caption := Principal.DBGrid1.Columns[campo].Title.Caption;
          aQRLabel[cont].Left := 112;
          aQRLabel[cont].Top := 1 + 30 * altura;
          if altura = 22 then  // locus por pagina
            begin
              NPage := True;
              altura := 0;
              Break;
            end
         else
           begin
             cont := cont + 1;
             altura := altura + 1;
           end;
        end;
      inc(campo, 2);
    end;

  for I := cont to Length(aQRLabel) -1 do
    aQRLabel[i].Caption := ´´;
end;


Como com o uso da ForceNewPage na procedure criava uma pagina antes da impressao dos dados
dos primeiros 22 locus eu resolvi só por uma variavel global que indicasse que em seguida deveria
ter uma nova pagina. Esta variavel é NPage (Boolean).

Em seguida no evento AfterPrinter escrevi a seguinte procedure


procedure TFrm_Rel_RegT.ChildBand1AfterPrint(Sender: TQRCustomBand;
  BandPrinted: Boolean);
begin
  if NPage then
     begin
       QuickRep2.NewPage;
       NPage := False
     end;
end;


com isto já consigoConsegui criar a 2102 paginas correspondente aos 2102 registros e mostrando
somente os allelos com valores e criar a página seguinte dos registros com mais de 22 locus e
imprimir os valores dos 22 primeiros na primeira página da registro que eles pertencem. O ultimo
problema é fazer imprimir os restantes dos locus (acima de 22) na nova página criada.

Troquei o local das duas procedura anteriores da banda Detail para a Child.


Alguma sugestao (qualquer uma será bem vinda pois estou muito tempo nela)


Ja agradeço

[b:498d7e0580][color=red:498d7e0580]Editado pelo Moderador (AZ) para inserir BBCode e facilitar a leitura.[/color:498d7e0580][/b:498d7e0580][/quote:498d7e0580]


Responder

Gostei + 0

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

Aceitar