PageControl + StringGrid en Delphi

| 2013-03-3 | No hay comentarios »

El PageControl
A veces, la cantidad de información que es necesario solicitar o mostrar excede la capacidad habitual de una ventana, siendo preciso usar varias para poder gestionar todos los controles requeridos. Una alternativa a la creación de múltiples ventanas consiste en definir varias páginas en la misma ventana, lo cual es posible mediante varios de los controles incluidos en Delphi. Entre ellos existe uno que nos permite gestionar varias páginas en un form. Este control se llama TPageControl y dispone de las siguientes propiedades:

Propiedades Tipo Contenido
ActivePage TTabSheet Página actualmente activa
MultiLine Boolean Indica si se permiten varias líneas
PageCount Integer Número de páginas existentes
Pages TTabSheet Matriz con las páginas existentes
TabHeight SmallInt Altura de las pestañas de las páginas
TabWidth SmallInt Anchura de las pestañas de las páginas

Cada una de las páginas contenidas en un control TPageControl es un objeto de tipo TTabSheet. Podemos acceder o modificar la página activa mediante la propiedad ActivePage y acceder a cada una de las páginas a través de la propiedad Pages, que es una matriz de objetos TTabSheet. Esta matriz contendrá tantos elementos como indique la propiedad PageCount, que está disponible sólo en tiempo de ejecución y, además, es de sólo lectura.

Definir las páginas de un TPageControl

Al insertar un control TPageControl en el form tan sólo tendremos una superficie con un borde, similar a un TPanel, pero en principio no existirá página alguna. Cada vez que deseemos añadir una página al control deberemos abrir el menú emergente, pulsando el botón derecho del ratón con el puntero sobre el control, y seleccionar la opción New Page. Al hacerlo aparecerá una página vacía con un título por defecto en la pestaña y en el Inspector de objetos podremos ver las propiedades del objeto TTabSheet que acabamos de crear.

Mediante las propiedades del TTabSheet podemos establecer el título que aparecerá en la pestaña (Caption), el tipo de letra (Font), su estado actual (Enabled y Visible), etc. Además de estas propiedades, habituales en todos los componentes visibles, al actuar como un contenedor para los controles, un TTabSheet cuenta también con las propiedades ComponentCount, Components, ControlCount y Control.

Por defecto la pestaña de acceso a una página está visible, lo que permite en tiempo de ejecución que el usuario pueda pulsarla activando esa página. Podemos dar el valor False a la propiedad TabVisible del TTabSheet para ocultar la pestaña correspondiente, desactivando así el acceso a esa página.

Propiedades comunes a todas las páginas

Por defecto, cada una de las pestañas ajusta su tamaño al necesario para contener el título que se haya asignado a la propiedad Caption. Esto es así porque inicialmente las propiedades TabHeight y TabWidth tienen el valor cero, pero asignando el valor que a nosotros nos interese podremos establecer un alto y ancho común para todas las pestañas.

Por regla general el número de páginas existentes en una ventana no es muy grande, por lo que todas las pestañas se pueden alinear en una sola fila. En caso de que esto no sea posible, automáticamente aparecerá en el extremo derecho un control con dos botones, que permitirán el desplazamiento de las pestañas a izquierda y derecha. Si no queremos este funcionamiento, podemos dar el valor True a la propiedad MultiLine, lo que hará que las pestañas se distribuyan en tantas filas como sea necesario.

Métodos de TPageControl

Ya sabemos que en tiempo de ejecución el usuario puede cambiar la página activa de un TPageControl con tan solo una pulsación de ratón. Nosotros, desde el código de nuestro programa, también podemos cambiar de una página a otra, simplemente asignando a la propiedad ActivePage el nombre del TTabSheet correspondiente.

Otra forma de cambiar de una página a otra en utilizar el método SelectNextpage, que nos permite desplazarnos a la página siguiente o anterior, dependiendo de que pasemos como parámetro el valor True o False, respectivemente. También podemos usar el método FindNextPage, que facilita el desplazamiento a la página siguiente o anterior a una dada. Al llamar a este método pasaremos tres parámetros: el nombre de la página de referencia, un valor de tipo Boolean indicando si se desea ir a la siguiente, True, o a la anterior, False y por último otro valor de tipo Boolean, que en caso de ser True indicará al control que sólo devuelva páginas que estén activas.

TTabControl

