Campos en InputForm con ^IfMain
- Inicie sesión o regístrese para enviar comentarios
Hola...
Estoy creando un InputForm con ^IfMain, tengo un campo donde ingreso un número, pero este número se muestra al lado izquierdo del campo.

Como puedo forzar a ^Ifmain para que me muestre el número al lado derecho del campo?
- Inicie sesión o regístrese para enviar comentarios
* 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 $ )
;- Inicie sesión o regístrese para enviar comentarios
El código funciona para cualquier campo texto.
El subprograma DecompObjectIfMain está hecho para convertir el contenido del campo a cadena pero si deseas bajo ciertas condiciones puedes usar sólo DO>STR en lugar de este.
Oskr, Gaak, Edwin, son moderadores de este foro, explíquenme porque he sido expulsado el dia de hoy.
He tenido que crear una nueva cuenta.
- Inicie sesión o regístrese para enviar comentarios
Justo en lo que pensaba, pero no creí que fuera tan largo.
- Gaak -
- Inicie sesión o regístrese para enviar comentarios
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).
- Inicie sesión o regístrese para enviar comentarios
Como ancho de cada campo texto puedes usar cualquier valor.
Pero de preferencia puedes usar:
- Un múltiplo de 4 si usas minifuente.
- Un múltiplo de 6 si usas fuente normal.
De esta manera aprovecharás al máximo el espacio en la pantalla.
- Inicie sesión o regístrese para enviar comentarios
Información adicional sobre el parámetro #Decompile
El parámetro #Decompile es un bint que especifica como los objetos ingresados en el campo serán mostrados en la pantalla. Es un bint situado entre BINT0 y BINT47.
BINT1: muestra el objeto usando la minifuente.
BINT2: muestra los números usando el modo actual (STD, FIX, SCI, ENG)
BINT4: muestra los números usando siempre el modo estándar (STD)
BINT8: muestra solamente el primer carácter del objeto.
Puedes ingresar otro bint que sea la suma de algunos de los indicados.
Por ejemplo, si ingresas BINT5 (4+1), el objeto se mostrará usando el modo estándar y con minifuente.
Si el objeto contenido en el campo es una lista o cualquier compuesto, puedes agregar:
BINT16: muestra sólo el primer objeto del compuesto.
BINT32: muestra sólo el segundo objeto del compuesto.
Esta opción puede ser útil cuando uses un campo CHOOSE.
Por ejemplo, si ingresas BINT41 (32+8+1), se mostrará el segundo objeto del compuesto (sólo puede ser cadena o bint porque no tiene a 2 o a 4 como uno de sus sumandos), solamente su primer carácter y con fuente pequeña.
Otro ejemplo, si ingresas BINT18 (16+2), se mostrará el primer objeto del compuesto, usando el modo numérico actual y con fuente de tamaño normal (pues no está el 1).
OBSERVACIONES:
También puedes especificar el parámetro #Decompile como BINT0. En este caso, ninguna descompilación es hecha y sólo puedes usar cadenas y bints (se mostrará la cadena correspondiente al mensaje de error de dicho bint). En ambos casos, la cadena se mostrará sin las comillas dobles y con fuente de tamaño normal.
El parámetro #Decompile debe contener como uno de sus sumandos a BINT2 o a BINT4, excepto cuando el objeto que se mostrará es una cadena o un bint.
- Inicie sesión o regístrese para enviar comentarios
Ya que muchos cerebros piensan mejor que uno, tal vez me puedan ayudar con esto:
Al tener enfocado el campo A2, necesito que al soltar el enfoque de este campo su etiqueta A2 automáticamente se actualice con respecto a la etiqueta A1.
Es decir al soltar el enfoque del campo A2 actualize la etiqueta A2 (A1+1 = A2). Si en lugar de la etiqueta A1 tuviera A23 la etiqueta A2 se convierta en A24. Eh podido hacer esto con una variable de control externa pero las etiquetas no se me actualiza automáticamente, salvo que salga y vuelva a entrar al InputForm, existe algún comando para refrescar el InputForm? No lo eh podido encontrar.
Otra forma que eh podido hacer es que en lugar de etiquetas tuviera campos, pero no se como evitar que no tome el enfoque estos campos que reemplazan las etiquetas ya que no me interesa meter datos directamente en ellas.
Tal vez me estoy haciendo bolas sólito...

