TsWorksheetGrid:
← Older revision
Revision as of 11:41, 20 January 2015
(15 intermediate revisions by one user not shown)
Line 70:
Line 70:
En efecto, necesitaremos '''otra toolbar''' para la línea del editor de fórmulas. Como verás más adelante, será redimensionable; como control de tamaño añade un '''TSplitter''' al formulario con una alineación top de tal manera que esté posicionado debajo de las dos barras de utilidades. En orden a mantener un tamaño mínimo para la toolbar se establecen restricciones: Mira la altura actual de la toolbar e introduce su valor numérico dentro del campo <code>MinHeight</code> de la propiedad <code>Constraints</code> en la toolbar. Para separar la barra de utilidades (toolbar) de fórmulas del resto del formulario principal, activamos la opción <code>ebBottom</code> de la propiedad <code>EdgeBorders</code> de la segunda toolbar.
En efecto, necesitaremos '''otra toolbar''' para la línea del editor de fórmulas. Como verás más adelante, será redimensionable; como control de tamaño añade un '''TSplitter''' al formulario con una alineación top de tal manera que esté posicionado debajo de las dos barras de utilidades. En orden a mantener un tamaño mínimo para la toolbar se establecen restricciones: Mira la altura actual de la toolbar e introduce su valor numérico dentro del campo <code>MinHeight</code> de la propiedad <code>Constraints</code> en la toolbar. Para separar la barra de utilidades (toolbar) de fórmulas del resto del formulario principal, activamos la opción <code>ebBottom</code> de la propiedad <code>EdgeBorders</code> de la segunda toolbar.
−
Debido a que tanto el menú como las barras de utilidades tienen que manejar las mismas acciones de usuario resulta ventajoso aportar un '''TActionList''' para almacenar todas las posibles acciones.
If assigned to the menu items and toolbuttons both will react on user interaction in the same way
sin necesidad de código adicional.
And
:
lso
FPSpreadsheet
visual controls package contains
a
bunch of spreadsheet-related standard actions ready to use
.
+
Debido a que tanto el menú como las barras de utilidades tienen que manejar las mismas acciones de usuario resulta ventajoso aportar un '''TActionList''' para almacenar todas las posibles acciones.
Si se asigna a los elementos del menú y a los pulsadores de utilidades (ToolButtons) entonces ambos reaccionarán a la interacción del usuario de la misma manera
sin necesidad de código adicional.
Y
:
además los controles visuales del paquete
FPSpreadsheet
contienen un montón de acciones estandar listas para usar.
+
+
La barra de utilidades de la aplicación completa va
a
contener un montón de iconos. Por tanto necesitamos un componente '''TImageList''' el cual tiene que ser enlazado a la propiedad <code>Images</code> del menú principal (TMainMenu), las barras de utilidades (TToolbars), y los listados de acciones (TActionList). A la pregunta de donde obtener iconos la respuesta más fácil es buscar en la carpeta <code>images</code> de la propia instalación de Lazarus donde podemos encontrar iconos estandar para cargar, salvar, salir, flechas, imprimir,configurar,.... Es un subconjunto de la [http://www.famfamfam.com/lab/icons/silk/ librería de iconos famfamfam SILK]. Otra enorme colección se encuentra en [http://p.yusukekamiyamane.com/ la colección de iconos Fugue]. Ambas colecciones están licenciadas como "Creative commons" y son libres incluso para su uso comercial, añadiendo la referencia apropiada en los programas creados. Cuando selecciones iconos procura que tengan el formato de imagen png y asegúrate de utilizar siempre el mismo tamaño, usualmente 16x16 pixels
.
=== Setting up the visual workbook ===
=== Setting up the visual workbook ===
Line 77:
Line 79:
Tal como se ha descrito en la sección de introducción, el componente '''TsWorkbookSource''' es el interface entre WorkBook y los controles de interface de usuario. Se añade por tanto este componente al formulario y se le asigna un nombre decente (en este caso dejaremos el nombre que tiene por defecto <code>sWorkbookSource1</code>). Como veremos en breve, este componente tendrá que ser asignado a la propiedad <code>WorkbookSource</code> de todos los controles del paquete visual FPSpreadsheet_visual.
Tal como se ha descrito en la sección de introducción, el componente '''TsWorkbookSource''' es el interface entre WorkBook y los controles de interface de usuario. Se añade por tanto este componente al formulario y se le asigna un nombre decente (en este caso dejaremos el nombre que tiene por defecto <code>sWorkbookSource1</code>). Como veremos en breve, este componente tendrá que ser asignado a la propiedad <code>WorkbookSource</code> de todos los controles del paquete visual FPSpreadsheet_visual.
−
WorkBookSource se encarga de la carga y
lectura
de datos desde/hacia el fichero y de la comunicación con
workbook
. Por tanto, posee un conjunto de opciones que se pasan al WorkBook y controla estos procesos:
+
WorkBookSource se encarga de la carga y
escritura
de datos desde/hacia el fichero y de la comunicación con
WorkBook
. Por tanto, posee un conjunto de opciones que se pasan al WorkBook y controla estos procesos:
−
[[file:sTabControl.png|right|400px]]
+
<syntaxhighlight>
<syntaxhighlight>
type
type
Line 84:
Line 86:
TsWorkbookOptions = set of TsWorkbookOption;
TsWorkbookOptions = set of TsWorkbookOption;
</syntaxhighlight>
</syntaxhighlight>
+
[[file:sTabControl.png|right|400px]]
Los más importantes son:
Los más importantes son:
−
The most important ones are
−
* <code>boAutoCalc</code>: activates automatic calculation of formulas whenever cell content changes.
−
* <code>boCalcBeforeSaving</code>: calculated formulas before a workbook is written to file
−
* <code>boReadFormulas</code>: if set full formulas are read from the file, otherwise only formula results.
−
* <code>boBufStream</code> and <code>boVirtualMode</code>: In non-visual programs, these options can help if running out of memory in case of large workbooks. <code>boVirtualMode</code>, in particular, is not usable for visual applications, though, because it avoids keeping data in the worksheet cells. See also [[FPSpreadsheet#Virtual_mode]].
−
In this tutorial, it is assumed that the options
<code>boAutoCalc</code>
and
<code>boReadFormulas</code>
are activated
.
+
*
<code>boAutoCalc</code>
: activa el cálculo automático de las fórmulas en el momento que cambia el contenido de las celdas.
+
* <code>boCalcBeforeSaving</code>: calcula las fórmulas antes de que el WorkBook se escriba al fichero.
+
*
<code>boReadFormulas</code>
: si se establece entonces se leen las fórmulas del fichero, de otro modo solamente el resultado de la fórmula.
+
* <code>boBufStream</code> y <code>boVirtualMode</code>: en programas no visuales estas opciones pueden ayudar si las aplicaciones se quedan sin memoria en el caso de workbooks extensos. <code>boVirtualMode</code>, en particular, no es usable para aplicaciones visuales, porque evita guardar datos en las celdas de la hoja de trabajo. Ver también [[FPSpreadsheet#Virtual_mode]]
.
−
La barra de utilidades de la aplicación completa va a contener un montón de iconos. Por tanto necesitamos un componente '''TImageList''' el cual tiene
que
ser enlazado a la propiedad
<code>
Images
</code>
del menú principal (TMainMenu), las barras de utilidades (TToolbars),
y
los listados de acciones (TActionList). A la pregunta de donde obtener iconos la respuesta más fácil es buscar en la carpeta
<code>
images
</code>
de la propia instalación de Lazarus donde podemos encontrar iconos estandar para cargar, salvar, salir, flechas, imprimir,configurar,.... Es un subconjunto de la [http://www.famfamfam.com/lab/icons/silk/ librería de iconos famfamfam SILK]. Otra enorme colección
se
encuentra en [http://p.yusukekamiyamane.com/ la colección de iconos Fugue]. Ambas colecciones están licenciadas como "Creative commons" y son libres incluso para su uso comercial, añadiendo la referencia apropiada en los programas creados. Cuando selecciones iconos procura que tengan el formato de imagen png y asegúrate de utilizar siempre el mismo tamaño, usualmente 16x16 pixels
.
+
En este tutorial se asume
que
las opciones
<code>
boAutoCalc
</code> y <code>
boReadFormulas
</code> se
encuentran activas
.
−
===
Setting up the visual workbook
===
+
===
= TsWorkbookTabControl =
===
−
==== TsWorkbookSource ====
+
El primer control visual utilizado en el formulario es un
'''
TsWorkbookTabControl
'''
- lo emplazamos en el formulario (dentro del espacio no ocupado por la ToolBar)
.
Client-align it within
the form
, this shows
the
TabControl as a bright rectangle only. Ahora vinculamos su propiedad
<code>
WorkbookSource
</code>
al componente TsWorkbookSource que hemos añadido previamente. Ahora TabControl muestra una solapa llamada "Sheet1". Esto es debido a que TsWorkbookSource ha creado WorkBook vacío conteniend una sola hoja (WorkSheet
)
"Sheet1"
.
WorkbookSource sincroniza este WorkBook interno con TabControl (y el resto de elementos visuales asociados) tal como se muestra la hoja como solapa.
−
As described in the introductory section the
'''
TsWorkbookSource
'''
component is the interface between workbook and controls on the user interface
.
Add this component to
the form
and give it a decent name (we'll keep
the
default name
<code>
sWorkbookSource1
</code>
here, though
).
As you will see shortly
,
this component will have to be assigned to the property
<code>
WorkbookSource
</code>
of all controls of the FPSpreadsheet_visual package
.
+
+
En Excel las solapas de las hojas se encuentran al fondo del formulario - para lograr este efecto se puede establecer la propiedad <code>TabPosition</code> del control TabControl a <code>tpBottom</code>; hay algunas incidencias para el dibujado del LCL con TabPosition, aunque, de ante mano, yo prefiero los valores por defecto
, <code>
tpTop
</code>.
−
The WorkbookSource is responsible for loading and writing data from/to file and for communicating with the workbook
.
Therefore, it owns a set of options that are passed to the workbook and control these processes:
+
El pantallazo muestra lo que obtenemos
.
<br clear="all" />
−
[[file:
sTabControl
.png|right|400px]]
+
−
<
syntaxhighlight
>
+
==== TsWorksheetGrid ====
−
type
+
[[file:
sWorksheetGrid
.png|right|400px]]
Ahora añadimos un control '''TsWorksheetGrid'''. Lo emplazamos en algún lugar dentro del espacio ocupado por el control TabControl. De esta forma viene a colgar de TabControl. Al hacer esto podremos ver algo parecido a un componente grid de cadenas (StringGrid). Enlazamos su propiedad
<
code
>
WorkbookSource</code> a la fuente añadida al principio y entonces la grid se parece más a una hoja de cálculo
(
SpreadSheet): están las cabeceras de las columnas etiquetadas con letras "A"
,
"B"
,
etc
,
y las filas etiquetadas con números "1"
,
"2", etc
;
la celda activa, A1, está remarcada por el borde grueso.
−
TsWorkbookOption =
(
boVirtualMode
,
boBufStream
,
boAutoCalc
,
boCalcBeforeSaving
,
boReadFormulas)
;
+
−
TsWorkbookOptions = set of TsWorkbookOption;
+
Puede que se necesite cambiar <code>TitleStyle
</
code
>
a <code>tsNative</code> en la grid para lograr el themed painting de la cabecera de la fila y columna. Y aquí también es un buen lugar para adaptar las <code>Options</code> de la grid para activar algunas características bien conocidas de las hojas de cálculo:
−
</
syntaxhighlight
>
+
+
* <code>goEditing</code> debe estar activo, de otra manera el contenido de la grid no se podrá modificar.
+
* <code>goAlwaysShowEditor</code> debe estar off porque interfiere con la convención de edición de las aplicaciones de hojas de cálculo.
+
* <code>goColSizing</code> habilita cambiar el ancho de columna a través del dragging de la línea divisoria que encontramos en las cabeceras de las columnas adyacentes.. Dragging tiene lugar con el pulsador izquierdo del ratón presionado.
+
* <code>goRowSizing</code> realiza lo mismo con la altura de las filas.
+
* <code>goDblAutoResize</code> activa la característica de optimización de ancho de columna que se obtiene haciendo doble click en la línea divisoria del encabezado de la columna que se situa hacia al siguente columna. La "optimum" ancho de columna es tal que no se trunca el contenido de la celda y no se muestra espacio extra sobrante.
+
* <code>goHeaderHotTack</code> nos da información adicional si se pasa el cursor del ratón por encima de la cabecera de las celdas.
+
* <code>goRangeSelect</code> (se encuentra "on" por defecto) y habilita la selección de un rango rectangular de celdas haciendo click con el pulsador izquierdo del ratón y sin soltarlo arrastrandolo hasta completar la selección de celdas (en definitiva de esquina a esquina opuesta del rectángulo). Si se tiene una versión de Lazarus del trunk y incluso se puede realizar una selección multiple de areas rectangulares manteniendo pulsada la tecla CTRL antes de seleccionar el siguente rectángulo - en la versión 1.2.6 de Lazarus (en el momento de estribir esto) solamente se permite la selección de un rango.
+
* <code>goThumbTracking</code> activa el scrolling inmediato de la hoja (Worksheet) si una de las barras de desplazamiento es arrastrada con el ratón. Las aplicaciones ofimáticas usualmente desplazan por líneas, lo cual se puede conseguir estableciendo a off <code>goSmoothScroll</code>.
−
The most important ones are
+
En adición a estas
<code>
Options
</code>
heredada de
<code>
TCustomGrid
</code>
existen más opciones especializadas para operar con hojas de cálculo
:
−
*
<code>
boAutoCalc
</code>
: activates automatic calculation of formulas whenever cell content changes.
+
* <code>
ShowGridLines
</code>,
si se establece a <code>false</code> oculta la fila y columna en la grid
.
−
*
<code>
boCalcBeforeSaving
</code>:
calculated formulas before a workbook is written to file
+
* <code>
ShowHeaders
</code>
puede establecerse a
<code>
false
</code>
para ocultar las cabeceras de fila y columna
.
(Se puede conseguir esto mismo por medio de la desfasada propiedad
<code>
DisplayFixedColRow
</code>
)
.
−
* <code>
boReadFormulas
</code>
: if set full formulas are read from the file
,
otherwise only formula results
.
+
* Las grids del LCL normalmente truncan el texto al borde de la celda cuando es más largo que el ancho de la celda. Si se establece <code>TextOverflow</code> al valor <code>true</code> entonces el texto se expande a las celdas adyacentes
.
−
* <code>
boBufStream
</code>
and
<code>
boVirtualMode
</code>
: In non-visual programs, these options can help if running out of memory in case of large workbooks
. <code>
boVirtualMode
</code>
, in particular, is not usable for visual applications, though, because it avoids keeping data in the worksheet cells
.
See also [[FPSpreadsheet#Virtual_mode]]
.
+
−
In this tutorial, it is assumed that the options
<code>
boAutoCalc
</code>
and
<code>
boReadFormulas
</code>
are activated
.
+
Las propiedades
<code>
AutoCalc
</code>
y
<code>
ReadFormulas
</code>
están pensadas para su uso independientemente de la grid de la hoja de cálculo (WorkSheetGrid)(e.g. sin un TsWorkbookSource). Por favor utilizar las opciones correspondientes del WorkbookSource en su lugar. (<code>AutoCalc</code> habilita el cálculo automático de fórmulas cada vez que cambia el contenido de la celda. <code>ReadFormulas</code> activa la lectura de fórmulas desde ficheros, de otro modo la grid solamente mostraría el resultado de la fórmula)
.