Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Boton para imprimir tmemo (https://www.clubdelphi.com/foros/showthread.php?t=71861)

JorgeDiaz 14-01-2011 19:45:58

Boton para imprimir tmemo
 
Buenos dias, quisiera saber como poner un boton para que al darle click, poder imprimir mi TMemo, garcias.

ecfisa 14-01-2011 20:14:07

Hola Jorge.

Poner un botón y asignar evento OnClick: Desde la paleta de componentes pone un TButton en el Form. Seleccionado el TButton,
hacé click sobre la pestaña events, doble click sobre el evento OnClick.

Imprimir: Existe más de una forma hacerlo, ya sea que uses algún Report, o mediante la unit Printers.

Te pongo un ejemplo de como imprimir del último modo:
Código Delphi [-]
...
uses Printers;

procedure Imprimir(TS : TStrings) ;
var
  i: Integer;
  Linea: Integer;
begin
  Linea := 0 ;
  Printer.BeginDoc;
  for i := 0 to TS.Count - 1 do
  begin
    Printer.Canvas.TextOut(0, Linea, TS[i]);
    Linea := Linea + Abs(Printer.Canvas.Font.Height);
    if (Linea >= Printer.PageHeight) then
      Printer.NewPage;
  end;
  Printer.EndDoc;
end;

Llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Imprimir(Memo1.Lines);
end;

Saludos.

Caral 14-01-2011 20:19:52

Hola
Bueno, aparte de lo dicho por el Maestro ecfisa:
Para poner un boton se tiene que hacer con mucho cuidado.:D
Aqui pongo un ejemplito con QReport.
Saludos

Casimiro Noteví 14-01-2011 20:23:26

Creo recordar que también puedes poner el botón y al pulsarlo:

memo1.print('');

Se acabó.

ecfisa 14-01-2011 20:31:07

Cita:

Empezado por Caral (Mensaje 387606)
Hola
Para poner un boton se tiene que hacer con mucho cuidado.:D

Una afirmación que difícilmente se pueda superar... :D:D:D

Un saludo.

ecfisa 14-01-2011 20:35:00

Hola Casimiro.

También fué lo primero que pensé, pero esa propiedad aparentemente la tiene el RichEdit pero no el Memo.

Habría que probar si funciona:
Código Delphi [-]
TRichEdit(Memo1).Print('');
Luego te comento.

Un saludo.

Caral 14-01-2011 20:38:15

Hola
Ya decia yo que eso no me lo habian enseñado...:D:D;)
Saludos amigos.

JorgeDiaz 14-01-2011 20:39:38

Gracias por las respuestas, tratare de hacerlo haber si me sale, ya que soy nuevo en esto, comentare despues, gracias.

ecfisa 14-01-2011 20:45:03

Hola de nuevo.

La sentencia
Código Delphi [-]
TRichEdit(Memo1).Print('');

definitivamente no funciona.

Un saludo.

JorgeDiaz 14-01-2011 20:55:10

Bueno puse un Tbutton en el form y puse esto

procedure TForm1.Button1Click(Sender: TObject);
begin
Imprimir(Memo1.Lines);
end;

Pero cuando le doy Run, no me manda el fom, me mande de nuevo a lo que escribi peroesta linea en rojo

Imprimir(Memo1.Lines);

Estoy haciendo algo mal?

ecfisa 14-01-2011 21:01:52

Hola.

Si pusiste el TButton con su evento asignado, el TMemo con algún contenido y el procedimiento 'Imprimir', tendría que funcionar.

¿ Te arroja algún error ?

Saludos.

Casimiro Noteví 14-01-2011 21:09:36

Cita:

Empezado por ecfisa (Mensaje 387612)
Hola de nuevo.
La sentencia
Código Delphi [-]TRichEdit(Memo1).Print('');


definitivamente no funciona.

Un saludo.

Añade ComCtrls al uses y prueba:
Código Delphi [-]
TRichEdit(mm1).Print('');

JorgeDiaz 14-01-2011 21:12:34

Esto es lo que hice, inicie un nuevo proyecto, inserte un Tmemo, despues inserte un TButton, hize doble click en el TButton y me mando a la ventana con esto

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

despues agregue lo que me mencionaron, Imprimir(Memo1.Lines);
y me quedo asi

procedure TForm1.Button1Click(Sender: TObject);
begin
Imprimir(Memo1.Lines);
end;

Y al darle Run me hace lo que mencione antes la linea en donde esta ¨"Imprimir(Memo1.Lines);" esta en color rojo

ecfisa 14-01-2011 21:17:19

Hola Jorge.

Me dá la impresión de que tenés puesto un Break en esa línea ( un círculo rojo sobre el márgen del editor ).

Si es así hacé click sobre él, desaparecerá y continuará la ejecución del programa.

Saludos.

ecfisa 14-01-2011 21:26:35

Cita:

Empezado por Casimiro Notevi (Mensaje 387617)
Añade ComCtrls al uses y prueba:
Código Delphi [-]
TRichEdit(mm1).Print('');

Hola Casimiro.

Este es el código que usé para la prueba:
Código Delphi [-]
...
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, StdCtrls, ComCtrls, Dialogs;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button2: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

uses Printers;

procedure TForm1.FormShow(Sender: TObject);
begin
   Memo1.Lines.LoadFromFile('C:\PRUEBA.TXT');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  TRichEdit(Memo1).Print('');
end;
...

Me dá violación de acceso, no sé que pueda estar fallando (o faltando)...

¿ Le haces algúna conversión previa ?

Un saludo.

JorgeDiaz 14-01-2011 21:28:01

Sera acaso que la version que tengo esta en ingles? digo por lo de "Imprimir" en el codigo que pongo.

y no la verdad no encuentro eso del break que me dices.

ecfisa 14-01-2011 21:36:37

Hola Jorge.

No, no tiene nada que ver el nombre del procedimiento; puede ser el que gustes.

Te pongo el código completo que usé para la prueba ( funciona bién ), a ver si te sirve:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

uses Printers;

procedure TForm1.FormShow(Sender: TObject);
begin
   Memo1.Lines.LoadFromFile('C:\PRUEBA.TXT');
end;

procedure Imprimir(TS : TStrings);
var
  i: Integer;
  Linea: Integer;
begin
  Linea := 0 ;
  Printer.BeginDoc;
  for i := 0 to TS.Count - 1 do
  begin
    Printer.Canvas.TextOut(0, Linea, TS[i]);
    Linea := Linea + Abs(Printer.Canvas.Font.Height);
    if (Linea >= Printer.PageHeight) then
      Printer.NewPage;
  end;
  Printer.EndDoc;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Imprimir(Memo1.Lines);
end;

end.

Nota: Si lees la guia de estilo verás que dice: "No solicites que te respondan por correo en privado".

Uno: Las respuestas en privado no sirven a otros compañeros.
Dos: Te van a llenar de spam.

Un saludo.

JorgeDiaz 14-01-2011 21:40:29

Todo este codigo en donde lo tengo que inserta, disculpa mi ignorancia.

Caral 14-01-2011 21:43:44

Hola
Ahora pregunto:
Este codigo funciona pero imprime directamente, osea se necesita tener conectada la impresora etc.?
Lo digo por que a mi se me traba, no hace nada, eso si, no tengo la impresora conectada.
Saludos

ecfisa 14-01-2011 21:49:43

Cita:

Empezado por Caral (Mensaje 387627)
Hola
Ahora pregunto:
Este codigo funciona pero imprime directamente, osea se necesita tener conectada la impresora etc.?
Lo digo por que a mi se me traba, no hace nada, eso si, no tengo la impresora conectada.
Saludos

