PDA

Ver la Versión Completa : Necesito Ayuda con Printer.Canvas !!!


Peterlolazo
18-10-2007, 11:58:54
necesito ayuda!!! estoy haciendo un programa cuyo fin es imprimir los datos que se introduscan en edits, y no deben salir los edits vacios, pero si no lleno los edits con datos sale el espacio en blanco en la pagina, y como son muchos edits los que siempre se dejan en blanco, queda muchisimo espacio en la hoja, ¿como hago para que en la impresion solo me salgan ordenaditos los edits llenados con datos uno debajo del otro? ejemplo para que entiendan mejor.

If principal.Edit6.text<> '' then
Printer.Canvas.textout(2500,690,principal.Edit6.text );

If principal.Edit7.text<> '' then
Printer.Canvas.textout(2500,780,principal.Edit7.text);

If principal.Edit5.text<> '' then
Printer.Canvas.textout(2500,870,principal.Edit5.text );

lo que sucede es que si no lleno el edit7 me queda todo ese espacio vacio... ayuda, el edit 5 deberia tomar el lugar del 7... son como 70 edits!!!.

ArdiIIa
18-10-2007, 12:14:25
Bienvenido al foro.
A ver si así vale:



procedure TPrincipal.Button1Click(Sender: TObject);
Var I ,X , Y : integer;
begin
X := 2500;
Y := 900;
For I := 0 to Principal.ControlCount -1 DO
If Principal.Controls[I] is TEdit then
if TEdit(Principal.Controls[I]).Text <> ''then
Begin
Printer.Canvas.textout(X,Y,TEdit(Principal.Controls[I]).Text);
Inc(Y,900);
End;

end;

Peterlolazo
18-10-2007, 12:30:38
Hasta ahora Esta Funcionando de maravilla. Solo que tengo que Imprimir Varios Labels tambien al lado de esos Edits. pero y ame imagino mas o menos como los tengo que hacer... Por ahora Gracias por la Ayuda:)

Pero por si acaso... Cada uno de esos Edits tiene un Label a la Derecha y otro a la Izquierda.... Como logro que se impriman los Labels al lado del Edit Correspondiente?

ArdiIIa
18-10-2007, 12:39:31
Por si acaso, inténtalo primero, y luego veremos si hay problemas.:D

Peterlolazo
18-10-2007, 12:41:35
Pues la verdad lo puse pork ya lo intente :D y no pude hacerlo...
Lo unico que creo poder hacer es Ponerle una Underline a todo eso....
que se hace con

Printer.Canvas.MoveTo(x,y);
Printer.Canvas.LineTo(x,y);


Pero ya seguro que lo sabes ;)

Por ejemplo. Tome el Codigo que me mandaste hace un rato y mira lo que hice...



procedure THematologia.Button2Click(Sender: TObject);


Var I ,X , Y: integer;
begin
X := 2000;
Y := 900;


Printer.BeginDoc;
For I := 0 to ControlCount -1 DO
If Controls[i] is TEdit then
if TEdit(Controls[i]).Text <> ''then
Begin

Printer.Canvas.textout(X,Y,TEdit(Controls[i]).Text);

Inc(Y,100);

Printer.Canvas.MoveTo(40,y);

Printer.Canvas.LineTo(Printer.PageWidth-20,y);

Inc(Y,100);

End;
Printer.EndDoc;

end;


end.

Peterlolazo
19-10-2007, 05:05:00
Bueno Gracias Por todo Ardilla. Ya lo hice :cool:

Unos Codigos ALgo arcaicos debo agregar.. Pero el caso es que lo haga :P

ArdiIIa
19-10-2007, 10:25:57
Ok.
Solamente es cuestión de intentarlo.

PD: No es muy sano requerir estas cuestiones en mensajes privados ni por email.