FoxPro/Visual FoxPro - Ayuda con DynamicForeColor

   
Vista:

Ayuda con DynamicForeColor

Publicado por Inri (9 intervenciones) el 19/09/2013 03:21:02
Hola como estan
necesito de su ayuda en lo siguiente, tengo un procedimiento en el cual quiero utilizar la funcion DynamicForeColor para que me valide unas calificaciones es decir cuando el alumno este reprobado lo marque en rojo pero debe validad letras por ejemplo cuando tenga un "NP" o un "SDEF" es decir estas son calificaciones reprobatorias tmb ya intente de todo pero no me valida las letras con los numeros no tengo problemas solo con las letras esto es lo ultimo que intente
Explico brevemente
Hay tres oportunidades para pasar que son: FINAL, SEGUNDA Y TERCERA y existen dos criterios de calif uno para maestria y el otro para las demas carreras en maestrias la calif aprobatoria es 80 por eso es el IF
De antemano gracias por su apoyo

Do case

Case Val(Alltrim(Tercera)) = "NP" .or. Alltrim(Tercera) = "SDEF" .or. Alltrim(Tercera) = "BAJA"
If alumnos.carrera = 13 .or. alumnos.carrera = 14 .or. alumnos.carrera = 15 .or. alumnos.carrera = 40 .or. alumnos.carrera = 41 .or. alumnos.carrera = 42
.setAll('DynamicForeColor', 'IIF(Val(Alltrim(Tercera)) = "NP" .or. Val(Tercera) < 80, RGB(255,0,0), RGB(0,0,0))', 'Column')
Else
.setAll('DynamicForeColor', 'IIF(Val(Alltrim(Tercera)) = "NP" .or. Val(Tercera) < 70, RGB(255,0,0), RGB(0,0,0))', 'Column')
Endif

Case Alltrim(Segunda) = "NP" .or. Alltrim(Segunda) = "SDEF" .or. Alltrim(Segunda) = "BAJA"
If alumnos.carrera = 13 .or. alumnos.carrera = 14 .or. alumnos.carrera = 15 .or. alumnos.carrera = 40 .or. alumnos.carrera = 41 .or. alumnos.carrera = 42
.setAll('DynamicForeColor', 'IIF(Val(Segunda) > 0 .and. Val(Segunda) < 80, RGB(255,0,0), RGB(0,0,0))', 'Column')
Else
.setAll('DynamicForeColor', 'IIF(Val(Segunda) > 0 .and. Val(Segunda) < 70, RGB(255,0,0), RGB(0,0,0))', 'Column')
Endif

Case Alltrim(Final) = "NP" .or. Alltrim(Final) = "SDEF" .or. Alltrim(Final) = "BAJA"
If alumnos.carrera = 13 .or. alumnos.carrera = 14 .or. alumnos.carrera = 15 .or. alumnos.carrera = 40 .or. alumnos.carrera = 41 .or. alumnos.carrera = 42
.setAll('DynamicForeColor', 'IIF(Val(Final) > 0 .and. Val(Final) < 80, RGB(255,0,0), RGB(0,0,0))', 'Column')
Else
.setAll('DynamicForeColor', 'IIF(Val(Final) > 0 .and. Val(Final) < 70, RGB(255,0,0), RGB(0,0,0))', 'Column')
Endif

Endcase
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con DynamicForeColor

Publicado por Fidel (558 intervenciones) el 19/09/2013 14:58:50
1) Para empezar hay algunas incoherencias, que se repiten a lo largo del código:
Val(Alltrim(Tercera)) = "NP" Esto no puede funcionar. Estás preguntado si un numeric es igual a un Character.

Val(Segunda) < 80 , donde supuestamente SEGUNDA puede ser "NP" , "SDEF", "BAJA" te dará siempre .T. ,porque la respuesta es cero. ???

2) Fijate en la función INLIST(). te facilitará el control de código
Por ejemplo:
1
2
3
4
5
6
7
8
9
DO CASE
	CASE INLIST(ALLTRIM(TERCERA),"NP","SDEF","BAJA")
		IF INLIST(alumnos.carrea,13,14,15,40,41,42)
		        lnColor=Rgb(255,0,0)
		ELSE
		       lnColor=Rgb(0,64,128)
 
		ENDIF
ENDCASE


3) Por otra parte, la estrategia que funciona, es crear una función con todos esos CASE y utilizar un solo DynamicForeColor. Ahí pongo un ejemplo (que no es tu caso, debes adaptarlo).


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
xcFile="alias de la tabla o cursor"
* Proxim es el campo asociado a la column1
 
with thisform.grilla.Column1
	.DynamicForeColor=[DevColor(&xcfile..PROXIM)]
 
endwith
 
 
Function DEvColor(xnStatus)
****************************
local rgbDev
* Protocolo RgbDev
* 0 - Sin Datos
* 1 - Exelente
* 2 - Bueno
* 3 - Aviso
* 4 - Advertencia
* 5 - Deficiente
* 6 - Horrible
DO CASE
	case xnStatus=0
		* Sin DAtos
		rgbDev=rgb(189,200,202)
	case xnStatus=1
		* Excelente	Azul Claro
		rgbDev=rgb(0,128,255)
	case xnStatus=2
		* Bueno / Correcto (Verde)
		rgbDev=rgb(0,255,128)
 
	case xnStatus=3
		* Aviso (Amarillo)
		rgbDev=rgb(255,255,0)
	case xnStatus=4
		* Advertencia (rojo suave)
		rgbDev=rgb(255,128,128)
	case xnStatus=5
		* Problema (rojo neto)
		rgbDev=rgb(255,0,0)
	case xnStatus=6
		* Horrible
		rgbDev=rgb(255,0,255)
endcase
return rgbDev
ENDFUNC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda con DynamicForeColor

Publicado por neo (1601 intervenciones) el 21/09/2013 03:25:48
Excelente ejemplo Fidel, te felicito!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar