Rave via código - não mostrar o barcode quando for uma etiqueta vazia

Delphi

11/04/2010

Ola, possuo um relatório para impressão de etiquetas que foi criado via código, ou seja não estou conseguindo manipular os eventos do mesmo.
Eu imprimo as etiquetas com código de barras (barcode) mas tenho a opção para imprimir etiquetas em branco (caso na folha de etiquetas existam algumas já destacadas). Acontece que meu componente barcode sempre aparece independente de ser uma etiqueta vazia ou preenchida. Preciso manipular a propriedade visible do componente, mas como tenho o mesmo em tempo de execução me complica um pouco. Alguém sabe como resolver. Estou postando o código de minha unit abaixo. Abraços.


unit untEtiquetaRave;

interface

uses SysUtils, DBClient, Math, forms, Windows, Graphics, untEtiqueta, RpBase, RpCon,
     RpConDS, RpDefine, RpDevice, RpRave, RpSystem, RvClass, RvCsData, RvCsDraw,
     RvCsStd, RvCsRpt, RvData, RvDefine, RvDirectDataView, RvUtil, rpBars, RVCsBars;

type

  TEtiquetaRave = class(TEtiqueta)

  private
    rvProject : TrvProject;
    rvSystem : TrvSystem;
    rvDataSetConnection : TrvDataSetConnection;

    procedure criarRelatorio;

  public
    constructor Create; override;
    destructor Destroy; override;
    procedure Imprimir; override;
    procedure Visualizar; override;
    function CmParaPolegada(const medida : Single) : Single; //Transformação de centímetros para polegadas
  end;

implementation

uses UDmRelatorios;

{ TEtiquetaRave }

constructor TEtiquetaRave.Create;
begin
  inherited;
  if not Assigned(rvSystem) then
    rvSystem := TRvSystem.Create(nil);
  if not Assigned(rvProject) then
    rvProject := TrvProject.Create(nil);
  if not Assigned(rvDataSetConnection) then
    rvDataSetConnection := TrvDataSetConnection.Create(nil);
  rvProject.Engine := rvSystem;
  rvSystem.SystemPreview.FormState := wsMaximized;
  rvSystem.SystemSetups := rvSystem.SystemSetups - [ssAllowSetup];
end;

procedure TEtiquetaRave.criarRelatorio;
var
  i : SmallInt;
  //Variável utilizada para controlar a posição vertical de cada campo a ser impresso
  topCampos : Single;
  //Componente DataBand do Rave
  DataBand: TRaveDataBand;
  //Componente responsável em fazer a conexão do Rave com o DataSet
  conexao: TRaveDataConnection;
  //Componente DataText para exibição dos campos na etiqueta
  DataText: TRaveDataText;

  //Componente para impressão de código de barras
  DataBarCode : TRaveCode128BarCode;

  //Componente DataView para disponibilização dos campos do DataSet para uso do Rave
  DataView: TRaveDataView;
  //Página do relatório Rave que armazenará as etiquetas
  pagina: TRavePage;
  //Componente Region do Rave
  regiao: TRaveRegion;
