Tutorial LazReport y StringGrid.pdf

(82 KB) Pobierz
Tutorial de LazReport, variables locales  y StringGrid 
 
Este tutorial intenta explicar cómo enviar variables locales y datos contenidos en un StringGrid a 
un reporte construido con LazReport en Lazarus. 
Para enviar una variable local a un reporte LazReport, lo que debemos hacer es lo siguiente: 
1) Crear una variable en LazReport y no asignarle ningún valor. 
Esto se hace a través del menú archivo > lista de variables > variables en LazReport 
Creamos una variable y no le asignamos ningún valor.  
 
2) Configurar el evento  OnGetValue de nuestro TfrReport para que asigne el valor de nuestra 
variable local a su correspondiente variable en el reporte. 
Suponiendo 
 
que  nuestra  variable  local  se  llama  var_local  y  nuestra  variable  en  el 
reporte se llama var_reporte, en el evento OnGetValue escribimos: 
 
If ParName = ‘var_reporte’ then 
  ParValue := var_local; 
 
Para enviar los datos de un StringGrid a LazReport, a diferencia de un DBGrid, debemos utilizar  un 
componente llamado TfruserDataset, el cual va a reflejar las filas de nuestro StringGrid para poder 
ser incluidas en el reporte. Lo que debemos hacer es lo siguiente: 
1) Agregar  un TfrUserDataset a nuestro formulario y configurarlo en  la propiedad Dataset 
de nuestro TfrReport. 
2) Crear una variable tipo longint cuyo alcance sea privada o pública al formulario con el que 
se  está  trabajando,  por  ejemplo  FRow.  Esta  variable  se  utilizará  para  referenciar  las 
distintas filas de nuestro StringGrid. 
3) Luego  hay  que  “dimensionar”  nuestro  TfruserDataset,  lo  cual  haremos  de  la  siguiente 
manera: 
Configuramos  la  cantidad  de  filas  mediante  el  evento  OnCheckEOF.  Esto  lo  hacemos 
de la siguiente manera: 
procedure TForm1.frUserDataSet1CheckEOF(Sender: TObject; var Eof: Boolean); 
begin 
   Eof := FRow > StringGrid1.RowCount ‐ 1; 
end; 
De esta forma indicamos la cantidad de filas. La propiedad RowCount de un StringGrid 
indica la cantidad de filas (le restamos 1 porque empieza a contar desde 0, osea que si 
tiene 5 filas estas serán la 0, la 1, la 2, la 3 y la 4). 
4) Ahora  hay  que  indicar  desde  que  fila  queremos  que  empiece.  Generalmente  la  fila  0  es 
para los títulos de las columnas, asi que si este es el caso, empezaremos desde la fila 1. 
Configuramos el evento OnFirst de nuestro TfrUserDataSet de la siguiente manera: 
procedure TForm1.frUserDataSet1First(Sender: TObject); 
begin 
  FRow := 1; 
end; 
De esta forma indicamos que queremos que se empiece a partir de la fila 1 (dado el 
caso por ejemplo que en la fila 0 estén los títulos de las columnas). 
5) Configuramos el evento OnNext del TfrUserDataSet: 
  procedure TForm1.frUserDataSet1Next(Sender: TObject); 
begin 
   Inc(FRow); 
end; 
6) Con eso queda configurado el TfrUserDataSet. Ahora hay que preparar el TfrReport para 
recibir los datos.  
Dentro  de  nuestro  reporte  creamos  una  variable  para  cada  campo  de  nuestro 
StringGrid que querramos incluir. 
En  el  reporte,  agregamos  una  banda  tipo  Master  Data,  y  agregamos  los  objetos 
rectangulares  de  texto  según  sea  necesario,  uno  con  cada  una  de  las  variables 
anteriormente creadas. Las acomodamos de forma que queden bonitas ☺ 
Luego configuramos el evento OnGetValue (como explicamos en la primera parte de 
este  tutorial)  para  asignar  los  campos  de  la  StringGrid,  aprovechando  la  propiedad 
Cells de la misma (primero la columna, luego la fila).  
procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant 
  ); 
begin 
  if ParName = 'variable_1' then 
    ParValue := StringGrid1.Cells[1, FRow]; 
     
  if ParName = 'variable_2' then 
    ParValue := StringGrid1.Cells[2, FRow]; 
 end;   
Básicamente  con  esto  estamos  listos.  Acompañando  este  tutorial  hay  un  pequeño  ejemplo  para 
demostrar lo explicado. Espero que a alguien le sea de alguna ayuda. Quien quiera por cualquier 
cosa puede escribirme a german.basisty@gmail.com 
Saludos! 
Zgłoś jeśli naruszono regulamin