Cómo mantener resaltada toda la fila de un grid al hacer click sobre ella?

4,252 views
Skip to first unread message

ultraton500

unread,
Nov 22, 2012, 4:37:24 PM11/22/12
to publice...@googlegroups.com
Hola, aquí estoy denuevo.
En teoría, para resaltar con color toda la fila se debe:

- establecerle al grid HighlightRow=.T., Highlight=.T. y HighlightStyle=.T.
- establecerle a las columnas SelectOnEntry=.T.

Funciona muy bien mientras que la fila activa se mueva con las teclas, pero al hacer un click, la celda clickeada deja de resaltarse mostrando el color de fondo del grid y el cursor como si se fuese a editar su 

contenido.
La forma de evitar esto es estableciendo Format="K" al textbox y agregando "This.SetFocus" en el evento Click.
Pero como esto me impide captar los eventos en el textbox mi pregunta es.. ¿Se puede lograr de otra forma?
Les agradezco de antemano sus comentarios.

Saludos cordiales,
Javier.

José M. Wong-Valle Obando

unread,
Nov 22, 2012, 7:55:10 PM11/22/12
to publice...@googlegroups.com
usa el set all 


--
 
 
 



--
José Manuel Wong-Valle O.

ultraton500

unread,
Nov 22, 2012, 10:06:27 PM11/22/12
to publice...@googlegroups.com
Gracias José por responder.
Quizás no me expliqué bien, no me estoy refiriendo a pintar filas con DynamicBackColor sino a la selección de la fila activa del grid (la que destaca el registro actual).
Tengo la sensación de que lo que intento hacer no se puede.
Saludos, 
Javier.

José M. Wong-Valle Obando

unread,
Nov 22, 2012, 11:42:56 PM11/22/12
to publice...@googlegroups.com
Trata con el RECNO() QUE SEA IGUAL A CIERTA CONDICION...!

ultraton500

unread,
Nov 23, 2012, 12:09:25 AM11/23/12
to publice...@googlegroups.com
Hola José, perdón pero me cuesta entender de qué manera puedo usar el Recno() para evitar que, al hacer click sobre el grid, la celda clickeada deje de tener como color de fondo el color establecido en la propiedad HighLightBackColor. Quizás no nos estemos entendiendo.
Saludos cordiales y gracias por tu atención,
Javier.

Richard Silva

unread,
Nov 23, 2012, 5:26:12 AM11/23/12
to publice...@googlegroups.com
Hola ultraton500,

La propiedad del grid HighlightStyle sólo acepta valores numéricos: 0, 1 y 2.

En mi clase base, para lograr el efecto que deseas, esa propiedad la tengo configurada con el valor 2 - Current row highlighting with viusal persistence. Por supuesto, la propiedad HighLight está en .T.

--
Saludos

Walter R. Ojeda Valiente

unread,
Nov 23, 2012, 6:03:43 AM11/23/12
to publice...@googlegroups.com
No te está entendiendo, él cree que lo que quieres es resaltar una fila.

En este momento no tengo tiempo para pensar en tu problema porque no me parece relevante, apenas tenga un poco de tiempo libre pensaré en alguna solución.

Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House




Date: Thu, 22 Nov 2012 21:09:25 -0800
From: ultra...@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] Cómo mantener resaltada toda la fila de un grid al hacer click sobre ella?
--
 
 
 

Jose Antonio Blasco

unread,
Nov 23, 2012, 6:55:52 AM11/23/12
to Comunidad de Visual Foxpro en Español
Si te he entendido bien, prueba con las siguientes propiedades del grid

HighlightRow = .F.
HighlightStyle = 0

y para los colores

BackColor = 255,255,255
ForeColor = 0,0,255
SelectedItemBackcolor = 0,0,255
SelectedItemForecolor = 255,255,255

Espero que sea lo que buscabas.

Un saludo.


--
 
 
 



--
Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2

"No hay camino hacia la libertad, la libertad es el camino" - Indira Gandhi
“Nunca te olvides de sonreír, porque el día que no sonrías  será un día perdido”  -  Charles Chaplin
“Todo el mundo quiere tener un amigo, pero pocos se toman la molestia de ser uno”
- Anónimo

