Browse and Grid Edit Inplace
Previous topic  First topic  Next topic


If you need to quickly edit cells in BROWSE or EDIT control you can use this functionality.
Si usted necesita editar rápidamente las celdas de un control BROWSE o EDIT puede utilizar esta funcionalidad.





Edit Inplace is implemented using three different and complementary properties
:
Edit Inplace se implementa mediante 3 propiedades diferentes y complementarias:

EDITINPLACEGLOBAL .T.|.F.

This property acts over all columns and rows of BROWSE/GRID and if his value is '.T.' , it permits
edition using mouse double click over the cell where we are positioned, including cells related to MEMO fields in BROWSE case.

Esta propiedad actúa sobre todas las columnas y filas del BROWSE/GRID y si su valor es '.T.', permite editar mediante doble click del mouse la celda en donde nos encontramos posicionados, incluyendo celdas relacionadas con campos MEMO en el caso del BROWSE
Eg:
EDITINPLACEGLOBAL .T.

EDITINPLACEALL

This property, which takes precedence over EDITINPLACEGLOBAL, uses a vector () in which you can specify the following values for each column BROWSE/GRID: .T. | .F. | NIL
For columns specified NIL, indicate what acts EDITINPLACEGLOBAL you need ....
Esta propiedad, que tiene preponderancia sobre EDITINPLACEGLOBAL, utiliza un vector () en el que se pueden especificar los siguientes valores para cada columna del BROWSE/GRID: .T.|.F.|NIL
Para las columnas que se ha especificado NIL, actúa lo que indique EDITINPLACEGLOBAL
Eg:
EDITINPLACEALL { .T. , , .F. , NIL , .T. }

EDITINPLACEDYNAMIC

This property is used to dynamically specify whether to allow or not, editing the field. Takes precedence over the property EDITINPLACEALL and consequently also on EDITINPLACEGLOBAL
The block () must return
.T. | .F. | NIL
If they return NIL, acts as may be especified in EDITINPLACEALL
Esta propiedad se utiliza para especificar dinámicamente si se permite o no, la edición del campo. Tiene preponderancia sobre la propiedad EDITINPLACEALL y por consecuencia, tambien sobre EDITINPLACEGLOBAL
El bloque () deberá devolver
.T.|.F.|NIL
En caso de retornar NIL, actúa lo que se indique en EDITINPLACEALL

The block to execute receives as parameters the number of row and column so they can be evaluated dynamically.
Caution, this block must be extremely agile as it could cause performance problems

El bloque a ejecutar recibe como parámetros el número de fila y columna para que puedan ser evaluados dinámicamente.
Cuidado!, este bloque debe ser sumamente ágil ya que podría causar problemas de performance

Eg:
EDITINPLACEDYNAMIC {|nRow,nCol| myEvalFunction( nRow , nCol ) }

FUNCTION myEvalFunction( nRow , nCol )
   (( nCol )) // nCol is unused
   IF mod( nRow , 10 ) == 0
      RETURN .T.
   ELSEIF mod( nRow , 5 ) == 0
      RETURN .F.
   ENDIF
RETURN NIL



Validations:
Validaciones:

If you want to validate data entry, there are two properties:
Si se desea validar el ingreso de datos, se cuenta con dos propiedades:


EDITINPLACEVALIDALL

This property receives as a parameter, an array of blocks corresponding to validate each column BROWSE / GRID.
These blocks can receive up to 3 parameter values:
xData: is the value entered by the user
nRow: row
nCol: column
These blocks must return
.T. | .F. | NIL
Note: NIL acts like .T.
Esta propiedad recibe como parámetro, un arrar de bloques de validación que se corresponden con cada columna del BROWSE/GRID.
Estos bloques pueden recibir por parámetros hasta 3 valores:
xData: es el valor ingresado por el usuario
nRow: fila
nCol: columna
Estos bloques deben retornar
.T. | .F. | NIL
Nota: NIL actúa igual que .T.
Eg:
EDITINPLACEVALIDALL { , , {|xData| if( val( xData ) == 9 , .T. , .F. ) } , {|xData,nRow| if( nRow == 2 .AND. val( xData ) == 8 , .T. , .F. ) } }


EDITINPLACEVALIDDYNAMIC

This property takes precedence over EDITINPLACEVALIDALL and receives as a parameter a block .
This block may receive as a parameter up to 3 values:
xData is the value entered by the user
nRow: row
nCol: column
The evaluation block must return
.T. | .F. | NIL
Note: NIL acts like .T.
Esta propiedad tiene preponderancia sobre EDITINPLACEVALIDALL y recibe como parámetro un bloque .
Dicho bloque puede recibir como parámetro hasta 3 valores:
xData: es el valor ingresado por el usuario
nRow: fila
nCol: columna
El bloque de evaluacion deberá retornar
.T. | .F. | NIL
Nota: NIL actúa igual que .T.
Eg:
EDITINPLACEVALIDDYNAMIC {|xData,nRow,nCol| myValidDynamic( xData , nRow , nCol ) }

