Rave via código - não mostrar o barcode quando for uma etiqueta vazia
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.
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
Curtidas 0
Respostas
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
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
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
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