FidelJ

unread,
Nov 23, 2012, 7:22:16 AM11/23/12
to publice...@googlegroups.com
Tienes dos formas:
1) .Grid.AllowCellSelection=.F.
Con esto hay que tener cuidado porque cambia la forma en como se procesan algunos eventos. 

2) Con este código que alguien puso a disposición: (no anoté el nombre del autor). Pero funciona bien.
Grid. Marcar toda la línea actual
· Crea una propiedad en tu formulario con el nombre nRegistroActualGrid, e inicialízala a valor 0.
* En el evento Init del Grid ó en la rutina de generación, escribe el siguiente código

this.SetAll("DynamicBackColor",;
"IIF(RECNO()=thisform.nRegistroActualGrid, RGB(0,0,128), this.BackColor)",;
"Column")

this.SetAll("DynamicForeColor",;
"IIF(RECNO()=thisform.nRegistroActualGrid, RGB(255,255,255),
this.ForeColor)",;
"Column")

* En el evento AfterRowColChange pon el siguiente código

thisform.nRegistroActualGrid =RECNO()
this.Refresh()

ultraton500

unread,
Nov 23, 2012, 9:40:29 AM11/23/12
to publice...@googlegroups.com
Muy cierto Richard, me equivoqué al escribir pero tengo esa propiedad en 2 y el efecto que deseo se logra.. claro, pero mientras que la fila activa se mueva con las teclas o algún comando como Seek, Locate, o Go, pero el efecto indeseado ocurre cuando se hace un click sobre una fila.
Saludos,
Javier.

Fox Learner

unread,
Nov 23, 2012, 9:41:33 AM11/23/12
to publice...@googlegroups.com
Te comparto este enlace donde se mencionan algunas propiedades que te pudieran servir.

Como iluminar la linea completa del registro actual de un grid?


Revisa con atención las propiedades que se especifican en el ejemplo del maestro Luis María. Alguna de esas tal vez te pueda servir.

Saludos!

ultraton500

unread,
Nov 23, 2012, 12:16:58 PM11/23/12
to publice...@googlegroups.com
Hola Walter, este problema no te parece relevante porque en realidad no es relevante. Ja! Coincido 100%.
Suelo hacer consultas en este foro por cuestiones no relevantes, mayormente por cuestiones estéticas y lo hago con algo de incomodidad porque hay quienes lo ven casi como si fuera un O.T..
Recuerdo, aunque no con detalles, que una vez alguien se mostró disconforme con las cuestiones estéticas y dijo que al usuario había que acostumbrarlo y listo.
Pero yo siento una gran frustración cuando un formulario parece una versión "casera" o "hecha en casa" de un software profesional y siento una gran satisfacción cuando al usuario le agradan mis programas, se sienten cómodos usándolos y obtengo una buena crítica.
En fin.. hice este comentario porque sé que también te interesa el buen aspecto del software.
Saludos,
Javier.

ultraton500

unread,
Nov 23, 2012, 12:29:51 PM11/23/12
to publice...@googlegroups.com
Cómo estás José!...
Probé tu sugerencia pero la fila activa no se resalta y el puntero se instala en la celda clickeada como si se fuese a editar su contenido.
Aprecio igualmente tu aporte.
Saludos,
Javier.

Guillermo MDQ

unread,
Nov 23, 2012, 1:13:02 PM11/23/12
to publice...@googlegroups.com
Utilizando la propiedad AllowCellSelection=.F. la fila activa siempre te queda resaltada. No te sirve tenerlo en ese modo ?

Saludos
Guillermo

Luis Salazar

unread,
Nov 23, 2012, 1:28:50 PM11/23/12
to publice...@googlegroups.com
 
***   Prueba  esto  en el Metodo INIT  de la forma
 
Thisform.name_grid.setall("DynamicBackColor", ;

"IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255),;

RGB(205,226,173))", "Column") && Alterna filas color blanco para impares y verde claro registros **pares

 

