PDA

Ver la Versión Completa : Ayuda con paginacion


warlordbl
04-11-2005, 18:07:46
Hola, tengo un problemilla
me estoy introducioendo en esto... aver si alguien me puede ayudar
Tengo este codigo y lo utilizo para imprimir el contenido de un listview
Me gustaria lo siguiente

- Imprimir las cabeceras del listview
- Imprimir varias paginas ya que solo me imprime la primera

Si alguien le pudiera hecahr un ojo y aclarar mis dudas (como si fuera pa tontos) os lo agradeceria

procedure TForm1.BitBtn7Click(Sender: TObject);
var
AuxStr, columna1, columna2, columna3, columna4,columna5: string;
Indice, I ,item,pagina,numero,huecos,numero1,numero2,numero3,numero4,numero5,contador: Integer;
NumeroMaxLineas,NumeroMaxLineasAux: Integer;
BEGIN
with Printer do
try
Application.ProcessMessages;
Screen.Cursor := crHourGlass;
BeginDoc;
Canvas.Font.Name := 'Courier New';
Canvas.Font.Size := 10;
NumeroMaxLineas := PageHeight div (Canvas.TextHeight('M'));
NumeroMaxLineas := NumeroMaxLineas - 5;
I := 2;
AuxStr := 'LISTADO DE USUARIOS';
Canvas.TextOut(0,I * (Canvas.TextHeight('M')), AuxStr);
I := I + 1;
AuxStr := '==============================================';
Canvas.TextOut(0,I * (Canvas.TextHeight('M')), AuxStr);
I := I + 2;

for item := 0 to listview1.Items.Count - 1 do
begin

I := I + 1;
//Así sacas el valor del caption y los subitems de cada elemento
columna1 := listview1.Items[item].Caption;
columna2 := listview1.Items[item].SubItems[0];
columna3 := listview1.Items[item].SubItems[1];
columna4 := listview1.Items[item].SubItems[2];
columna5 := listview1.Items[item].SubItems[3];

columna2:=columna2 + ', ' + columna3;

numero1:= strlen(pchar(string(columna1)));
numero2:= strlen(pchar(string(columna2)));
numero3:= strlen(pchar(string(columna3)));
numero4:= strlen(pchar(string(columna4)));
numero5:= strlen(pchar(string(columna5)));

for contador:=0 to (3-numero1) do
begin
columna1:= columna1 + ' ';
end;
columna1:=columna1 + '- ';
for contador:=0 to (35-numero2) do
begin
columna2:= columna2 + ' ';
end;
for contador:=0 to (20-numero4) do
begin
columna4:= columna4 + ' ';
end;
for contador:=0 to (9-numero5) do
begin
columna5:= columna5 + ' ';
end;

AuxStr := columna1+columna2+columna4+columna5;
Canvas.TextOut(0,I * (Canvas.TextHeight('M')), AuxStr);
end;
enddoc;
Screen.Cursor := crDefault;
except
on EPrinter do
begin
Screen.Cursor := crDefault;
Application.MessageBox('Se produjo un error durante la impresión','Error', MB_ICONERROR or MB_OK);
end;
end;
end;

vtdeleon
04-11-2005, 18:39:49
Saludos
Bienvenido al ClubDelphi.

Aunque no aportare a tu duda, aportare un poco para la comunidad, diciendote que leas estos puntos: Guía de Estilo (clubdelphi.com/foros/guiaestilo.php), Etiquetas vB (clubdelphi.com/foros/misc.php?do=bbcode):=Delphi-SQL

Pd:Ves la diferencia en tu codigo?:D

andres1569
04-11-2005, 20:07:33
Hola:

A modo de orientación te diré que para saber el título de las cabeceras te mires la propiedad Columns del TListView.

Y ya que tú mismo calculas el número de líneas que le caben a la página, solo tienes que llevar un contador de las líneas que llevas dibujadas (impresas) y cuando alcanzas dicho número llamas NewPage, reseteas a 0 dicho contador, y sigues dibujando lineas a partir de arriba del Canvas.