::
"A1"
0 8
"A2"
0 16
"A3"
60 8
'DROPFALSE
20 8
20 6
3
MINUSONE
3
"Campo A1"
MINUSONE
DUP DUP
DUP
'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
;- Inicie sesión o regístrese para enviar comentarios
C2A200620024A595400AE00008801086F032426843C0012064320820B5E522679090684959834000628C402C881444C027368861340E812A5C0273680413CF8D0624A23E602AE6048E600A8102089F8B16ECA005CA026DA082C6026D60238205D8205872AC0E14B801B82023416E600764410E141E6080697384284122092D9D20C2A2021100C9404040D010011402A012012601E10F0F0F114023100C526902A01123C2601823169C8D12385601555CA620400D40088130701330CA311000C4162656C613E3112B352470133C2A2050000F30B52C2A20F0000459647C656040079E60D9D20119202000091D3022A43D9D2084E20201413C49F285B93119201420169F28ED26E3B3B21300CA3400002D8E696372D70D6EE21113347A292733B2F99679F2679F2B09B2B3726B3774233954524H-> y descomprima con BZ.
Se usan los $msgh. Para A1 uso el #4 y para el general (que actualiza la pantalla) uso el #2.
Puede subir una animación de mi demo?, Ingrese en A1 un valor y auto se displaya.
A2=A1+1
A3=A2x2
A4=random
Todo lo que tengo que hacer por un Omnia 
- Gaak -
PD:
oops
- Inicie sesión o regístrese para enviar comentarios
Descomprimir esa cadena resultado de ->H ??
Gaak, no eh podido lograr descomprimirlo, BZ me dice que no es un archivo BZ y en lugar de descomprimir lo "comprime"
, sera que algo estoy haciendo mal?
Que herramienta exacta esta usando para descomprimir (hay muchos de ellos)
Eso me pasa por dejar de programar tantos años jejeje
Hablando de Omnia, seria muy bueno crear un emulador de la HP ya que el que existe por allí esta espantoso, no hay para el tamaño de pantalla.
- Inicie sesión o regístrese para enviar comentarios
1. Encender calculadora.
2. Colocar la cadena en el nivel 1.
3. Digitar H-> (requiere 256 ATTACH).
4. Presionar ENTER. (La cadena debe convertirse en objeto BZ).
5. Descomprimir con BZ.
6. EVAL.
7. Camtasia.
8. Publicar el demo.
9. Serpost.
10. Envolver Omnia.
11. Enviar a Trujillo.
12. Me voy a Serpost.
13. Recojo Omnia.
14. Hago todo lo que me pidas.
15. To be continued...
- Gaak -
PD: La string termina en 54524.
- Inicie sesión o regístrese para enviar comentarios
Gracias Gaak, pero tu código me actualiza los campos, eso si lo tengo claro, lo que no podía hacer era actualizar las etiquetas.
Este código era el que necesitaba (Gracias Edwin)
::
%1
' LAM ITEM
ONE DOBIND
"A1 "
0 8
"A2 "
0 16
"A3 "
60 8
'DROPFALSE
20 8
20 6
3
MINUSONE
3
"Campo A1"
MINUSONE
DUP DUP
DUP
'
::
IfMsgLooseFocus OVER#=case
::
2DROP
"A"
LAM ITEM %3 %* %1+
DECOMP$ &$ $>grob
BINT0
FALSE
ROT
FLASHPTR IfSetGrob
"A"
LAM ITEM %3 %* %2 %+
DECOMP$ &$ $>grob
BINT1
FALSE
ROT
FLASHPTR IfSetGrob
"A"
LAM ITEM %3 %* %3 %+
DECOMP$ &$ $>grob
BINT2
FALSE
ROT
FLASHPTR IfSetGrob
LAM ITEM %1+ ' LAM ITEM STO
ZERO
TRUE
;
DROPFALSE
;
20 16
20 6
3
MINUSONE
3
"Campo A2"
MINUSONE
DUP DUP
DUP
'DROPFALSE
75 8
20 6
3
MINUSONE
3
"Campo A3"
MINUSONE
DUP DUP
DUP
3 3
'DROPFALSE
"PRUEBA IFMAIN"
FLASHPTR IfMain
ABND
;PD. Vivimos enamorados del Omnia, y no es para menos, esa niña no se puede compartir ni mucho menos regalar
- Inicie sesión o regístrese para enviar comentarios














Hola...
"Tan extenso", 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.
Copiar y Pegar en Debug4x
::"A1"
0 8
"A2"
0 16
"A3"
60 8
'
:: BINT6 #=casedrop
:: ( #campo valor )
:: ( #campo valor )
DUP ( #campo valor valor )
' xNOVAL ( #campo valor valor NOVAL )
EQUAL ( #campo valor flag )
casedrop NULL$ ( SALE CON: #campo "" )
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 $ )
savefmt1 ( #campo valor )
DOSTD ( #campo valor )
DO>STR ( #campo $ )
rstfmt1 ( #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 )
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 #r #q )
SWAPDROP ( #campo T $ flag #q )
ROTSWAP ( #campo T flag $ #q )
:: ( $ #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&$ ( $'' )
;
SWAP ( #campo T $' flag )
ITE
$>grob
$>GROB
FLASHPTR IfSetGrob ( )
TrueTrue ( T T )
;
DROPFALSE
;
20 8
20 6
3
MINUSONE
3
"Campo A1"
MINUSONE
DUP DUP
DUP
'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
;
Descargar Programa
Saludos desde Ica - Perú
Yo solo puedo enseñarte la puerta, pero tú debes cruzarla...
Gmail: oscarlff