Begin
  //Aponta o componente DataSetConnection ao clientDataSet a partir da propriedade origemDosDados
  rvDataSetConnection.DataSet := origemDosDados;
  RvProject.New; //Cria um novo projeto Rave
  //Por default, ao criar um projeto, automaticamente um relatório e uma página são criados
  pagina := RvProject.ProjMan.FindRaveComponent('Report1.Page1', Nil) As TRavePage;
  if tamanhoPapel = 'A4' then //Verifica se o usuário escolheu papel A4
    pagina.PaperSize := DMPAPER_A4
  else
  if tamanhoPapel = 'CARTA' then //ou papel Carta
    pagina.PaperSize := DMPAPER_LETTER
  else //Ou papel personalizado
  begin
    pagina.PageWidth := larguraPagina;
    pagina.PageHeight := alturaPagina;
  end;
  //Seta a orientação da página escolhida pelo usuário
  if AnsiUpperCase(orientacaoPapel) = 'RETRATO' then
    pagina.Orientation := poPortrait
  else
    pagina.Orientation := poLandScape;
  conexao := CreateDataCon(RvDatasetConnection); //Cria uma conexão no Rave
  //Cria um novo objeto DataView para o projeto Rave
  DataView := RvProject.ProjMan.NewDataObject(TRaveDataView) As TRaveDataView;
  //Aponta a propriedade ConnectionName do DataView a conexão recém criada
  DataView.ConnectionName := conexao.Name;
  DataView.DataCon := conexao;
  CreateFields(DataView, Nil, Nil, true); //Cria os campos no objeto DataView
  regiao := TRaveRegion.Create(pagina); //Cria um objeto Region dentro da página
  regiao.Left := margemEsquerda;
  regiao.Name := 'Region1';
  regiao.Parent := pagina;
  regiao.Top := margemSuperior;
  //Define a largura do region com a mesma largura da página (tirando a largura das margens)
  regiao.Width := pagina.PageWidth - (margemEsquerda + margemDireita);
  //Define a altura do region com a mesma altura da página (tirando a altura das margens)
  regiao.Height := pagina.PageHeight - (margemSuperior + margemInferior);
  //Cria um objeto DataBand do tipo detalhe dentro do region
  DataBand := regiao.CreateChild(TRaveDataBand, 'DetailBand') As TRaveDataBand;
  //Aponta a propriedade DataView do Databand ao DataView recém criado
  DataBand.DataView := DataView;
  //Define a altura do objeto DataBand de acordo com a altura da etiqueta
  DataBand.Height := alturaEtiqueta;
  //Define o número mínimo de etiquetas a serem impressas em uma coluna
  DataBand.OrphanRows := Trunc(numEtiquetasPagina / numColunasPagina);

  if ordemDeImpressao = 'CL' then //Define a ordem de impressão das etiquetas (Coluna X Linha)
  begin
    DataBand.Columns := numColunasPagina;
    DataBand.ColumnSpacing := larguraEntreColunas;
  end
  else //ou Linha X Coluna
  begin
    regiao.Columns := numColunasPagina;
    regiao.ColumnSpacing := larguraEntreColunas;
  end;


  topCampos := 0.36; //inicializa a posição vertical para o primeiro campo  antes era 0.2, foi 0.33, depois 0.36

  DataBarCode := DataBand.CreateChild(TRaveCode128BarCode, 'bar' + camposDaEtiqueta[0]) As TRaveCode128BarCode;


  DataBarCode.DataField := camposDaEtiqueta[0];
  DataBarCode.DataView := DataView;
  DataBarCode.FontJustify := pjCenter;
  DataBarCode.BarCodeJustify:=pjCenter;
  DataBarCode.BarWidth:= 0.010; //Estava 0.005
  DataBarCode.Height:=0.15; //nao opcional para 6087 //estava 0.1
  DataBarCode.Top:=0.12;    // new feito em 29/10
  DataBarCode.Left := pagina.PageLeft + 0.8;
  DataBarCode.Font.Name := fonteEtiqueta;
  DataBarCode.Font.Size := tamanhoFonteEtiqueta - 2;







  //DataBarCode.Font.Size := tamanhoFonteEtiqueta - 4;
  //DataBarCode.BarHeight  := 0.1;
  //DataBarCode.BarWidth   := 0.030;
  //topCampos := topCampos + 0.35;
  //topCampos := topCampos + 0.1;

  for i := 1 to  camposDaEtiqueta.Count -1 do
  begin
    //Verifica se a posição vertical do próximo campo é maior que a altura da etiqueta
    if topCampos >= alturaEtiqueta then
      Break;
    //Cria um objeto DataText para o campo a ser impresso na etiqueta
    DataText := DataBand.CreateChild(TRaveDataText, 'dt' + camposDaEtiqueta[i]) As TRaveDataText;
    DataText.DataField := camposDaEtiqueta[i];
    DataText.DataView := DataView;
    DataText.Font.Name := fonteEtiqueta; //Altera o nome e tamanho da font do DataText

    if (i = 2)or (i = 3) or (i = 4) or (i = 5) or (i = 6) or (i = 7) then
      DataText.Font.Size := tamanhoFonteEtiqueta-2
    else
      DataText.Font.Size := tamanhoFonteEtiqueta-2;

    DataText.FontJustify := pjLeft;

    DataText.Left := pagina.PageLeft + 0.2; //Alinha o texto do objeto DataText a esquerda


    DataText.Top := topCampos; //Define a posição vertical do campo corrente
    //Define a largura do objeto DataText com a mesma largura da etiqueta (coluna), descontado 0.4 polegadas
    DataText.Width := ((pagina.PageWidth - larguraEntreColunas) / numColunasPagina) - 0.4;
    //Incrementa a variável topCampos para o próximo campo a ser adicionado a etiqueta
    topCampos := topCampos + 0.1;
    //topCampos := topCampos - 0.1;
  end;

end;


destructor TEtiquetaRave.Destroy;
begin
  //Destroi os componentes Rave
  if Assigned(rvSystem) then
    FreeAndNil(rvSystem);
  if Assigned(rvProject) then
    FreeAndNil(rvProject);
  if Assigned(rvDataSetConnection) then
    FreeAndNil(rvDataSetConnection);
  inherited;
end;

procedure TEtiquetaRave.Imprimir;
begin
  inherited;
  criarRelatorio;
  //Imprimir o relatório direto na impressora
  rvSystem.DefaultDest := rdPrinter;
  RvProject.ExecuteReport('Report1');
  RvProject.Close;
end;

procedure TEtiquetaRave.Visualizar;
begin
  inherited;
  criarRelatorio;
  //Imprimir o relatório na tela


  rvSystem.DefaultDest := rdPreview;


  RvProject.ExecuteReport('Report1');

  RvProject.Close;
end;

function TEtiquetaRave.CmParaPolegada(const medida: Single): Single;
begin
  //2.54 cm = 1 polegada
  Result := medida / 2.54;
end;



end.



Claudio Junior

Claudio Junior

Curtidas 0

Respostas

Paulo Pacheco

Paulo Pacheco

11/04/2010

Amigo to com um problema semelhante ao teu de imprimir etiqueta
uso a Argox, ja fui no fabricante e não consegui nada.

na net ja to a 2 semanas e nada tambem. vc poderia me ajudar por favor.

preciso imprimir Etiqueta com codigo de barra EAN13 - Etiqueta pequena.

ja gerei o codigo de barra num Timage e CJVDBBarcode1 mas não consigo manda p/ imp. Argox.

Agradeço.
Paulo
Manaus-Am
GOSTEI 0
Claudio Junior

Claudio Junior

11/04/2010

Olá Paulo, eu uso impressoras jato de tinta e laser normal e imprimo nas etiquetas adesivas que compro em papel carta. Quando mando imprimir a etiqueta sai normal o código de barra. Mas poste o seu código para ver se dá para ajudar,


Amigo to com um problema semelhante ao teu de imprimir etiqueta
uso a Argox, ja fui no fabricante e não consegui nada.

na net ja to a 2 semanas e nada tambem. vc poderia me ajudar por favor.

preciso imprimir Etiqueta com codigo de barra EAN13 - Etiqueta pequena.

ja gerei o codigo de barra num Timage e CJVDBBarcode1 mas não consigo manda p/ imp. Argox.

Agradeço.
Paulo
Manaus-Am
GOSTEI 0
POSTAR