name_grid  es el nombre de tu grid

 

**174,213,172 gris

** 157,176,210 azul

**236,233,216 verde

 

 


**174,213,172 gris

** 157,176,210 azul

**236,233,216 verde

Thisform

.Grid1.SetFocus

 


 
--
 
 
 

Cesar J PaEs

unread,
Nov 23, 2012, 1:44:34 PM11/23/12
to publice...@googlegroups.com
pienso que una manera sencila es tomar el valor del recno() en el momento de hacer Click y que solamente ese valor tenga efecto el Dynamic Backcolor,  espero te sirva esta idea humildemente.
 
Cesar..
 

Date: Fri, 23 Nov 2012 13:58:50 -0430

Subject: Re: [vfp] Cómo mantener resaltada toda la fila de un grid al hacer click sobre ella?
--
 
 
 

ultraton500

unread,
Nov 23, 2012, 2:34:19 PM11/23/12
to publice...@googlegroups.com
Fidel,
Probé las dos formas y noté que lo único que me soluciona el problema es Grid.AllowCellSelection=.F.. De esta forma ya no se captan los eventos en los controles contenidos en el grid sino que todos se captan en el grid y esto no es un inconveniente para lograr lo que quiero. En realidad es algo que Luis María explicó en el tema que inicié antes que este pero al leerlo rápido no lo interpreté bien.

Guillermo,
Así es, Grid.AllowCellSelection=.F. me sirve, lo que pasó es que al principio pensé que de esa forma los eventos ya no se podían captar.

likiliki, 
Tu sugerencia solo me funciona si se establece Grid.AllowCellSelection=.F..

Fox Learner,
Justamente en el ejemplo de Luis María está la propiedad Grid.AllowCellSelection=.F..

César,
Usar o no DynamicBackColor para resaltar la fila sirve únicamente para versiones anteriores a vfp8 porque en adelante la fila se mantiene siempre resaltada. Hacer que se mantenga toda resaltada aún clickeando sobre ella depende de la propiedad AllowCellSelection.

Les agradezco a todos por su colaboración.
Saludos cordiales,
Javier.

Viktor Velazquez

unread,
Nov 23, 2012, 4:38:49 PM11/23/12
to publice...@googlegroups.com
si usas vfp 9 no tienes problemas pasa  la propiedad HighLight a .t. saludos
 

Date: Fri, 23 Nov 2012 13:58:50 -0430
Subject: Re: [vfp] Cómo mantener resaltada toda la fila de un grid al hacer click sobre ella?
--
 
 
 

Viktor Velazquez

unread,
Nov 23, 2012, 4:45:28 PM11/23/12
to publice...@googlegroups.com
sorry no verifique.. es la proiedad   HighLightStyle pasalo a 1 y listo.. saludos


From: viv...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Cómo mantener resaltada toda la fila de un grid al hacer click sobre ella?
Date: Fri, 23 Nov 2012 21:38:49 +0000
--
 
 
 

Walter R. Ojeda Valiente

unread,
Nov 23, 2012, 5:08:47 PM11/23/12
to publice...@googlegroups.com
Hola Javier

Sí, desde luego que me interesa el buen aspecto del software, siempre trato de que mis aplicaciones "se vean y se sientan" profesionales, no me gusta la chapucería, para nada.

Pero aún no sé que ventaja práctica obtendrás cuando consigas lo que estás buscando, porque no creo que le facilite la vida a los usuarios.


Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House




Date: Fri, 23 Nov 2012 09:16:58 -0800
--
 
 
 

ultraton500

