HonradosHP
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Alinear un campo a la derecha en IfMain

2 participantes

Ir abajo

Alinear un campo a la derecha en IfMain Empty Alinear un campo a la derecha en IfMain

Mensaje  Jose Leonardo Ortiz Lun Ene 18, 2010 10:29 pm

Pregunta sobre formularios de entrada con IfMain:

¿Qué se debe hacer para que el texto mostrado dentro de un campo esté alineado a la derecha?

Alinear un campo a la derecha en IfMain Hica49v50fz


Última edición por CesarV el Mar Ene 19, 2010 5:28 pm, editado 1 vez
Jose Leonardo Ortiz
Jose Leonardo Ortiz
Junior HP+
Junior HP+

Masculino Cantidad de envíos : 50
Localización : Lima/Perú
Calculadora : HP 50g
ROM : 2.09

Volver arriba Ir abajo

Alinear un campo a la derecha en IfMain Empty Re: Alinear un campo a la derecha en IfMain

Mensaje  Jose Leonardo Ortiz Lun Ene 18, 2010 10:30 pm

Esto lo puede hacer. Este es el codigo.


Código:
* Este es el message handler que puedes usar para alinear el
* contenido del campo a la derecha.
* Funciona para cualquier campo TEXTO
* Ponlo como el message handler de cada campo que desees.
NULLNAME MshHandler
:: BINT6 #=casedrop
  ::              ( #campo valor )
      DecompObjectIfMain              ( #campo $ )
      TRUESWAP_                      ( #campo T $ )
      3PICK                          ( #campo T $ #campo )
      FLASHPTR IfGetFieldDecompObject ( #campo T $ #DECOMP )
      BINT1                          ( #campo T $ #DECOMP #1 )
      #AND                            ( #campo T $ #DECOMP #1/#0 )
      #0<>                            ( #campo T $ flag )
      4PICK                          ( #campo T $ flag #campo )
      TRUE                            ( #campo T $ flag #campo T )
                                      ( #campo T flag $ )
      FLASHPTR IfGetFieldPos          ( #campo T $ flag #x #y #w #h )
      DROP                            ( #campo T $ flag #x #y #w )
      UNROT2DROP                      ( #campo T $ flag #w )         
      OVER                            ( #campo T $ flag #w flag )
      ITE
        BINT4
        BINT6
                                      ( #campo T $ flag #w #AnchoFuente )
      #/                              ( #campo T $ flag #r #q )
      SWAPDROP                        ( #campo T $ flag #q )
      ROTSWAP                        ( #campo T flag $ #q )
      FUERZA$                        ( #campo T flag $' )
      SWAP                            ( #campo T $' flag )
      ITE
        $>grob
        $>GROB
                                      ( #campo T grob )
      FLASHPTR IfSetGrob         ( )
      TrueTrue                         ( T T )
  ;
  DROPFALSE
;

* Este subprograma retorna siempre una cadena que tenga #max caracteres
* Si $ tiene pocos caracteres, le agrega caract en blanco a la izquierda
* Si $ tiene muchos caracteres, lo corta y agrega "..."  al final
NULLNAME FUERZA$ ( $ #max -> $ )
::            ( $ #max )
  OVERLEN$    ( $ #max #len )
  2DUP#=      ( $ #max #len flag )
  case2DROP
              ( $ #max #len )
  2DUP#<      ( $ #max #len flag )
  casedrop
  :: 1_#1-SUB$ "\1E" &$ ;
              ( $ #max #len )
  #-          ( $ #adicionales )
  Blank$      ( $ $' )
  SWAP&$      ( $'' )
;

* Este subprograma convierte el contenido del campo a cadena,
* respetando el parámetro #Decomp del campo actual.
* En lugar de este subprograma podrías usar sólo DO>STR
NULLNAME DecompObjectIfMain ( #campo valor -> #campo $ )
::              ( #campo valor )
  DUP          ( #campo valor valor )
  ' xNOVAL    ( #campo valor valor NOVAL )
  EQUAL        ( #campo valor flag )
  casedrop NULL$  ( SALE CON: #campo "" )
                ( #campo valor )
  OVER        ( #campo valor #campo )
  FLASHPTR IfGetFieldDecompObject ( #campo valor #DECOMP )
  BINT2        ( #campo valor #DECOMP #2 )
  #AND        ( #campo valor #2/#0 )
  #0<>        ( #campo valor flag )
  case DO>STR      ( SALE CON: #campo $ )
                ( #campo valor )
  savefmt1    ( #campo valor )
  DOSTD        ( #campo valor )
  DO>STR      ( #campo $ )
  rstfmt1      ( #campo $ )
;

El código funciona para cualquier campo texto.

El subprograma DecompObjectIfMain está hecho para convertir el contenido del campo a cadena.

Está un poco largo porque funciona para cualquier campo TEXTO, respetando al parámetro #Decompile del texto.
Es decir, si se muestra con fuente de sistema o minifuente, si se muestra NOVAL, una cadena o un OBJETO NUMÉRICO con el formato numérico actual o con el modo estándar (todo esto está especificado en el parámetro #decompile del campo).

Alinear un campo a la derecha en IfMain Dibujo15


Última edición por CesarV el Mar Ene 19, 2010 6:29 pm, editado 1 vez
Jose Leonardo Ortiz
Jose Leonardo Ortiz
Junior HP+
Junior HP+

Masculino Cantidad de envíos : 50
Localización : Lima/Perú
Calculadora : HP 50g
ROM : 2.09

Volver arriba Ir abajo

Alinear un campo a la derecha en IfMain Empty Re: Alinear un campo a la derecha en IfMain

Mensaje  Jose Leonardo Ortiz Mar Ene 19, 2010 6:17 pm

El siguiente código es más corto pero los números se verán siempre con el formato actual y siempre con minifuente.
Los valores iniciales en el campo deben ser números y no NOVAL.

Código:
* Este es el message handler que puedes usar para alinear el
* contenido del campo a la derecha.
* Pone los números en minifuente con el formato actual.
* Ponlo como el message handler de cada campo que desees.
NULLNAME MshHandler2
:: BINT6 #=casedrop
  ::                       ( #campo valor )
      DO>STR            ( #campo $ )
      TRUESWAP_        ( #campo T $ )
      3PICK            ( #campo T $ #campo )
      TRUE              ( #campo T $ #campo T )
      FLASHPTR IfGetFieldPos ( #campo T $ #x #y #w #h )
      DROP                  ( #campo T $ #x #y #w )
      UNROT2DROP            ( #campo T $ #w )
      BINT4                  ( #campo T $ #w #4 )
      #/                    ( #campo T $ #r #q )
      SWAPDROP              ( #campo T $ #q )
      FUERZA$                ( #campo T $' )
      $>grob                ( #campo T grob )
      FLASHPTR IfSetGrob       ( )
      TrueTrue                 ( T T )
  ;
  DROPFALSE
;

* Este subprograma retorna siempre una cadena que tenga #max caracteres
* Si $ tiene pocos caracteres, le agrega caract en blanco a la izquierda
* Si $ tiene muchos caracteres, lo corta y agrega "..."  al final
NULLNAME FUERZA$ ( $ #max -> $ )
::            ( $ #max )
  OVERLEN$    ( $ #max #len )
  2DUP#=      ( $ #max #len flag )
  case2DROP
              ( $ #max #len )
  2DUP#<      ( $ #max #len flag )
  casedrop
  :: 1_#1-SUB$ "\1E" &$ ;
              ( $ #max #len )
  #-          ( $ #adicionales )
  Blank$      ( $ $' )
  SWAP&$      ( $'' )
;

Alinear un campo a la derecha en IfMain Dibujo16
Jose Leonardo Ortiz
Jose Leonardo Ortiz
Junior HP+
Junior HP+

Masculino Cantidad de envíos : 50
Localización : Lima/Perú
Calculadora : HP 50g
ROM : 2.09

Volver arriba Ir abajo

Alinear un campo a la derecha en IfMain Empty Re: Alinear un campo a la derecha en IfMain

Mensaje  Oskr Dom Ene 24, 2010 10:58 am

Hola...

Gracias CesarV, como dice Gaak "No pensé que fuera tan extenso".
La habia imaginado así, pero pensé que había una forma mas corta y rápida de hacerlo.
Tu código me sirvió de mucho, sin querer me ayudaste a solucionar dos cosillas.

Alinear un campo a la derecha en IfMain Prueba_IfMain.jpg?rnd=0
Oskr
Oskr
Baby HP
Baby HP

Masculino Cantidad de envíos : 1
Localización : Ica - Perú
Calculadora : HP 50g
ROM : 2.15

http://www.adictoshp.org

Volver arriba Ir abajo

Alinear un campo a la derecha en IfMain Empty Alinear una etiqueta cuando un campo pierde el enfoque

Mensaje  Jose Leonardo Ortiz Vie Mar 05, 2010 8:25 am

Este código actualiza una etiqueta al dejar el enfoque de un campo.
Se usa el message handler número 1 el cual es llamado cuando el campo actual pierde el enfoque.

Código:
xNAME ActLabels
:: CK0

"A23 " { LAM $LABEL1 } BIND
LAM $LABEL1 0  8
"A2  "      0  16
"A3  "        60 8

'DROPFALSE
20 8 20 6
3 MINUSONE 3
"Campo A1"
MINUSONE
DUP DUP
DUP

' :: BINT1 #=casedrop
    ::
      BINT1        ( #f #1 )
      FALSE        ( #f #1 F )
      LAM $LABEL1  ( #f #1 F $ )
      DUP          ( #f #1 F $ $ )
      CAR$          ( #f #1 F $ chr )
      CHR>$        ( #f #1 F $ $letra )
      SWAP          ( #f #1 F $letra $ )
      BINT2        ( #f #1 F $letra $ #2 )
      OVERLEN$      ( #f #1 F $letra $ #2 #len )
      SUB$          ( #f #1 F $letra $Z )
      DOSTR>        ( #f #1 F $letra ZINT )
      Z1_          ( #f #1 F $letra ZINT Z1 )
      FLASHPTR QAdd ( #f #1 F $letra ZINT+1 )
      DO>STR        ( #f #1 F $letra $Z' )
      &$            ( #f #1 F $' )
      $>grob        ( #f #1 F grob )
      FLASHPTR IfSetGrob ( #f )
      TRUE              ( #f T )
    ;
    DROPFALSE
  ;
20 16 20 6
3 MINUSONE 3
"Campo A2"
MINUSONE
DUP DUP
DUP

'DROPFALSE
70 8 20 6
3 MINUSONE 3
"Campo A3"
MINUSONE
DUP DUP
DUP

3 3
'DROPFALSE
"PRUEBA IFMAIN"
FLASHPTR IfMain

ABND
;


En ese ejemplo la etiqueta 1 es "A23"

Cuando el el campo 2 tiene el
enfoque por primera vez
Cuando el campo 2
perdió el enfoque
Alinear un campo a la derecha en IfMain Dibujo17 Alinear un campo a la derecha en IfMain Dibujo18
Jose Leonardo Ortiz
Jose Leonardo Ortiz
Junior HP+
Junior HP+

Masculino Cantidad de envíos : 50
Localización : Lima/Perú
Calculadora : HP 50g
ROM : 2.09

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.