Si así es.
Era sólo un ejemplo, habría que agregar las comprobaciones necesarias para detectar la impresora.

Indudablemente le sería más simple utilizar el ejemplo de QReport que adjuntaste.

Un saludo.

ecfisa 14-01-2011 21:57:54

Cita:

Empezado por JorgeDiaz (Mensaje 387625)
Todo este codigo en donde lo tengo que inserta, disculpa mi ignorancia.

Prácticamente casi todo el código que ves, lo genera Delphi al agregar componentes y asignar eventos.
En realidad el único código que se 'ingresaría por teclado' (o copiado /pegado) es el del procedimiento Imprimir.
Además del contenido dentro de las cabeceras que Delphi crea para los eventos, como por ejemplo: Imprimir(Memo1.Lines);


Saludos.

JorgeDiaz 14-01-2011 22:07:35

Espero no ser muy molesto, pero la verdadsoy un novato en esto, ya q manejaba VB, pero ahi solo ponias el codigo

Private Sub Command1_Click()
Me.PrintForm
End Sub

y ya jaja tendre que leer mas sobre este programa Delphi, bueno n sera mucha molestia que subas el archivo que dices que te funciono?

ecfisa 14-01-2011 22:12:38

No Jorge, no es ninguna molestia.

Saludos.

JorgeDiaz 14-01-2011 22:24:06

Baje el zip, descomprimi, pero no me sale com reconosido, tengo la version Delphi 7 Second Edition v 7.2, se debera a algo de eso.

ecfisa 14-01-2011 22:34:51

Cita:

Empezado por JorgeDiaz (Mensaje 387636)
Baje el zip, descomprimi, pero no me sale com reconosido, tengo la version Delphi 7 Second Edition v 7.2, se debera a algo de eso.

No creo que sea ese el problema yo uso la versión 7 Enterprise.

Lo acabo de descargar y no me dá ningún problema. Por las dudas eliminá el archivo 'Project1.res'.

¿ Podrías poner exáctamente el error que te arrojó ?

Un saludo.

Casimiro Noteví 14-01-2011 22:38:18

Cita:

Empezado por ecfisa (Mensaje 387622)
[..] Me dá violación de acceso, no sé que pueda estar fallando (o faltando)... [..]

Te digo lo que está fallando: yo.
Había puesto un trichedit en lugar de un tmemo :D :o:o:o

ecfisa 14-01-2011 22:45:51

Cita:

Empezado por Casimiro Notevi (Mensaje 387639)
Te digo lo que está fallando: yo.
Había puesto un trichedit en lugar de un tmemo :D :o:o:o

Bueno, a mí me fué bastante útil, ahora no volveré a intentar ese cast... :D

Un saludo.

JorgeDiaz 14-01-2011 22:49:57

Bueno baje el zip, descomprimi, me mando un archivo que se llama PrintMemo, sin extension y el icono de ese archivo es la venta de windows, como cuando no tienes el programa instalado, le doy doble click sobre el y me manda a la ventana que pregunta " con que programa deseo abrirlo"

Ahora le puse extension .pas y al darle doble click lo abre con delphi pero me lo habre en donde pones los codigos y en lugar de codigos se ven puros cuadros, una q otra letra, nose si sea por la version.

ecfisa 14-01-2011 23:20:53

Hola.

Por lo que comentas el problema debe estar en la versión de WinZip. Te adjunto otro zip pero sin comprimir para ver si así podés abrirlo.

Un saludo

JorgeDiaz 14-01-2011 23:26:39

Mmmm sigue igual, estoy bajando la misma version que tu usas por si de pura casualidad fuera eso.

No me podrias mandar el archivo tal cual, ya sea a mi correo? digo si no es molestia, gracias y perdon por tantas dudas y por tomarte el tiempo de disiparmelas, de antemano te lo agradezco.


La franja horaria es GMT +2. Ahora son las 19:20:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi