João Paulo Taraciuk Postado Março 10, 2008 Denunciar Share Postado Março 10, 2008 (editado) Olá a todos, estou encontrando dificuldade para enviar um arquivo para a impressora deixando ele alinhado em colunas, ele fica assimDescricaoQtd--------x Unitario =-----Total1000----------x----3,00 =-----30,001----------x----99,00 =-----99,00O código está assimWriteln(Texto,''+ZQuery3.FieldByName('Quantidade').AsString + ' '+ 'x'+' '+formatFloat('#0.00',ZQuery3.FieldByName('Unitario').AsFloat)+ ' = '+formatFloat('#0.00',ZQuery3.FieldByName('Total').AsFloat));e sai assim, fora de ordem, gostaria de saber também como faço para aumentar a fonte nas impressora 40 colunas BematechSe alguém puder me dar uma dica, eu agradeçoValeu!!! Editado Março 11, 2008 por João Paulo Taraciuk Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 10, 2008 Denunciar Share Postado Março 10, 2008 Olá a todos, estou encontrando dificuldade para enviar um arquivo para a impressora deixando ele alinhado em colunas, ele fica assimDescricaoQtd--------x Unitario =-----Total1000----------x----3,00 =-----30,001----------x----99,00 =-----99,00O código está assimWriteln(Texto,''+ZQuery3.FieldByName('Quantidade').AsString + ' '+ 'x'+' '+formatFloat('#0.00',ZQuery3.FieldByName('Unitario').AsFloat)+ ' = '+formatFloat('#0.00',ZQuery3.FieldByName('Total').AsFloat)); e sai assim, fora de ordem, você teria que formatar os números e texto, completando com espaços à esquerda para que cada coluna tenha o tamanho correto. Daí sua linha sendo enviada para a impressora teria sempre a mesma largura e as colunas estaria na mesma posição. Fazendo uso desta função: // Source = a string passada para ser formatada // Ch = caracter a ser utilizado para preencher à esquerda // Size = tamanho da string que deve ser retornada (largura da coluna) function FormatStrSize(Source :string; Ch :char; Size :byte) :string; begin Result := RightStr(StringOfChar(Ch, Size) +Source); end; voce poderia organizar melhor sua concatenação, tornando-a clara alterações. var Buffer :String; begin ... Buffer := FormatStrSize(ZQuery3.FieldByName('Quantidade').AsString, ' ', 4); // formata o número para 4 caracteres Buffer := Buffer +StringOfChar(' ', 5); // gera uma string de 5 espaços Buffer := Buffer +'x'; Buffer := Buffer +StringOfChar(' ', 3); // gera uma string de 3 espaços Buffer := Buffer +FormatStrSize(formatFloat('#0.00', ZQuery3.FieldByName('Unitario').AsFloat), ' ', 5); Buffer := Buffer +' = '; Buffer := Buffer +FormatStrSize(formatFloat('#0.00',ZQuery3.FieldByName('Total').AsFloat), ' ', 5); Writeln(Texto, Buffer); ... end;Veja se você entendeu a idéia.gostaria de saber também como faço para aumentar a fonte nas impressora 40 colunas BematechJá que usa esta impressora, porque você não utiliza os recursos oferecidos no site deles. Dá uma olhada na sessão download da Bematech - tem exemplos em Delphi. Acho que valeria a pena. Voce pode facilmente utilizar negritos/itálicos...Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Taraciuk Postado Março 11, 2008 Autor Denunciar Share Postado Março 11, 2008 Micheus, está dando erro na função FormatStrSize, assimfunction Tfrm_vendas.FormatStrSize(Source: string; Ch: char; Size: byte): string; begin Result := RightStr(StringOfChar(Ch, Size) +Source); end; Dá o errorThere is no overloaded version of 'RightStr' that can be called with these argumentsEu utilizo Delphi 7. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 11, 2008 Denunciar Share Postado Março 11, 2008 Micheus, está dando erro na função FormatStrSize, assimfunction Tfrm_vendas.FormatStrSize(Source: string; Ch: char; Size: byte): string; begin Result := RightStr(StringOfChar(Ch, Size) +Source); end; Dá o errorThere is no overloaded version of 'RightStr' that can be called with these argumentsEu utilizo Delphi 7.João Paulo Taraciuk, desculpe-me, esqueci de por o último parâmetro da função RightStr - Size:Result := RightStr(StringOfChar(Ch, Size) +Source, Size);E também não havia mencionado (apesar que você já colocou): é necessário adicionar a unit StrUtils na cláusula uses.Observei que você adicionou a função como um método do form. Isto não é necessário - é uma função independente do form, logo se você tiver uma unit onde colocas funções deste tipo (funções úteis de aplicação em vários projetos), coloque-a lá e adicione este sua unit na cláusula uses. ;)Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Taraciuk Postado Março 11, 2008 Autor Denunciar Share Postado Março 11, 2008 (editado) Funcionou aqui Micheus, Obrigado.Primeiro eu testei enviando para um txt(Economia antes de tudo), aí,no txt ainda saiu desalinhado, mas aí, mandei Direto para a impressora e saiu alinhadinho, perfeito.Obrigado, não sei o que faria sem a ajuda de vocês, porque, algumas coisas, a gente até consegue fazer sozinho, mas tem outras que só com a ajuda dos profissionais na área (Que em breve pretendo me tornar um :D )Abraço!!! Editado Março 11, 2008 por João Paulo Taraciuk Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 12, 2008 Denunciar Share Postado Março 12, 2008 Primeiro eu testei enviando para um txt(Economia antes de tudo), aí,no txt ainda saiu desalinhado, mas aí, mandei Direto para a impressora e saiu alinhadinho, perfeito.João Paulo Taraciuk, para que você veja este arquivo corretamente em um editor de texto, você deverá mudar o fonte dele para um onde os caracteres tenham tamanho fixo - é o caso do Courier. Uma sugestão é abrí-lo com o velho editor em modo caracter (como no DOS) - Edit.comAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Taraciuk Postado Março 12, 2008 Autor Denunciar Share Postado Março 12, 2008 (editado) Deu certo, ficou alinhadinho, também no txt, agora, sem querer ser muito chato, Observei que você adicionou a função como um método do form. Isto não é necessário - é uma função independente do form, logo se você tiver uma unit onde colocas funções deste tipo (funções úteis de aplicação em vários projetos), coloque-a lá e adicione este sua unit na cláusula uses.Como eu poderia fazer esta Unit, pois tem funções que utilizo em vários forms, como estafunction Tfrm_clientes.Novo_Id: integer; begin DM_Dados.ZQuery_apoio.Active:=False; DM_Dados.ZQuery_apoio.SQL.Clear; DM_Dados.ZQuery_apoio.SQL.Add('select max(id_cliente)from clientes'); DM_Dados.ZQuery_apoio.Active:=true; Result:=DM_Dados.ZQuery_apoio.FieldByName('id_cliente').AsInteger + 1 end;e, facilitaria bastante colocá-la em uma Unit e depois somente chamá-la, assim como eu faço com as funções da Bemafi.Mas eu não sei onde deveria declarar a função em um form diferente. Editado Março 12, 2008 por João Paulo Taraciuk Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 12, 2008 Denunciar Share Postado Março 12, 2008 agora, sem querer ser muito chato, Observei que você adicionou a função como um método do form. Isto não é necessário - é uma função independente do form, logo se você tiver uma unit onde colocas funções deste tipo (funções úteis de aplicação em vários projetos), coloque-a lá e adicione este sua unit na cláusula uses.Como eu poderia fazer esta Unit, pois tem funções que utilizo em vários forms, João Paulo Taraciuk, esta sua função teria lugar mais apropriado no datamodule(ou mesmo um form) principal (aquele que dura durante toda a aplicação).Eu tenho a seguinte função em meu projeto:function TDMMain.GetNewFieldCod(TableName, FieldName :string; WhereOption :string = '') :LongInt; begin Query1.SQL.Text := 'SELECT (MAX('+FieldName+')) AS '+FieldName+' FROM '+TableName; if WhereOption <> '' then Query1.SQL.Add(WhereOption); Query1.Open; Result := Query1.FieldByName(FieldName).AsInteger +1; Query1.Close; end; observe que neste datamodule, eu tenho um componente tipo query (Query1) que é utilizado exclusivamente para isto - ele já está devidamente vinculado ao componente database. Esta função, como dá para observar é genérica, porque eu posso passar o nome da tabela, do campo e alguma condição extra (WhereOption). Eu a uso no evento BeforePost dos datasets que necessitam obter algum código sequencial. Vejamos um exemplo de uso: procedure TDMDiversos.DstCidadeBeforePost(DataSet: TDataSet); begin if DataSet.State = dsInsert then DstCidadeCOD_CIDADE.Value := DMMain.GetNewFieldCod('CIDADE', 'COD_CIDADE'); end; apenas se estiver no modo inserção é que obtermos o novo código. e um exemplo onde o código é gerado baseado em outro campo: procedure TDMDiversos.DstEntidadeProgramaBeforePost(DataSet: TDataSet); begin if DataSet.State = dsInsert then DstEntidadeProgramaCOD_PROGRAMA.Value := DMMain.GetNewFieldCod('ENTIDADE_PROGRAMA', 'COD_PROGRAMA', 'WHERE COD_ENTIDADE = '+DstEntidadeProgramaCOD_ENTIDADE.AsString); end; neste caso, o valor gerado para COD_PROGRAMA é obitido para cada código em COD_ENTIDADE. Ou seja, para entidade 1, posso ter codigo do programa 1, 2, 3,...; para entidade 2, da mesma forma: 1, 2, 3, 4, ...; No caso da outra função que eu havia citado este recurso, você deveria proceder assim: no Delphi7, acessa menu File->New->Unit (cria uma nova unit). O corpo dela será criado assim: unit Unit1; interface implementation end. logo após interface, você deverá colocar o cabeçalho das funções e procedimentos a serem exportados para as outras aplicaçãos - funções que não estiverem "declaradas" ali, não estarão disponiveis para sua aplicação. Já, logo após implementation, como o nome diz, vem a implementação dos seus procedimentos ou funções. você deve acrescentar a cláusula Uses para incluir a units que você precisar (fizer uso nesta unit). O exemplo ficaria assim, então: unit Unit1; uses SysUtils; interface function FormatStrSize(Source :string; Ch :char; Size :byte) :string; // aqui outras declarações implementation // Source = a string passada para ser formatada // Ch = caracter a ser utilizado para preencher à esquerda // Size = tamanho da string que deve ser retornada (largura da coluna) function FormatStrSize(Source :string; Ch :char; Size :byte) :string; begin Result := RightStr(StringOfChar(Ch, Size) +Source); end; // ... outras funções end.ao gravar você deverá dar um nome a ela. Este será o nome que você utilizará na cláusula uses da sua aplicação. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 João Paulo Taraciuk Postado Março 12, 2008 Autor Denunciar Share Postado Março 12, 2008 Obrigado Micheus, já testei aqui e deu certo, isso vai me ajudar bastante, pois assim, não vou ter que criar a mesma função em cada form que for utilizá-la, crio na nova Unit e somente chamo quando onde for utilizá-la.E a outra função também, vou acabar implementando aqui no meu Projeto.Valeu!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
João Paulo Taraciuk
Olá a todos, estou encontrando dificuldade para enviar um arquivo para a impressora deixando ele alinhado em colunas, ele fica assim
O código está assim
e sai assim, fora de ordem, gostaria de saber também como faço para aumentar a fonte nas impressora 40 colunas Bematech
Se alguém puder me dar uma dica, eu agradeço
Valeu!!!
Editado por João Paulo TaraciukLink para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.