FUNCTION myValidDynamic( xData , nRow )
   (( xData )) // xData is unused
   (( nCol )) // nCol is unused
   IF mod( nRow , 10 ) == 0
      RETURN .T.
   ELSEIF mod( nRow , 5 ) == 0
      RETURN .F.
   ENDIF
RETURN NIL



Post recording event:
Evento post grabación:

After making the recording of the cell, it is possible to evaluate the result of the recording using an evaluator block associated to the property ONEDITINPLACESAVE This block receives up to 5 parameters:
xdata is the value entered by the user
nRow: row
nCol: column
lReto: result of the recording (. T. |. F.)
cMsgError: error text in case of failure
Unfortunately, this block can not be used to display a msgBox() because it generates a loop in control repaint, which causes the program to cancel, but can be used, for example, to change the content of a label or the status bar.

Luego de efectuar la grabación de la celda, es posible evaluar el resultado de la grabación por medio de un bloque evaluador asociado a la propiedad ONEDITINPLACESAVE
Dicho bloque recibe hasta 5 parámetros:
xData: es el valor ingresado por el usuario
nRow: fila
nCol: columna
lReto: resultado de la grabación ( .T. | .F. )
cMsgError: texto del error en caso de falla
Lamentablemente, este bloque no puede utilizarse para mostrar un msgBox() porque genera un loop en el repaint del control, lo cual hace que el programa cancele, pero se puede utilizar, por ejemplo, para cambiar el contenido de un label o de la status bar.

Eg:
ONEDITINPLACESAVE {|xData,nRow,nCol,lReto,cMsgError| myResult( xData , nRow , nCol , lReto , cMsgError ) }

FUNCTION myResult( xData , nRow , nCol , lReto )
   (( xData )) // unused
   (( nRow )) // unused
   (( nCol )) // unused
   IF lReto
      mg_Set( "d_window" , "stb_1" , "message" , "ok" )
   ELSE
      mg_Set( "d_window" , "stb_1" , "message" , cMsgError )
   ENDIF
RETURN NIL



After success evaluation, Marinas-GUI checks automatically same conditions and display an error message if an error occurs.
You can hide this message by coded the following property:

Despues que su evaluacion sea exitosa, Marinas-GUI chequea automaticamente algunas condiciones y muestra un mensaje de error en caso que fuera necesario.
Usted puede suprimir este error codificando la siguiente propiedad:


EDITINPLACEDISPLAYERROR .T.|.F.





Some of the causes of error in the recording may be:
- Different types of data, ie: enter a text in a cell associated with a numeric field
- Register reserved from another application


Algunas de las causas de error en la grabación pueden ser:
- Diferente tipo de dato, ej: ingresar una texto en una celda asociada con un campo numérico
- Registro reservado desde otra aplicación



EDITBOX for MEMO fields
EDITBOX para campos MEMO


When EDIT INPLACE is performed on a cell of a BROWSE containing a memo field, marinas-gui enables a editbox to edit the contents of the field.
The EditBox background color and fonts is the same as control BROWSE.
You can change some of the characteristics of the editbox modifying its properties.
Using the method GETEDITINPLACEMEMOEDITBOXNAME of browse control it is possible to obtain the name of the EditBox control to change properties.
In the following example we will change some EditBox control attributes:

Cuando se realiza EDIT INPLACE sobre una celda de un BROWSE que contiene un campo MEMO, marinas-gui habilita un EDITBOX para poder editar el contenido del campo.
El color de fondo y fuentes del EDITBOX es el mismo que el control BROWSE.
Usted puede cambiar algunas de las características del EDITBOX modificando directamente sus propiedades.
Mediante el método GETEDITINPLACEMEMOEDITBOXNAME del control BROWSE es posible obtener el nombre del control EDITBOX para cambiarle propiedades.
En el siguiente ejemplo le cambiaremos algunos atributos del control EDITBOX:


cEditMemoName := mg_Do( "d_window" , "myBrowse" , "GetEditInPlaceMemoEditBoxName" )
mg_Set( "d_window" , cEditMemoName , "Backcolor" , {0,0,0} )
mg_Set( "d_window" , cEditMemoName , "Fontcolor" , {0,255,0} )
mg_Set( "d_window" , cEditMemoName , "WordWrap" , .F. )






Marinas-GUI Version 03.06 and
Marinas-IDE Version 05.06 and
LEX Files Version 02.06


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
last update: April 27
2017
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




A Harbour/QT framework to make multiplatform programs

(©) Copyright 2009-2017 by Fernando Santolin (aka CarozoDeQuilmes)
CarozoDeQuilmes@gmail.com

2009-2017 Beta tester and full English translator: Bruno Luciani
Bruno.Luciani@gmail.com

2014-2015 Final English corrector: David Worboys
DavidWorboys@hotmail.com

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

www.marinas-gui.org


www.marinas-gui.org  

Previous topic  First topic  Next topic