Page 1 of 1

para Antonio : Sobre BTNBMP... oBtn:bPainted (RESUELTO)

PostPosted: Wed Jun 04, 2014 4:26 pm
by albeiroval
Buenos dias,

No se si se pueda hacer lo siguiente :

Tengo la necesidad de identificar unos botones para el usuario, como muestro en la imagen,
exactamente es el texto que esta encerrado en color rojo, usando el comando REDEFINE BTNBMP ....,

[img]
http://www.4shared.com/photo/tfYyv9Xmba/Botones.html?
[/img]

Gracias,

Saludos Cordiales,

Albeiro.

Re: Sobre BTNBMP...

PostPosted: Wed Jun 04, 2014 4:38 pm
by albeiroval
disculpas, esta es la imagen :

[img]
http://www.4shared.com/photo/03Hn6hp2ce ... s__1_.html?
[/img]

Re: Sobre BTNBMP...

PostPosted: Wed Jun 04, 2014 11:30 pm
by Antonio Linares
Albeiro,

Haciendo una pequeña modificación en la Clase TBtnBmp Method Paint() puedes usar oBtn:bPainted y desde ahí escribir ó dibujar en el control lo que desees:

Code: Select all  Expand view
...
   
   if ::bPainted != nil   // nuevo
      Eval( ::bPainted, ::hDC, ::cPS, Self )  // nuevo
   endif  // nuevo  

   if ! IsWindowEnabled( ::hWnd ) .and. Empty( ::hBitmap3 )
      BtnDisable( ::hWnd, ::hDC )
   endif

   ...
 


Lo incluimos para la próxima versión de FWH :-)

Re: Sobre BTNBMP...

PostPosted: Thu Jun 05, 2014 2:16 am
by albeiroval
Antonio,

Gracias :)

Re: Sobre BTNBMP...

PostPosted: Sat Jul 26, 2014 2:28 am
by albeiroval
Antonio ,

Modifique la clase y probe con este ejemplo pero no funciona.

Code: Select all  Expand view

function PruebaBtnBmp()
   LOCAL oDlg, oFont, oBtn, aPos
     
   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12 BOLD  
   
   DEFINE WINDOW oDlg TITLE "Say en Boton"

   @ 3, 16 BTNBMP oBtn OF oDlg;  
     PROMPT "&Cancel";
     CENTER;
     SIZE 60, 60;
     ACTION oDlg:End()
             
             
    // oBtn:bInit = {|| TSay():New(6, 14, {|| " 1 "}, oBtn,, oFont, .F., .F., .F., .F., CLR_BLACK, CLR_WHITE,,, .F., .F., .F., .F., .F., .F., .F., )}
   
    oBtn:bPainted = {|| TSay():New( 6, 14, {|| " 1 "}, oBtn,, oFont, .F., .F., .F., .F., CLR_BLACK, CLR_WHITE,,, .F., .F., .F., .F., .F., .F., .F., )}
   
   ACTIVATE WINDOW oDlg  
   
   RELEASE FONT oFont
     
Return nil
 

Re: para Antonio : Sobre BTNBMP... oBtn:bPainted

PostPosted: Sun Jul 27, 2014 9:42 am
by Antonio Linares
Alveiro,

No, asi no hace, puesto que así estarias creando un nuevo control TSay cada vez que se pintase el botón, y eso consumiría muchos recursos y al final incluso podria tirar la aplicación.

La forma de escribir texto es usando la función DrawText() ó tambien serviría la función ExtTextOut():

oBtn:bPainted = { | hDC | DrawText( hDC, "Hola", { 0, 0, oBtnBmp:nWidth, oBtnBmp:nHeight }, nStyle )

Ese array de cuatro elementos es el rectángulo en donde se escibirá el texto dentro de la superficie del botón. nStyle es el estilo a usar de estos:

#define DT_TOP 0
#define DT_LEFT 0
#define DT_CENTER 1
#define DT_RIGHT 2
#define DT_VCENTER 4
#define DT_BOTTOM 8
#define DT_WORDBREAK 16
#define DT_SINGLELINE 32
#define DT_CALCRECT 1024

Para una explicación de estos estilos puedes revisar:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx

Si deseas cambiar el color del texto a pintar, debes usar la función SetTextColor( hDC, CLR_BLUE ) (los colores estan en colors.ch, ó cualquier combinación RGB usando la función nRgb( nRed, nGreen, nBlue ) y llamarias a esta función desde el codeblock antes de llamar a DrawText()

Tambien puedes cambiar el font a usar, etc.

Re: para Antonio : Sobre BTNBMP... oBtn:bPainted

PostPosted: Mon Jul 28, 2014 4:48 am
by albeiroval
Antonio ahora si funciono.

Gracias.

Re: para Antonio : Sobre BTNBMP... oBtn:bPainted (RESUELTO)

PostPosted: Mon Jul 28, 2014 5:29 pm
by Antonio Linares
Muy bien :-)

Re: para Antonio : Sobre BTNBMP... oBtn:bPainted (RESUELTO)

PostPosted: Fri Jan 16, 2015 1:48 pm
by albeiroval
Antonio,

Buen dia, recuerda agregar este codigo a btnbmp.prg para el proximo build de fwh.

Saludos.

Re: para Antonio : Sobre BTNBMP... oBtn:bPainted (RESUELTO)

PostPosted: Fri Jan 16, 2015 10:33 pm
by horacio
No encuentro esta parte del código que se supone se encuentra en el método Paint()

...

if ! IsWindowEnabled( ::hWnd ) .and. Empty( ::hBitmap3 )
BtnDisable( ::hWnd, ::hDC )
endif

...


Donde pongo el código nuevo ? Alguien sabe ?. Muchísimas gracias

Saludos