Enmarcar un XBrowse
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Enmarcar un XBrowse
Otra vez yo con mis dibujos
resulta que estoy tratando de pintar un tema muy "flat", al estilo W8, y más o menos va quedando. Los XBrowses se pueden pintar planos, poniendoles la DATA lFlatStyle en .T. y el controls de los recursos con el estilo 0x50210000L. Esto hace que el browse se vea así
Puedo ponerle un estilo 0x50A10000L en el recurso, pero me hace un efecto hundido 3d que no pega con la estética del resto.
Quise usar bPainted para pintar un rectángulo, pero XBrowse no llama a bPainted con o el resto de los controles.
¿Alguna sugerencia de como dibujar un rectángulo de 1 pixel alrededor del browse?
Preferiría no tocar la clase xbrowse en lo posible.
resulta que estoy tratando de pintar un tema muy "flat", al estilo W8, y más o menos va quedando. Los XBrowses se pueden pintar planos, poniendoles la DATA lFlatStyle en .T. y el controls de los recursos con el estilo 0x50210000L. Esto hace que el browse se vea así
Puedo ponerle un estilo 0x50A10000L en el recurso, pero me hace un efecto hundido 3d que no pega con la estética del resto.
Quise usar bPainted para pintar un rectángulo, pero XBrowse no llama a bPainted con o el resto de los controles.
¿Alguna sugerencia de como dibujar un rectángulo de 1 pixel alrededor del browse?
Preferiría no tocar la clase xbrowse en lo posible.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
- TecniSoftware
- Posts: 213
- Joined: Fri Oct 28, 2005 6:29 pm
- Location: Quilmes, Buenos Aires, Argentina
Re: Enmarcar un XBrowse
Probaste pintar el rectangulo desde el on init del dialogo o ventana que estas usando?
Saludos
Saludos
Alejandro Cebolido
Buenos Aires, Argentina
Buenos Aires, Argentina
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Enmarcar un XBrowse
Hola Alejandro,
Gracias por la idea, pero creo que no daría resultado. Puede que al inicio se pinte bien, pero luego no se repintará si la ventana pierde el foco y luego lo vuelve a tomar, por ejemplo.
La idea que tengo es armar las cosas para que tengan un aspecto plano como en Win8, y esos detalles de estilo quiero ponerlos en una función para cada tipo de control que sirva para "estilizarlo".
:bPainted sería una muy buena opcion, asi cada vez que hay un refresh me asegura que se dibuja el rectángulo, e incluso si en lugar de dialogo es una MDIChild que puede cambiar de tamaño, es por donde encaré primero, pero parece que no funciona en los XBrowses.
Un saludo
Gracias por la idea, pero creo que no daría resultado. Puede que al inicio se pinte bien, pero luego no se repintará si la ventana pierde el foco y luego lo vuelve a tomar, por ejemplo.
La idea que tengo es armar las cosas para que tengan un aspecto plano como en Win8, y esos detalles de estilo quiero ponerlos en una función para cada tipo de control que sirva para "estilizarlo".
:bPainted sería una muy buena opcion, asi cada vez que hay un refresh me asegura que se dibuja el rectángulo, e incluso si en lugar de dialogo es una MDIChild que puede cambiar de tamaño, es por donde encaré primero, pero parece que no funciona en los XBrowses.
Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Re: Enmarcar un XBrowse
Carlos,
¿ Cual bPainted ? ¿ oDlg:bPainted o oBrw:bPainted ? Si quieres utilizar el DC que viene en el codeblock entonces habria de ser el oDlg:bPainted pq el DC del oBrw no puede pintar "mas alla" de sus dimensiones y desplazar todas las posiciones del browse top, left, bottom, right en un pixel que es el tamaño del marco seria una locura.
Asi que creo que habria que utilizar el oDlg:bPainted necesariamente, que seria oBrw:oWnd:bPainted.
La verdad... veo dificil la cosa... te agradeceria que si lo consigues nos lo hicieras saber. Quiza que la misma tecnica se pueda usar para pintar en otros controles.
Un saludo.
¿ Cual bPainted ? ¿ oDlg:bPainted o oBrw:bPainted ? Si quieres utilizar el DC que viene en el codeblock entonces habria de ser el oDlg:bPainted pq el DC del oBrw no puede pintar "mas alla" de sus dimensiones y desplazar todas las posiciones del browse top, left, bottom, right en un pixel que es el tamaño del marco seria una locura.
Asi que creo que habria que utilizar el oDlg:bPainted necesariamente, que seria oBrw:oWnd:bPainted.
La verdad... veo dificil la cosa... te agradeceria que si lo consigues nos lo hicieras saber. Quiza que la misma tecnica se pueda usar para pintar en otros controles.
Un saludo.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Enmarcar un XBrowse
El tema de usar el oBrw:bPainted del control lo copié de unos hilos en el foro donde hablaban de resaltar gets cuando tenian el foco. El unico inconveniente que hay es que tendría que modificar la XBrowse para que en algún momento llame a la bPainted si es un codeblock, porque el XBrowse como tal no la llama como el resto de los controles.
Es cierto que se podría usar el bPainted del diálogo, pero sería una solución no muy estructurada, y en _ estoy usando MDIChild, que no se como se comportan.
La idea es crear una función que llamo en el INIT de la creación del diálogo/window, y con el XBrowse creado, dibujar un rectangulo gris que solo le de forma. Si el browse tiene datos el recuadro no es necesario, solo en las partes que quedan blancas.
Estoy pensando que podría crear una funcion que cree un TPanel en el dialogo/window, y que el XBrowse se haga hijo de ese TPanel, y el panel sea el que dibuja el rectángulo.
Voy a ver que se puede lograr con esto.
Es cierto que se podría usar el bPainted del diálogo, pero sería una solución no muy estructurada, y en _ estoy usando MDIChild, que no se como se comportan.
La idea es crear una función que llamo en el INIT de la creación del diálogo/window, y con el XBrowse creado, dibujar un rectangulo gris que solo le de forma. Si el browse tiene datos el recuadro no es necesario, solo en las partes que quedan blancas.
Estoy pensando que podría crear una funcion que cree un TPanel en el dialogo/window, y que el XBrowse se haga hijo de ese TPanel, y el panel sea el que dibuja el rectángulo.
Voy a ver que se puede lograr con esto.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Re: Enmarcar un XBrowse
Si, pero si no me equivoco, en ese caso el bPainted funciona porque no pinta fuera de los límites del get.El tema de usar el oBrw:bPainted del control lo copié de unos hilos en el foro donde hablaban de resaltar gets cuando tenian el foco.
Si es otra forma de abordarlo. Hacer una clase "intermedia" que albergue el browse y le añada el marco y encapsule la complejidad. Podria ser algo asi como TBrowsePanel()Estoy pensando que podría crear una funcion que cree un TPanel en el dialogo/window, y que el XBrowse se haga hijo de ese TPanel, y el panel sea el que dibuja el rectángulo.
Voy a ver que se puede lograr con esto.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Enmarcar un XBrowse
Claro, la idea básica es dibujar una línea tenue donde el browse, por no tener datos, no pinta nada y deja una zona blanca. Si tiene datos el recuadro no es necesario.hmpaquito wrote:Si, pero si no me equivoco, en ese caso el bPainted funciona porque no pinta fuera de los límites del get.El tema de usar el oBrw:bPainted del control lo copié de unos hilos en el foro donde hablaban de resaltar gets cuando tenian el foco.
Si, es ambicioso, creo que excede un poco lo que tengo que hacer, y, ya sabes, los proyectos tienen tiempos limitados.hmpaquito wrote:Si es otra forma de abordarlo. Hacer una clase "intermedia" que albergue el browse y le añada el marco y encapsule la complejidad. Podria ser algo asi como TBrowsePanel()Estoy pensando que podría crear una funcion que cree un TPanel en el dialogo/window, y que el XBrowse se haga hijo de ese TPanel, y el panel sea el que dibuja el rectángulo.
Voy a ver que se puede lograr con esto.
Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Re: Enmarcar un XBrowse
Tendrás que luchar contra el browse: intentará pintar lo suyo encima del marco que tu pintes porque queda dentro de sus límites. Espero que le puedasClaro, la idea básica es dibujar una línea tenue donde el browse, por no tener datos, no pinta nada y deja una zona blanca. Si tiene datos el recuadro no es necesario.
Yo había entendido que querías un recuadro a todo alrededor y no sólo en la zona donde no hay datos, sin invadir el browse. Me equivoqué.
Re: Enmarcar un XBrowse
Carlos
No entiendo bien lo que necesitas: no sé si es un marco interior, o exterior, o si es pintar la lineas interiores cuando los datos no llegan a ocupar todo el browse
Por cierto, mi correo es: navarro.cristobal at gmail.com
No entiendo bien lo que necesitas: no sé si es un marco interior, o exterior, o si es pintar la lineas interiores cuando los datos no llegan a ocupar todo el browse
Por cierto, mi correo es: navarro.cristobal at gmail.com
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Enmarcar un XBrowse
Hola Cristobal,
Si miras la primera imagen, verás que la parte inferior no queda enmarcada. Donde se pintan datos no hay tanto problema, pero abajo queda un poco descompensado.
La idea es, para simplificar y pintar en la region del propio browse, dibujar un rectángulo gris para que quede mas compensado.
El rectangulo lo dibujé a mano, no es muy preciso, pero es la idea.
Si bPainted funcionase, se podría poner
o algo parecido
Tomo nota del mail!
Gracias,
Si miras la primera imagen, verás que la parte inferior no queda enmarcada. Donde se pintan datos no hay tanto problema, pero abajo queda un poco descompensado.
La idea es, para simplificar y pintar en la region del propio browse, dibujar un rectángulo gris para que quede mas compensado.
El rectangulo lo dibujé a mano, no es muy preciso, pero es la idea.
Si bPainted funcionase, se podría poner
Code: Select all
oBrw:bPainted:= {|hDC|
LOCAL hPen := CreatePen( PS_SOLID, 1, GRIS )
Rectangle( hDC, 0, 0, oBrw:nWidth, oBrw:nHeight, hPen )
DeleteObject( hPen )
RETURN NIL
}
Tomo nota del mail!
Gracias,
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Re: Enmarcar un XBrowse
Carlos imagino que lo que pretendes es algo asi:
El ejemplo esta hecho con código ya que con el cambio a estos estilos no me llevo muy bien con los generadores de recursos
El ejemplo esta hecho con código ya que con el cambio a estos estilos no me llevo muy bien con los generadores de recursos
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Enmarcar un XBrowse
SI! Exacto! How-to?cnavarro wrote:Carlos imagino que lo que pretendes es algo asi:
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Re: Enmarcar un XBrowse
Pues creo que nada del otro mundo, es un xbrowse normal:
Los codigos de color que utilizo los puedes ver en:
http://forums.fivetechsupport.com/viewt ... ch#p150123
Como te dije en mi anterior post no utilizo recursos
Espero te solucione algo
Code: Select all
Local oFont
Local oFontX
Local nFI := ( 5 + 25 ) * 2
Local nFIG := nFI + 20*2
Local nCI := 6
Local nCIG := nCI + 2*2
Local nInc := 40*2
Local nW := 264
Local nH := 24/0.8
Local oBrw
aTablasStruc := { {"EMPTY","U", 0, 0,"EMPTY", 0} }
DEFINE FONT oFont NAME "Segoe UI Light" SIZE 0, -20 //-52
DEFINE FONT oFontX NAME "Segoe UI SemiLight" SIZE 0, -14 //-52
//? GetDialogBaseUnits()[ 1 ], GetDialogBaseUnits()[ 2 ]
@ nFI - 50, nCI SAY oTitPnel1 PROMPT " Tabla: [ "+;
IF( Empty( cTblMdb ), " SIN SELECCION ", ;
" " + Upper( cTblMdb ) + " ")+" ]" ;
SIZE nW, nH PIXEL oF oPnel1 ;
COLOR METRO_WINDOW, METRO_GRIS1 FONT oFont
@ nFI+nInc*0 + 2, nCIG XBROWSE oXBrwStruc ;
ARRAY aTablasStruc ; // CELL ;
FONT oFontX ;
SIZE nW-4, Int(nH)*11 - 20 PIXEL oF oPnel1 //NOBORDER
WITH OBJECT oXBrwStruc
:lHScroll := .F.
:lVScroll := .F.
:lHeader := .T.
:lRecordSelector := .F.
:l2007 := .F.
:bClrSel := { || { METRO_WINDOWTEXT, METRO_WINDOW } }
:bClrStd := { || { METRO_WINDOWTEXT, METRO_WINDOW } }
:bClrSelFocus := { || { METRO_WINDOW, METRO_APPWORKSPACE } }
:bClrHeader := { || { METRO_WINDOW, METRO_GRIS4 } }
:SetColor( METRO_WINDOWTEXT, METRO_WINDOW )
:nRowDividerStyle := LINESTYLE_NOLINES //4
:nColDividerStyle := LINESTYLE_NOLINES //4
:nMarqueeStyle := 5 //3
:nRowHeight := nH
:lAutoSort := .F.
:SetArray( aTablasStruc )
END
WITH OBJECT oXBrwStruc:aCols[ 1 ]
:nWidth := ( 2*Int((nW-6) / 4) ) //( 2*Int((nW-6) / 3) ) - 2
:cHeader := " Campo " //" Field "
:nDataStrAlign := 0
:lAllowSizing := .F.
:oHeaderFont := oFont
END
WITH OBJECT oXBrwStruc:aCols[ 2 ]
:nWidth := ( 1*Int((nW-6) / 4) ) - 2 //Int( (nW-6) / 3 ) - 3
:cHeader := " Tipo "
:nDataStrAlign := 2
:lAllowSizing := .F.
:oHeaderFont := oFont
END
WITH OBJECT oXBrwStruc:aCols[ 3 ]
:nWidth := ( 1*Int((nW-6) / 4) ) - 2 //Int( (nW-6) / 3 ) - 3
:cHeader := "Len"
:nDataStrAlign := 2
:lAllowSizing := .F.
:oHeaderFont := oFont
END
WITH OBJECT oXBrwStruc:aCols[ 4 ]
:nWidth := Int( (nW-6) / 4 ) - 3
:cHeader := "Dec"
:nDataStrAlign := 2
:lAllowSizing := .F.
:oHeaderFont := oFont
END
WITH OBJECT oXBrwStruc:aCols[ 5 ]
:nWidth := ( 2*Int((nW-6) / 4) ) - 2 //Int( (nW-6) / 3 ) - 3
:cHeader := "Name Type"
:nDataStrAlign := 2
:lAllowSizing := .F.
:oHeaderFont := oFont
END
WITH OBJECT oXBrwStruc:aCols[ 6 ]
:nWidth := Int( (nW-6) / 3 ) - 3
:cHeader := "Type"
:nDataStrAlign := 1
:lAllowSizing := .F.
:oHeaderFont := oFont
END
oXBrwStruc:CreateFromCode()
http://forums.fivetechsupport.com/viewt ... ch#p150123
Como te dije en mi anterior post no utilizo recursos
Espero te solucione algo
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Enmarcar un XBrowse
Hola Cristobal,
una duda...
de todas maneras pruebo lo que posteaste a ver como va y comento algo.
una duda...
¿Que versión de windows estás usando? Porque en W7 el marco que me dibuja, si lo indico con el Style, es un marco 3d, que queda muy fuera de lugar en una estética 'flat', como se ve en las imágenes del primer post.cnavarro wrote:Pues creo que nada del otro mundo, es un xbrowse normal:
.....
Como te dije en mi anterior post no utilizo recursos
Espero te solucione algo
de todas maneras pruebo lo que posteaste a ver como va y comento algo.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Re: Enmarcar un XBrowse
Windows 8, pero pondre una imagen con W7
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.