Page 1 of 2

Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Fri Mar 19, 2010 7:56 pm
by mustafa
Hello Friends:
In the Clipper programming by restriction of
Data could be to attempt to enter restricted
in my case letters distrintas to "SNFGH" ie
that the user can only press each time "S" or
"N" or "F" etc.etc. unable to enter other letters
aotorizadas and besides that only in all caps
mod = "N"
@ 05.12 SAY "Data Entry" + SPACE (3) + "(SNFGH)";
GET PICTURE "@!" VALID mod $ "SNFGH"
READ

My question as I do the same by
InputMask TextBox?
mod = "N"
@ 168.313 TextBox Tex_02;
VALUE "N";
BACKCOLOR (183,214,255);
WIDTH 15 HEIGHT 18;
InputMask "!" VALID mod $ "SNFGH"

Presented in this way is giving me ERROR
Thanks for your attention
*----------------------------------------------------*
Restringir Entradas de Letras en el TEXTBOX -> INPUSMASK
Hola Amigos:
En la programación Clipper mediante restricción de
Datos se podia restringir que se intentara entrar
en mi caso letras distrintas a "SNFGH" es decir
que el usuario solo puede pulsar cada vez "S" o
"N" o "F" etc.etc. no pudiendo ingresar otras letras
que las aotorizadas y ademas solo en mayusculas

mod = "N"
@ 05,12 SAY " Entrada de Datos:"+SPACE(3)+"(SNFGH)";
GET PICTURE "@!" VALID mod$"SNFGH"
READ

Mi Pregunta como puedo hacer lo mismo mediante un
TEXTBOX con INPUTMASK ?
mod = "N"
@ 168,313 TEXTBOX Tex_02 ;
VALUE "N" ;
BACKCOLOR {183,214,255} ;
WIDTH 15 HEIGHT 18 ;
INPUTMASK "!" VALID mod$"SNFGH"

Presentado de este modo me está dando ERROR
Gracias por su atención
Mustafa :(

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Fri Mar 19, 2010 10:01 pm
by srvet_claudio
Hola Mustafa,
aparentemente según el tutorial TEXTBOX no posee clausula VALID. Aqui va una función que la emula.
Saludos
Claudio

Code: Select all

#include <hmg.ch>


PROCEDURE Main

DEFINE WINDOW Win_1 ;
AT 0,0 ;
WIDTH 640 HEIGHT 450 ;
TITLE 'Invento' ;
MAIN 



PRIVATE mod := "N"

@ 168,313 TEXTBOX Tex_02 ;
VALUE mod ;
BACKCOLOR {183,214,255} ;
WIDTH 150 HEIGHT 18 ;
INPUTMASK "!" ON LOSTFOCUS func_test () ON ENTER func_test ()


@ 200,313 TEXTBOX Tex_03 ;
VALUE "Texto molesto" ;


END WINDOW

CENTER WINDOW Win_1

ACTIVATE WINDOW Win_1

RETURN 

function func_test ()
    if (win_1.tex_02.value $ "SNFGH") = .F.
       win_1.tex_02.value := mod
       win_1.tex_02.setfocus
    endif
return


Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Fri Mar 19, 2010 10:55 pm
by mustafa
Hola claudio
El Invento parece que funciona muy bien
gracias atender mi consulta.
Mustafa

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Sat Mar 20, 2010 1:24 am
by srvet_claudio
Hola Mustafa,
mirando los ejemplos, encontré una forma mucho mas genérica de resolver el problema que la función anterior:

Si los datos son incorrectos no permite abandonar la edición con:

Code: Select all

ON LOSTFOCUS If (.NOT.(This.Value $ "SNFGH") , This.SetFocus, NIL)

Code: Select all

ON LOSTFOCUS If (.NOT.(This.Value $ "SNFGH") , EVAL({|| This.SetFocus, This.Value:= 'N'}), NIL)
En esta ultima forma, ademas asigna un valor por defecto, en este caso 'N'
Lo mismo vale para ON ENTER

Saludos,
Claudio

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Sat Mar 20, 2010 10:48 am
by mustafa
Hola Claudio
Muy amable por tu contestación
Reciba un cordial Saludo
Mustafa

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Sat Mar 20, 2010 5:48 pm
by srvet_claudio
Hola Mustafa,
Esta función emula el viejo WHEN de Clipper, siguiendo con el ejemplo si el campo es diferente de 'N' no permite
la edición de los datos

Formato HMG:

Code: Select all

ON GOTFOCUS IF (This.Value <> "N", This.Enabled := .F., This.Enabled := .T.)
Formato no convencional con función en C:

Code: Select all

ON GOTFOCUS IF (This.Value <> "N", SET_TAB_KEY(), NIL)
Funcion en C:

Code: Select all

#pragma begindump

#include <shlobj.h>   
#include <winuser.h>
#include <windows.h>
#include "hbapi.h"

// Emula la digitacion de la tecla TAB, en consecuencia le pasa el foco al siguiente control activo

HB_FUNC (SET_TAB_KEY)
{  
   keybd_event(VK_TAB, VK_TAB, NULL, NULL); 
}

#pragma enddump
En esta ultima forma si no se satisface la condición le pasa el foco al siguiente control activo (simula la digitacion de la tecla
TAB para pasar al siguiente control).

Saludos
Claudio

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Sat Mar 20, 2010 7:49 pm
by mustafa
Hola amigo Claudio
He puesto en practica tu codigo haber si lo he
sabido interpretar ? Mira este sample que he puesto.
http://hmgforum.com/viewtopic.php?f=15&t=1244
En Codigo Fuente del Fichero "Create.Prg" si miras veras
@ 168,313 TEXTBOX Tex_02 ;
VALUE "" ;
BACKCOLOR {183,214,255} ;
WIDTH 15 HEIGHT 18 ;
INPUTMASK "!" ON LOSTFOCUS If (.NOT.(This.Value $ "CNDLM") , EVAL({|| This.SetFocus, This.Value:= 'C'}), NIL)

Bueno lo he puesto a mi manera pero veo que funciona.
Un saludo cordial
Mustafa

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Sat Mar 20, 2010 9:01 pm
by srvet_claudio
Mustafa,
me alegro que te funciono.
Reitero lo que te postee sobre el "sample": FELICITACIONES!!!
Saludos,
Claudio.

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Tue Jul 15, 2014 4:49 am
by bpd2000
srvet_claudio wrote:Hola Mustafa,
aparentemente según el tutorial TEXTBOX no posee clausula VALID. Aqui va una función que la emula.
Saludos
Claudio
Dear Dr. Claudio
Request to have VALID and WHEN clause in TEXTBOX in next version of HMG

Re: Lyrics restrict entries in the TEXTBOX-> INPUSMASK

Posted: Tue Jul 15, 2014 7:22 am
by serge_girard
Good idea BPD!

Serge