PDA

Ver la Versión Completa : Contar líneas en un QRDBText


YaninaGenia
02-12-2005, 16:20:14
Tengo un QRDBText al que le puse las propiedades AutoStretch y WordWrap en true para que siga abajo si el contenido del campo que tiene relacionado tiene muchas palabra sy no entran en un solo renglón. ¿Hay alguna manera de contar los renglones de ese QRDBText? Si hago QRDBText.lines.count no funciona, devuelve siempre cero pero en realidad hay cuatro o más lineas.

Yanina Genia

Casimiro Notevi
02-12-2005, 19:45:45
Puedes "recorrerlo" y contar los caracteres 13 (intro) que tiene


var iX, iLineas :integer;
var cT :string;
begin
iLineas:=0;
cT := qrTEXT.asString;
for iX:=1 to length(cT) do
if cT[iX]=#13 then
inc(iLineas);

// en iLineas tienes el número de líneas
end;

YaninaGenia
02-12-2005, 21:31:27
No funciona!!!
No necesariamente se pasa de línea con un Enter, es algo que hace el QRDBText al setearle yo el AutoStretch y el WordWrap, el largo se lo pongo yo, y si los datos que saca de la base son más largos de lo que yo le puse, entonces continúa abajo, es algo automático.

Yanina Genia

jhonny
02-12-2005, 22:16:42
Seria = a la cantidad de caracteres que fueron impresos en ese QRDBText divididos la cantidad de caracteres que caben en una sola linea, Por ejemplo:

Esta es la capacidad maxima de una linea <- Hasta aqui hay 41 caracteres
Esta es la segunda linea <- Hata aqui hay 65 caracteres

Entonces la cantidad de lineas seria 65/41 que es igual a 1.4878048780487804878048780487805

Alli puedes deducir ya que hay 2 lineas y con la funcion Ceil arreglartelas para acomodar la cosa ;)

Casimiro Notevi
02-12-2005, 23:14:30
No funciona!!!
No necesariamente se pasa de línea con un Enter, es algo que hace el QRDBText al setearle yo el AutoStretch y el WordWrap, el largo se lo pongo yo, y si los datos que saca de la base son más largos de lo que yo le puse, entonces continúa abajo, es algo automático.Yanina Genia
Había entendido otra cosa :(

jhonny
03-12-2005, 00:10:59
Para ampliar un poco, la funcion puede ser algo asi:


Ceil(Length(TDataSetCampo.AsString)/41);


espero te sirva. ;)

YaninaGenia
05-12-2005, 13:49:04
Tengo que declarar algo antes para usar esta funcion? Porque se enojó Delphi, dice que no lo declaré en ningún lado y que por eso ahora no lo va a usar.
A mi se me ocurrió algo así, pero lo hice sin función y estaba buscando algo para que quede más prolijo, hice:

DetalleReporte.Height := DetalleReporte.Height + 17*((length(trim(query3.FieldByName('PAQ_SOLICITADO').AsString))div 80)+1);

Se supone que aumenta el ancho del detalle a medida que se incrementan las líneas. Y me funciona bastante bien, pero buscaba eso, algo más estético.
Hice 17 porque es el ancho de una línea, y le sumo 1 porque si tengo por ejemplo 150 caracteres, el div me va a dar 1. Y si los caracteres son 70, el div da cero, así que le suma 1 y queda bien.

Yanina Genia