Page 1 of 1

Pintar Cuadritos de Colores en un dialogo ( Folder )

PostPosted: Tue Sep 16, 2008 6:42 pm
by Raymundo Islas M.
Hola a todos,

Necesito mostrar en pantalla varios cuadritos, cada uno con un color diferente para que señalen un dato individual.

Imaginemos los que salen cuando desfragmentamos un disco duro con PerfectDisk o DiskKeeper.


Image

Busque en las funciones, creo que podria usar : FillRect() pero no la he usado antes.

Muchas Gracias por anticipado.


Saludos

PostPosted: Fri Sep 19, 2008 2:57 pm
by quique
¿por que no intentas con un browse y le indicas color a cada celda?

PostPosted: Fri Sep 19, 2008 9:06 pm
by Raymundo Islas M.
Hola Quique,

Efectivamente, es lo que estaba platicando con Jose Luis de este tema, al parecer no me explique correctamente y para acabarla, la imagen que puse empeoro el asunto.

En realidad esto es lo que necesito :

Image


Lo del browse ya lo tengo hecho, tome "prestada" la idea de Otto y Antonio del control que hace poco hicieron para mostrar un calendario y poder mostrar X datos en X fechas.

Aunque el control resultante que hicieron esta estupendo, yo necesito mostrar rangos de fechas que a veces son diferentes al año completo ya que el usuario especifica tales rangos, eso ya lo hice usando un Browse.


Image



Solo me faltaba hacer los cuadritos que indiquen el tipo de dato segun su color.


Image


Saludos y gracias por tu atencion.

PostPosted: Fri Sep 19, 2008 9:47 pm
by derpipu
Hola aun no se como subir una imagen, pero yo lo hago asi...

Code: Select all  Expand view
    REDEFINE SAY oGet COLOR CLR_BLACK, CLR_CYAN              ID 4001 OF oDlg FONT oApp:fBold
    REDEFINE SAY oGet COLOR CLR_WHITE, CLR_GREEN             ID 4002 OF oDlg FONT oApp:fBold
    REDEFINE SAY oGet COLOR CLR_WHITE, nRGB( 255, 128, 64 )  ID 4003 OF oDlg FONT oApp:fBold
    REDEFINE SAY oGet COLOR CLR_BLACK, nRGB( 255, 255, 128 ) ID 4004 OF oDlg FONT oApp:fBold


con un say del tamaño que lo deseas, le pones un texto y solo defines el color, espero que sea lo que necesitas..

PostPosted: Fri Sep 19, 2008 9:56 pm
by Raymundo Islas M.
Hola Luis,

De hecho asi como lo tengo en este momento, con un SAY.

En las imagenes que puse, podras ver una que tiene XXX con diferentes colores, mismas que quiero eliminar y pintar los dichosos cuadritos de colores.


Saludos

PostPosted: Sat Sep 20, 2008 3:22 am
by FranciscoA
Raymundo Islas M. wrote:Hola Luis,

De hecho asi como lo tengo en este momento, con un SAY.

En las imagenes que puse, podras ver una que tiene XXX con diferentes colores, mismas que quiero eliminar y pintar los dichosos cuadritos de colores.


Saludos


Raymundo:
Esto es un mini-proyecto que estoy desarrollando. Puede ser lo que necesitas para los dichosos cuadritos. Si lo mejoras, agradeceré copia.

Ejemplo del uso:

oRecta:=TRectang():New( 20,20, 30,30, oDlg,, nRGB(255,198,0),nRGB(135,82,40),"", ,1)

Puedes ver el cuadrito en la imagen. ¿Cual? si aún no sé como subirlas.


#include "FiveWin.ch"

#define COLOR_BTNFACE 15

#ifdef __XPP__
#define Super ::TControl
#endif

// Francisco J. Alegría P., Sept 10/2008
/*
Tareas pendientes:
1 Que texto lo ponga donde queramos y del color deseado
2 Metodo SayTexto(nRow, nCol, oFont, nClrFont, nPad, lRect, nClrRect, cBmp)
nPad: xPad..., lRect: Enmarcado o no,
*/

//----------------------------------------------------------------------------//

CLASS TRectang FROM TControl

DATA l3D
DATA nRGB1, nRGB2

CLASSDATA lRegistered AS LOGICAL

METHOD New( nRow, nCol, nHeight, nWidth, oWnd, l3D, nRGB1, nRGB2, cTitle, oFont, nStyle ) CONSTRUCTOR

METHOD Display() INLINE ::BeginPaint(), ::Paint(), ::EndPaint(), 0

METHOD Paint()

ENDCLASS

//----------------------------------------------------------------------------//

METHOD New( nRow, nCol, nHeight, nWidth, oWnd, l3D, nRGB1, nRGB2, cTitle, oFont, nStyle ) CLASS TRectang

local oRect := oWnd:GetCliRect()

DEFAULT nWidth:=100, nHeight:=oWnd:nHeight, l3D := .f.,;
nRGB1:=NIL, nRGB2:=NIL, cTitle:="TITULO", oFont:= NIL, nStyle := 1

nStyle := IF(nStyle==1, nOR( WS_BORDER, WS_CHILD, WS_VISIBLE, WS_CLIPCHILDREN ),; //BORDER
nOR( WS_CHILD, WS_VISIBLE, WS_CLIPCHILDREN ) ) //NOBORDER

::nStyle = nStyle
::oWnd = oWnd
::nTop = nRow
::nLeft = nCol
::nBottom = nHeight
::nRight = nWidth
::l3D = l3D
::nClrPane = If( l3D, GetSysColor( COLOR_BTNFACE ), CLR_GRAY )
::nRGB1 = nRGB1
::nRGB2 = nRGB2
::cTitle = cTitle
::oFont = oFont

#ifdef __XPP__
DEFAULT ::lRegistered := .f.
#endif

::SetColor( ::nClrText, ::nClrPane )

::Register( nOR( CS_VREDRAW, CS_HREDRAW ) )
::Create()

return Self

//----------------------------------------------------------------------------//

METHOD Paint() CLASS TRectang

local aInfo := ::DispBegin(), oFont

//colores personalizados degradados
Gradient( ::hDC, { 0, 0, ::nHeight, ::nWidth },;
::nRGB1, ::nRGB2, .T. )

if ::oFont == nil
DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12 BOLD
endif
::oWnd:SetFont( oFont )

::Say( 8, 1, xPadC(::cTitle, ::nWidth ), nRGB( 0,0,0 ), nRGB(0,0,0), ::oWnd:oFont, .T., .T.,)
::oWnd:oFont:End()

if ::bPainted != nil
Eval( ::bPainted, ::hDC )
endif

::DispEnd( aInfo )

return nil
[

PostPosted: Sat Sep 20, 2008 5:16 am
by joseluisysturiz
Raymundo, por lo que veo lo que trate no te funciono, a ojo de pajaro veo lo que ofrece Francisco y luce bastante bien, mañama lo probare y alguno cambio o mejora se los hare llegar..saludos. nos vemos por los lados del MSN.... :shock:

PostPosted: Sat Sep 20, 2008 11:41 am
by Carlos Mora
Raymundo,

Raymundo Islas M. wrote:
De hecho asi como lo tengo en este momento, con un SAY.

En las imagenes que puse, podras ver una que tiene XXX con diferentes colores, mismas que quiero eliminar y pintar los dichosos cuadritos de colores.
Saludos


Lo que entiendo que te sugiere el compañero (y que es como lo uso) es cambiando el COLOR DE FONDO DEL SAY, no las letras. Es más, como texto le pones un par de espacios si no quieres ver nada, o usas el mismo color para el texto y el fondo. ¿Has probado hacerlo? creo que te resultará mas sencillo que usar una clase nueva, sin desmerecer el trabajo del compañero.

CArlos.

PostPosted: Sat Sep 20, 2008 4:57 pm
by Raymundo Islas M.
Hola Carlos,

Sip eso lo probe desde un principio, un SAY con solo espacios y usando el mismo color tanto para el fore como para el back y nop.

Francisco,

Probe la clase que amablemente enviaste y estos son los resultados :

Cuando la pruebo tal y como esta : pinta el cuadrito OK
pero al momento de cambiarle las coordenas se pierde, al checar el codigo vi que hacia faltaba calcular en forma correcta las variables ::nBottom y ::nRight

Ahora, con esos pequeños cambios para las pocisiones ya salen OK pero por alguna razon, ya no me respeta los colores para el pintado.

Sigo probando.


Saludos a todos

PostPosted: Sat Sep 20, 2008 5:48 pm
by FranciscoA
Raymundo Islas M. wrote:Hola Carlos,

Sip eso lo probe desde un principio, un SAY con solo espacios y usando el mismo color tanto para el fore como para el back y nop.

Francisco,

Probe la clase que amablemente enviaste y estos son los resultados :

Cuando la pruebo tal y como esta : pinta el cuadrito OK
pero al momento de cambiarle las coordenas se pierde, al checar el codigo vi que hacia faltaba calcular en forma correcta las variables ::nBottom y ::nRight

Ahora, con esos pequeños cambios para las pocisiones ya salen OK pero por alguna razon, ya no me respeta los colores para el pintado.

Sigo probando.


Saludos a todos


Hola aqui me funciona bien, puedes verlo.

oRect1:=TRectang():New( 10,150, 20,180, oBar ,, nRGB(255,98,60),nRGB(235,82,40),"", ,1)
oRect2:=TRectang():New( 30,150, 40,180, oBar ,, nRGB(155,98,60),nRGB(135,82,40),"", ,1)


[/img]ImageImage

PostPosted: Sat Sep 20, 2008 6:38 pm
by Raymundo Islas M.
Hola a todos,

Por fin pude crear esos %/#"$#"#$ cuadros ;)


Image


Este es el codigo que me sirvio para tal caso :

Code: Select all  Expand view
oFldESPrd:aDialogs[6]:bPainted := { |hDC| DrwBxsClrs( hDC ) }

Static Function DrwBxsClrs( hDC )
LOCAL nQ, aBx1Coords := { 393, 43, 405, 55 }, aBx2Coords := { 393, 413, 405, 425 }
LOCAL aBrshClrs[11]
LOCAL aBClrsDts := { {224,102,255},{255,193,193},{222,184,135},{250,128,114},{118,238,198},{100,149,237}, ;
   {255,193,37},{171,130,255},{255,192,203},{255,255,0},{255,48,48} }

FOR nQ := 1 TO 11
   DEFINE BRUSH aBrshClrs[nQ] COLOR RGB( aBClrsDts[nQ,1],aBClrsDts[nQ,2],aBClrsDts[nQ,3] )
NEXT
FOR nQ := 1 TO 5
   FillRect( hDC, aBx1Coords, aBrshClrs[nQ]:hBrush )
   aBx1Coords[1] += 15
   aBx1Coords[3] += 15
NEXT
FOR nQ := 6 TO 10
   FillRect( hDC, aBx2Coords, aBrshClrs[nQ]:hBrush )
   aBx2Coords[1] += 15
   aBx2Coords[3] += 15
NEXT

Return NIL
*-----*




Agradezco a todos por su tiempo y atencion.


Saludos