Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Impressão diretamente do Memo sem componentes de impressão


valSistemasDelphi

Pergunta

11 respostass a esta questão

Posts Recomendados

  • 0

Quero que imprimir Texto do MEMO!!!

Quero um código que faça isso!!

procurei na internet algo mais não achei.. somente com componentes!!!!

Amigo, na internet ta cheio de exemplos:

http://www.planetadelphi.com.br/dica/7146/-imprimir-conteudo-de-um-memo-(simples-e-facil)-

ou

https://www.google.com.br/search?source=hp&ei=oVE0X8DDEIHH5OUP8KKiqAY&q=imprimir+memo+delphi&o que=imprimir+memo+&gs_lcp=CgZwc3ktYWIQARgAMgIIADIGCAAQFhAeMgYIABAWEB4yBggAEBYQHjIGCAAQFhAeMgYIABAWEB4yBggAEBYQHjoICAAQsQMQgwE6BQgAELEDOggIABAWEAoQHlDSC1jSH2D6LmgAcAB4AIABsAGIAcgOkgEEMS4xNJgBAKABAaoBB2d3cy13aXqwAQA&sclient=psy-ab

Obs: Na impressão do Memo, o texto vai ficar meio bagunçado  ( justificação )  ... mas voce pode usar essa rotina para justificar o texto, para ficar mais bonito

Abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Jonas por responder!!

Consegui Com essa Rotina!!

procedure TForm1.Button1Click(Sender: TObject);
var
  I: integer;
begin
             //Inicia a impressão
             Printer.Canvas.font.Name := 'Courier new';
             Printer.Canvas.font.size := 15;
             Printer.BeginDoc;
             Printer.Title := 'Emissor';

             //Conta quantidades de linhas no Memo
             for I := 0 to Memo1.Lines.Count - 1 do
             begin

             //Imprime as linhas
             Printer.Canvas.TextOut(1,(I - 1)*Printer.Canvas.TextHeight('Emissor'),Memo1.Lines[I - 1]);
             end;

             //Termina a impressão
             Printer.EndDoc;    

 

Teria como colocar algo a mais nesse código para Justificar o texto ? Ou somente com a Função?       

Link para o comentário
Compartilhar em outros sites

  • 0

 

Teria como colocar algo a mais nesse código para Justificar o texto ? Ou somente com a Função?   

Seria isso:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function StrPad(AValue: String; const ALength: Integer; const ASide: TAlignment): String;
begin
   AValue := Trim(AValue);
   if Length(AValue) > ALength then
      AValue := Copy(AValue,1,ALength);
   case ASide of
      taLeftJustify:
         while Length(AValue) < ALength do AValue := AValue + ' ';
      taRightJustify:
         while Length(AValue) < ALength do AValue := ' ' + AValue;
      taCenter:
         while Length(AValue) < ALength do if (Length(AValue) mod 2)= 0 then
            AValue := AValue + ' ' else AValue := ' ' + AValue;
   end;
   Result := AValue;
end;


// tamanho da linha = 80 caracteres 

procedure TForm1.Button1Click(Sender: TObject);
var i, j : integer;
begin
   showmessage(inttostr(MEMO1.LINES.Count));
   for j := 1 to MEMO1.LINES.Count do
      begin
         if Length(MEMO1.LINES.Strings[j]) < 80 then 
            MEMO2.LINES.Append(StrPad(MEMO1.LINES.Strings[j],80,TACENTER))
         else
            begin
               MEMO2.LINES.Append(StrPad(MEMO1.LINES.Strings[j],80,TACENTER));
               MEMO2.LINES.Append(StrPad(copy(MEMO1.LINES.Strings[j],81,80),80,taLeftJustify));
            end;
      end;

   //Inicia a impressão
   Printer.Canvas.font.Name := 'Courier new';
   Printer.Canvas.font.size := 15;
   Printer.BeginDoc;
   Printer.Title := 'Emissor';

   //Conta quantidades de linhas no Memo
   for I := 0 to Memo2.Lines.Count - 1 do
   begin

      //Imprime as linhas
      Printer.Canvas.TextOut(1,(I - 1)*Printer.Canvas.TextHeight('Emissor'),Memo2.Lines[I - 1]);
   end;

   //Termina a impressão
   Printer.EndDoc;

end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Screenshot_5.png.a0520210217900fa722506d22edefe9f.png

No memo está saindo desta forma.. e na Impressão sai ao Lado Esquerdo

Será que tem que configurar para o modelo da impressora, uso aqui HP 390series

Percebi que se eu Colocar no Próprio Código do Memo.lines.Add,  Alinhado ao Meio, ele até que imprimi meio centralizado na Folha!!! Mais quero que ele faça isso de forma automática...

 

Creio que terá que configurar no próprio código algo relaciona a tamanho da Folha e etc.. 

 

Editado por valSistemasDelphi
errei
Link para o comentário
Compartilhar em outros sites

  • 0

Se voce tivesse colocado isso ( Impressão )  no começo eu diria que voce não deve usar justificação de texto mas sim tabulação de texto.

Voce vai tabular o texto no Memo, e depois fazer a impressão do Memo tabulado

exemplo:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    ComboBox1: TComboBox;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    Procedure Memo_Print(Conteudo:TStrings);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

Uses Printers;

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
  i : Integer;
begin
  // Pegar o nome de todas as Fontes e colocar no Combobox   
  for i := 0 to Screen.Fonts.Count - 1 do
   ComboBox1.Items.Add(Screen.Fonts.Strings[i]);

  // Deixar o Combobox Invisivel
  ComboBox1.Visible := false;

end;

Procedure TForm1.Memo_Print(Conteudo:TStrings);
Var
   MemoFile : TextFile;
   P : Integer;
Begin
   AssignPrn(MemoFile);
   Rewrite(MemoFile);
   For P := 0 to Conteudo.Count - 1 do
   Writeln(MemoFile,Conteudo.Strings[P]);
   CloseFile(MemoFile);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i : integer; TabsSet : Array[0..2] of DWord;
begin
  // Pegar o Nome da Fonte do Memo ( Courrier New )
  Memo1.Font.Name := ComboBox1.Items.Strings[16];

  // Mudar Tamanho da Fonte
  Memo1.Font.Size := 10;


  // Fazendo tabulacoes em um MEMO
  // tabs diferentes
  TabsSet[0] := 60;
  TabsSet[1] := 180;
  TabsSet[2] := 300;
  Memo1.Perform(EM_SETTABSTOPS,3,Integer(@TabsSet));

  // colocando valores no memo
  for i := 1 to 9 do  //  9 linhas no Memo
    Memo1.Lines.Add('Linha '+IntToStr(i)+#9'Opção '+IntToStr(i)+#9'Teste');

    Memo1.SelStart := 0;

    if MessageDlg('Deseja Imprimir o CUPOM ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
       begin
         Memo_Print(Memo1.Lines);
       end
    else
       begin
          MessageDlg('OPERAÇÃO CANCELADA! ', mtInformation, [mbOK], 0);

          // volta ao normal o texto no Memo ( sem espaçamento )
          Memo1.Perform(EM_SETTABSTOPS,0,0);
       end;

end;


end.

Obs: Execute esse programa sem alterar nada e veja o resultado.

Tente entender como funciona esse código

Fazendo algumas alterações no código, voce consegue fazer o que está querendo.

abraço

 

Link para o comentário
Compartilhar em outros sites

  • 0

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    ComboBox1: TComboBox;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    Procedure Memo_Print(Conteudo:TStrings);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

Obs: Se voce copiar o codigo todo não vai dar erro

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Cara o Código é show.. Mais infelizmente a impressão sempre sai a esquerda!! Deixa perguntar Sabe uma forma de Definir que e Papel a 4??? Via código!!! 

 

Os componentes de Relatórios já são definidos assim! Creio que está faltando isso!!

Editado por valSistemasDelphi
errei
Link para o comentário
Compartilhar em outros sites

  • 0

Veja a alteração no código da impressão

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    ComboBox1: TComboBox;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    Procedure Memo_Print(Conteudo:TStrings);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

Uses Printers, QRPrntr;

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
  i : Integer;
begin
  // Pegar o nome de todas as Fontes e colocar no Combobox   
  for i := 0 to Screen.Fonts.Count - 1 do
   ComboBox1.Items.Add(Screen.Fonts.Strings[i]);

  // Deixar o Combobox Invisivel
  ComboBox1.Visible := false;

end;

Procedure TForm1.Memo_Print(Conteudo:TStrings);
Var
   MemoFile : TextFile;
   P : Integer;
   PrintTeste: TQRPrinter;
Begin

   PrintTeste := TQRPrinter.Create(Self);
   PrintTeste.PaperSize := A4; {os parâmetros podem ser A5, B5, Letter e outros}

   AssignPrn(MemoFile);
   Rewrite(MemoFile);
   For P := 0 to Conteudo.Count - 1 do
   Writeln(MemoFile,Conteudo.Strings[P]);
   CloseFile(MemoFile);

end;

procedure TForm1.Button1Click(Sender: TObject);
var i : integer; TabsSet : Array[0..2] of DWord;
begin
  // Pegar o Nome da Fonte do Memo ( Courrier New )
  Memo1.Font.Name := ComboBox1.Items.Strings[16];

  // Mudar Tamanho da Fonte
  Memo1.Font.Size := 10;


  // Fazendo tabulacoes em um MEMO
  // tabs diferentes
  TabsSet[0] := 60;
  TabsSet[1] := 180;
  TabsSet[2] := 300;
  Memo1.Perform(EM_SETTABSTOPS,3,Integer(@TabsSet));

  // colocando valores no memo
  for i := 1 to 9 do  //  9 linhas no Memo
    Memo1.Lines.Add('Linha '+IntToStr(i)+#9'Opção '+IntToStr(i)+#9'Teste');

    Memo1.SelStart := 0;

    if MessageDlg('Deseja Imprimir o CUPOM ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
       begin
         Memo_Print(Memo1.Lines);
       end
    else
       begin
          MessageDlg('OPERAÇÃO CANCELADA! ', mtInformation, [mbOK], 0);

          // volta ao normal o texto no Memo ( sem espaçamento )
          Memo1.Perform(EM_SETTABSTOPS,0,0);
       end;

end;


end.

Não esqueça de definir

Uses Printers, QRPrntr;

Obs: Se o código não funcionar tente esses

https://www.google.com.br/search?source=hp&ei=hHU0X_WTLcTG5OUP3dyl4AM&q=mudar+tamanho+do+papel+delphi&o que=mudar+tamanho+do+papel+delphi&gs_lcp=CgZwc3ktYWIQAzIFCCEQoAE6BQgAELEDOggIABCxAxCDAToFCC4QsQM6CAguELEDEIMBOgIIADoCCC46BggAEBYQHjoHCCEQChCgAToICCEQFhAdEB5Q7g1YxERgwEpoAXAAeACAAfwBiAGaH5IBBjAuMjkuMpgBAKABAaoBB2d3cy13aXqwAQA&sclient=psy-ab&ved=0ahUKEwj15cKx45brAhVEI7kGHV1uCTwQ4dUDCAY&uact=5

abraço

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...