Page 1 of 1

centrar mensaje en statusbar

Posted: Sun Jun 23, 2024 9:12 pm
by JoseAlvarez
Saludos amigos,

Siempre he usado el

Code: Select all | Expand

set message of _oWnd to cMensajeMenu centered color "N/W"
Para colocar mensajes en la barra de mensajes de una ventana. Tengo dias buscando como quitarle el efecto 3d pero no he podido.
Buscando en el foro me encuentro con la StatusBar, me da el efecto plano que quiero, pero no se como centrar los mensajes.
Ya revise la clase y no veo ninguna clausula que se relacione con centrar.

la coloco asi

Code: Select all | Expand

DEFINE STATUSBAR oStatusBar PROMPT cMensajeMenu OF _oWnd
Pero me muestra el mensaje justificado a la izquierda, como lo señalo en la imagen siguiente.

Image

¿Cómo centrarlo?

Re: centrar mensaje en statusbar

Posted: Mon Jun 24, 2024 8:37 am
by Antonio Linares
Estimado José,

Habría usar el estilo SBS_CENTERALIGN al crear el control. Para eso habría que modificar la clase TStatusBar así:

#define SBS_CENTERALIGN 0x0004

::nStyle = nOR( WS_CHILD, WS_VISIBLE, SBS_CENTERALIGN )

Pruébalo y a ver si funciona como deseas.

Probaste con ?

set message of _oWnd to cMensajeMenu centered color "N/W" FLAT

Re: centrar mensaje en statusbar

Posted: Mon Jun 24, 2024 12:47 pm
by JoseAlvarez
Saludos Master Antonio,

el set message con la clausula FLAT me dio error de sintaxis:

Prg\Cuentas32.PRG(441) Error E0030 Syntax error "syntax error at 'MESSAGE'"

Respecto a la clase, la modifiqué según sus indicaciones, aunque no domino nada de clases, lo hice así,

Code: Select all | Expand

// Win32 common controls StatusBar

#include "FiveWin.ch"

#define SB_SETTEXT     1025
#define SB_SETPARTS    1028
#define SB_GETPARTS    1030

#define WM_ERASEBKGND    20

#define TIMER_INTERVAL  400

#define SIZE_MAXIMIZED    2

#ifdef __XPP__
   #define ::Super ::TControl
#endif

#define SBS_CENTERALIGN 0x0004

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

CLASS TStatusBar FROM TControl

   DATA   cMsgDef

   DATA   oTimer
 
...
...
...

Code: Select all | Expand

METHOD New( oWnd, cText, aWidths, aPrompts, lClock ) CLASS TStatusBar

   DEFAULT oWnd := GetWndDefault(), cText := "", lClock := .f.

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

    ::lUnicode = FW_SetUnicode()
   ::oWnd    = oWnd
   ::nId     = ::GetNewId()
   ::nStyle  = nOR( WS_CHILD, WS_VISIBLE )
   ::cMsgDef = cText
   ::nStyle  = nOR( WS_CHILD, WS_VISIBLE, SBS_CENTERALIGN )

 
Pero el resultado es que la barra se desaparece.

¿que me esta faltando?

Re: centrar mensaje en statusbar

Posted: Mon Jun 24, 2024 12:51 pm
by karinha
José, asi, funciona bién!

Code: Select all | Expand

   SET MESSAGE OF oWnd TO "© Contato Sistemas: (11) 2941-6446 / 3569-6446 "  ;
      + "- contato@pleno.com.br" + " - www.pleno.com.br" FONT oFont          ;
      NOINSET CLOCK DATE KEYBOARD CENTERED COLOR CLR_HBLUE, CLR_WHITE 2007
 
Regards, saludos.

Re: centrar mensaje en statusbar

Posted: Mon Jun 24, 2024 1:25 pm
by JoseAlvarez
karinha wrote:José, asi, funciona bién!

Code: Select all | Expand

   SET MESSAGE OF oWnd TO "© Contato Sistemas: (11) 2941-6446 / 3569-6446 "  ;
      + "- contato@pleno.com.br" + " - http://www.pleno.com.br" FONT oFont          ;
      NOINSET CLOCK DATE KEYBOARD CENTERED COLOR CLR_HBLUE, CLR_WHITE 2007
 
Regards, saludos.
Estimado amigo y maestro Joao,

Un par de retoques, y quedo como quería, 100% plano.

Gracias amigo!!