El control TTabControl , es por el contrario un control simple, que muestra con una apariencia prácticamente idéntica a un TPageControl. Las diferencias, sin embargo, son muchas, ya que el TTabControl no actúa como un contenedor, ni intercambia automáticamente páginas. Su finalidad es, por lo tanto, servir simplemente como un conjunto de opciones que se muestran en forma de pestañas, de las cuales se puede seleccionar una en cada momento.

COMPONENTE StringGrid 

Este componente es de los mas importantes, para el procesamiento de muchos datos, permite concentrar, procesar y mostrar gran cantidad de información para la vista del usuario.

Este componente presenta, manipula y procesa conjuntos de datos de tipo strings en forma tabular, es decir en forma de tablas, matrices, cuadros concentrados, ejemplo; INGRESOS POR VENTAS MENSUALES
MILLONES DE PESOS

ENE FEB MAR ABR
SUC A 1 2 3 4
SUC B 5 6 4 5
SUC C 6 7 8 9
Recordar que son los datos numéricos internos quienes se procesan (es decir, se capturan, se realizan operaciones con ellos, se despliegan, etc.), es la información externa quien le da sentido.

Y RECORDAR QUE SUS INDICES EMPIEZAN EN FILA=0 y COLUMNA=0.

Algunas de sus propiedades y métodos mas interesantes son:
ColCount.- Determina la cantidad de columnas que contendrá la tabla.
Recordar que para efectos de programación, la primera de ellas es la columna 0.
RowCount.- Determina la cantidad de renglones (filas) que contendrá la tabla.
Recordar que para efectos de programación, el primero de ellos es el renglón 0.
Fixedcol , Fixedrow.- Determinan la cantidad de columnas y renglones fijos o de encabezado, estas propiedades ponerlas en 0.
+Options, goediting = true; Para que permita editar o capturar datos al usuario.
+Options, gotab = true; Para que el usuario pueda navegar entre celdas usando la tecla del tabulador.
Cells[columna,fila], Es la propiedad mas importante, porque es la que permite el acceso a cualquier celda de la tabla, ej.
StringGrid1.Cells[1,1] := ‘PATO’;
Edit1.Text=StringGrid1.Cells[0,0];

Las demás propiedades investigarlas en la ayuda del borland delphi .

Codigos utiles
¿Como paso de una pestaña a otra?

PageControl1.TabIndex:=1; //pestaña 0, pestaña 1, pestaña 2



¿Como agrego una fila mas?

StringGrid1.RowCount :=StringGrid1.RowCount+1;//agrego una fila mas

¿Como agrego datos a una fila en el StringGrid?

//Existen dos formas
      //PRIMERA OPCION
      with StringGrid1 do
      begin
        Cells[columna, fila] := maskedit1.Text; //codigo
        Cells[columna, fila] := edit1.Text; //descripcion
      end;
      //SEGUNDA OPCION: Da el mismo resultado
        StringGrid1.Cells[columna, fila] := maskedit1.Text; //codigo
        StringGrid1.Cells[columna, fila] := edit1.Text; //descripcion

¿Como eliminar una fila en el StrinGrid?
Para eliminar debemos realizar los siguientes pasos: 1) Borrar el contenido de la fila, 2) Alzar el conenido de la fila de abajo en la fila de arriba (esto se repite hasta la ultima fila) y 3) Eliminar la ultima fila.OBS: se puede obviar el paso 1.

//Borrar el contenido de la fila
StringGrid1.Rows[StringGrid1.Row].Clear;//Elimino el contenido de la fila seleccionada
//Alzamos una fila todo el contenido a partir de la fila eliminada.
var i: integer;
for i:=StringGrid1.Row to StringGrid1.RowCount do //Recorro desde la fila selccionada
    begin
          stringGrid1.Rows[i]:=StringGrid1.Rows[i+1];//Copia en la fila de arriba la fila de abajo
    end;
//Si al final quedan 2 filas iguales eliminamos la ultima fila.
stringGrid1.RowCount:=StringGrid1.RowCount-1;

Tener en cuenta:
La cantidad de filas: stringGrid1.RowCount
La posicion de seleccion en un StringGrid: StringGrid1.Row

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • Manual básico de Delphi
  • Reportes en Delphi
  • DBLookupComboBox en Delphi
  • Busqueda de registros en Delphi



SEGUÍNOS EN FACEBOOK


GITHUB