Page 1 of 1

TGet y SetMargins

PostPosted: Tue Mar 24, 2015 11:31 am
by Carlos Mora
Buenos días,

estoy modificando la clase TGet para que cuando le añada una ACTION me dibuje el botón a la izquierda en lugar de la derecha como lo hace normalmente.
Para eso estoy modificando las coordenadas de creación del boton en el método CreateButton(), lo que es sencillo, peeeeeero.... No puedo cambiar el márgen izquierdo para que el texto del Get no quede debajo del botón. He puesto un ::SetMargins( ::nHeight, 1 ) en el método CreateButton, pero no me funciona.
En el diálogo la declaración del GET es
Code: Select all  Expand view

       // Botón normal, con '...' como texto
       @ nRow+13,55 GET oGet VAR cHost PICTURE "@;S50" OF oDlg SIZE 100,nGetHeight PIXEL UPDATE ;
                    VALID !Empty( cHost ) ;
                    ACTION MsgInfo('Hola' )
 


Y en el CreateButton
Code: Select all  Expand view

...
   if ValType( ::bAction ) == "B" .and. Upper( ::ClassName() ) == "TGET"
      if Empty( ::cBmpName )
         ::SetMargins( ::nHeight, 1 )
         @ 0, 0 BUTTONBMP ::oBtn OF Self ;
         ACTION ( Eval( oThis:bAction, oThis ), if( ::lKeepFocus, oThis:SetFocus(), nil ) ) ;
         SIZE ::nHeight - 4, ::nHeight - 4 PIXEL
         if Empty( ::oBtn:hBitmap )
            ::oBtn:SetText( "..." )
         endif
         DEBUG ::nHeight
      else
...
 


El boton se crea y funciona correctamente, pero el get se ve mal
Image

Si el setmargin lo hago en el
Code: Select all  Expand view
ACTIVATE DIALOG oDlg ON INIT oGet:SetMargins( oGet:nHeight, 1 )
funciona bien.

¿Como hago para que funcione en la clase? He visto que el SetMargin es un SendMessage(...) ¿Tendrá algo que ver?

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 7:12 am
by Antonio Linares
Carlos,

Y si alineas el GET a la derecha ? Asi no se ocultará su texto

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 9:19 am
by Carlos Mora
Hola Antonio,

Si es numérico estaría bien, pero para texto en general no lo veo correcto, sería un condicionante dificil de justificar para los diseñadores gráficos (Sí, tengo diseñadores gráficos que me indican como debo pintar los componentes :roll: ). Probablemente la solución pase por cambiar el parent del botón al parent del TGet y mover el Get.
La verdad es que me gustaría encontrar el porqué de este comportamiento extraño de Windows, debe ser una de esas cosas que tienen truco, y que no funcionan por algún detalle mínimo e insignificante.

Un saludo

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 9:26 am
by hmpaquito
Cáspita ! Carlos: diseñadores graficos pegaditos a tu silla diciendo esto si, esto no, este color....? jajajajaja
Luego, cuando tomeis cañas... hablareis de colorines.... jajajajaja

En serio... menudo nivelón de programas os tienen que salir...
Bueno, a ver si alineas el tema.

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 9:29 am
by Antonio Linares
Carlos,

Llama al método SetMargin() desde el método Initiate() y solucionado :-)

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 11:33 am
by Carlos Mora
Antonio,

Creo que llegamos a soluciones parecidas.
Code: Select all  Expand view

METHOD SetFont(...) CLASS TGet
   ::Super:SetFont( ... )
   IF ::oBtn != NIL
      ::SetMargins( ::nHeight, 1 )
   ENDIF
RETURN NIL
 


El punto está en que cuando se cambian las fuentes, se resetean los márgenes :shock: . En StackOverflow hay uno que tenia el mismo problema en Delphi, y terminó parchando la libreria en el cambio de fuente.

Bueno, de momento me quedo con el cambio en el setfont, por las dudas se cambie la fuente luego del init...

Gracias!

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 11:47 am
by Carlos Mora
Paquito,

hmpaquito wrote:Cáspita ! Carlos: diseñadores graficos pegaditos a tu silla diciendo esto si, esto no, este color....? jajajajaja
Luego, cuando tomeis cañas... hablareis de colorines.... jajajajaja


en mi caso la creatividad se me puede llegar a dar con el código, porque con la estética gráfica... pff! Soy MUUUUY cuadrado!
Suerte que tenemos unos colegas que entienden de estética y nos asesoran y explican los errores que solemos cometer en el diseño, y nos mantienen a raya con la identidad empresarial y de marca y cosas como esas que a veces solemos pasar por alto. No hay como aprender de los que saben. Eso si, si hay cañas de por medio seguro que terminamos viendo las cosas de todos colores, jaja.

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 1:13 pm
by Antonio Linares
Carlos,

Desde el Método Initiate() solo se llamará una vez

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 2:07 pm
by Carlos Mora
Antonio,

si, efectivamente, solo se llamará una vez, y no se reaplicará si se cambia una fuente, que es cuando se quita solo, por eso lo prefiero en el setfont.

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 2:18 pm
by Antonio Linares
ok, entendido :-)

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 3:29 pm
by Carlos Mora
Antonio,

te dejo el enlace donde encontré la idea del SetFont

http://stackoverflow.com/questions/4217 ... -windows-7

Lo curioso es que es un problema de Win7 que no existe en XP :shock:

Hay cada historias...

Gracias!

Re: TGet y SetMargins

PostPosted: Wed Mar 25, 2015 3:32 pm
by Antonio Linares
gracias :-)