unread,
Nov 24, 2012, 12:37:59 AM11/24/12
to publice...@googlegroups.com
Hola Walter, te comento... Tengo dos grids, el 1ro. con todas las piezas del inventario y el 2do. con las piezas del inventario que componen el producto X seleccionado en un combo. El usuario debe realizar la composición del producto con las piezas correspondientes, debe indicarle al sistema qué piezas lo componen.
Para ello me pareció que lo mas práctico era haciendo doble click sobre una pieza del 1er. grid y de esta forma aparece en el 2do. grid junto a las otras que conforman el producto.
Para indicar las piezas del inventario (1er. grid) que ya fueron elegidas la fila completa se muestra en negrita (con DynamicFontBold).
Por lo tanto, antes de resolver el problema me pasaba que, al hacer el doble click o solo un click, la fila se ponía en negrita menos en la celda clickeada en donde además tampoco se mostraba el color del resaltado de la fila activa y aparecía el puntero titilando. Realmente la cagaba.
Ahora no solo estoy muy satisfecho con la usabilidad del form sino también con su presentación gracias a la ayuda recibida.
Espero no parecerte tan quizquilloso pero eso era lo que buscaba solucionar.

Saldos cordiales Walter,
Javier

Walter R. Ojeda Valiente

unread,
Nov 24, 2012, 8:25:49 AM11/24/12
to publice...@googlegroups.com
Está bien, si te parece que es más usable o más estético así, está todo bien.


Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House


 

Date: Fri, 23 Nov 2012 21:37:59 -0800
--
 
 
 

Ricardo Pina

unread,
Nov 24, 2012, 9:18:23 AM11/24/12
to Grupo VFP
Hola Javier
 
Puedes hacer un peueño truco para lograr el efecto que deseas en la grilla
 
1.- Agregas una columna con ancho=0 y visible falso
2.- En los controles de la fila le pones en el metodo click
 
Thisform.Grilla.ActivateCell(thisform.Grilla.ActiveRow,NuevaColumna) && NuevaColumna es la que agregaste.
 
Saludos


--
 
 
 



--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 


ultraton500

unread,
Nov 24, 2012, 1:58:38 PM11/24/12
to publice...@googlegroups.com
Hola Ricardo, es un dato interesante.
Lo probé pero al hacer click se desplazan las columnas hacia la izquierda como para mostrar la nueva columna aunque esta siempre se mantiene con Width=0.
También pasa que la línea agregada en el evento click impide el evento doble click porque uno de los dos clicks es usado para ejecutarla. Por lo tanto, para que funcione el doble click hay que hacer un triple click.
Igualmente te agradezco por tu colaboración.
Saludos cordiales,
Javier.

Víctor Hugo Espínola Domínguez

unread,
Nov 24, 2012, 3:07:39 PM11/24/12
to publicesvfoxpro
Hola Javier

No sé si ya resolviste tu problema, adjunto un ejemplo de un grid multiselect.

Saludos.
Víctor.



--
 
 
 

gridmultisel02.prg

Ricardo Pina

unread,
Nov 24, 2012, 3:24:10 PM11/24/12
to Grupo VFP
Hola Javier
 
Estuve mirando el ejemplo de grilla multiselect que adjunto Victor Hugo y creo que te soluciona el tema
 
Thisform.Grilla.AllowCellSelection = .F.
Thisform.Grilla.HighlightStyle     = 2
 
El secreto era la propiedad AllowCellSelection, pero como tambien te anula el acceso a los controles de las columnas debes mover el código del DobleClick de las columnas al de la Grilla.
 
Saludos


--
 
 
 

ultraton500

unread,
Nov 24, 2012, 6:20:07 PM11/24/12
to publice...@googlegroups.com
Qué tal Ricado, acabo de descargar el ejemplo de Victor Hugo pero aún no lo le mirado. Ya he resuelto el problema y era tal cual como dices, establecer la propiedad AllowCellSelection a .F. y mover los códigos de los eventos de los controles a los eventos del grid.
Gracias una vez mas por darme una mano.

Saludos,
Javier.

ultraton500

unread,
Nov 24, 2012, 6:38:09 PM11/24/12
to publice...@googlegroups.com
Hola Victor Hugo, si, ya pude resolver el problema pero igual te agradezco por el ejemplo enviado. Lo estuve viendo y si, tiene la propiedad AllowCellSelection=.F. y el código del evento click en el click del grid, tal como lo tengo yo ahora.

Saludos, 
Javier.
Reply all
Reply to author
Forward
0 new messages