Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como limitar ingreso de l 1 al 10 en un edit (https://www.clubdelphi.com/foros/showthread.php?t=72975)

chino150 23-03-2011 18:58:53

Como limitar ingreso de l 1 al 10 en un edit
 
hola a todos
mi problema es el siguiente teng varios edit donde el usuario sol debe insertar los valores del 1 al 10 si insertar valores mas alto debe salir un mensaje informandole al usario.

como logro esto

gracias de antemano

Caral 23-03-2011 19:09:46

Hola
Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var valor: integer;
begin
   Valor:= 10;
   If Valor < StrToInt(Edit1.Text) then
   Showmessage('es mayor de 10');
end;
Saludos

Caral 23-03-2011 19:18:56

Hola
Todos los edit apuntando al evento del edit1.
El bucle esta definido para tres edit, se tendra que colocar la cantidad que se necesite.
Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var valor, i: integer;
        comp: TComponent;
begin
   for i := 1 to 3 do begin // la cantidad de edits que se tenga
   Valor:= 10;
   comp := FindComponent('Edit' + IntToStr(i));
   If Valor < StrToInt(TEdit(comp).Text) then
   Showmessage('es mayor de 10');
end;
end;
Saludos

chino150 23-03-2011 19:22:41

Cita:

Empezado por Caral (Mensaje 394388)
Hola

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var valor: integer;
begin
Valor:= 10;
If Valor < StrToInt(Edit1.Text) then
Showmessage('es mayor de 10');
end;



Saludos

Ok gracias como lo logro para 15 edit con la misma condicion

Caral 23-03-2011 19:25:58

Hola
El evento ONChange de cada edit que apunte al evento onchage del edit1.
Tambien puedes hacer un procedure que todos apunten a este.
Saludos

Caral 23-03-2011 19:28:44

Hola
Te va a dar un error (NO ES UN VALOR INTEGER), esto si los edits estan en blanco y apuntan al mismo evento.
Solucion: Colocar en el text de cada edit un 0.
Saludos

ContraVeneno 23-03-2011 19:30:02

¿no sería más sencillo utilizar un SpinEdit?

al menos no tendrías que escribir nada de código.

chino150 23-03-2011 19:32:16

Cita:

Empezado por Caral (Mensaje 394393)
Hola
Te va a dar un error (NO ES UN VALOR INTEGER), esto si los edits estan en blanco y apuntan al mismo evento.
Solucion: Colocar en el text de cada edit un 0.
Saludos

Esto es un problema para mi porque cuando arranca el programa los edits debe estar vacios

chino150 23-03-2011 19:33:17

Cita:

Empezado por ContraVeneno (Mensaje 394394)
¿no sería más sencillo utilizar un SpinEdit?

al menos no tendrías que escribir nada de código.

El ejecicio dise que debe ser edits normales

Caral 23-03-2011 19:34:00

Hola
Y por que es un problema si todo tiene solucion?.
Saludos

chino150 23-03-2011 19:37:50

Cita:

Empezado por Caral (Mensaje 394399)
Hola
Y por que es un problema si todo tiene solucion?.
Saludos

El profesor no quiere que los edits esten en blanco cuando inicie el programa

Caral 23-03-2011 19:42:21

Hola
No entiendo:
Tienen o NO tienen que estar en Blanco los edits?
Saludos

chino150 23-03-2011 19:43:51

Debe de estar en blanco

Caral 23-03-2011 19:44:56

Hola
Por eso digo: Cual es el problema, todo tiene solucion.
Espera, ya te digo.
Saludos

chino150 23-03-2011 19:46:00

ok
te espero

Caral 23-03-2011 19:57:45

Hola
Bien: Cuando inicie el programa estaran en Blanco (vacios).
Pero en cuanto se trate de ingresar un dato se llenaran de ceros, los que no tengan ya un dato.
El problema es que lee TODOS los edits, entonces necesitan poseer un dato integer.
Es como se me ocurre.
Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var valor, i: integer;
        comp: TComponent;
begin
   for i := 1 to 3 do begin // la cantidad de edits que se tenga
   Valor:= 10;
   comp := FindComponent('Edit' + IntToStr(i));
   if TEdit(comp).Text = '' then
   begin
   TEdit(comp).Text := IntToStr(0);
   end;
   if TEdit(comp).Text <> '' then
   If Valor < StrToInt(TEdit(comp).Text) then
   Showmessage('es mayor de 10');
end;
end;
Saludos
DP: Dile a tu profesor que le esta pidiendo mucho a un novato.:D;)

chino150 23-03-2011 20:09:05

Gracia Caral no tiene idea de lo abusadores que pueden ser los profesores en la Republica Dominicana

ContraVeneno 23-03-2011 20:10:14

Cita:

Empezado por chino150 (Mensaje 394396)
El ejecicio dise que debe ser edits normales

a caray... no todo lo que te enseñen en la escuela va a ser verdad...

no puedes construir puentes resistentes con palillos de dientes... aunque el ejercicio diga que sí...

utiliza el código de mi amigo Caral, si así es tu ejercicio, pero definitivamente debes de mostrarles que utilizando SpinEdits no tendrían que romperse la cabeza.

P.D. No se porque me dieron ganas de darle un zape a tu maestro, por cerrar puertas en lugar de fomentar la creatividad... shale...

pnsd_89 23-03-2011 20:21:13

y si coloca el maxleng en 2 y en el Onkey hace que las teclas permitidas solo sean las numericas? seria lo mas rapido creo yo

ContraVeneno 23-03-2011 20:23:45

Cita:

Empezado por pnsd_89 (Mensaje 394417)
y si coloca el maxleng en 2 y en el Onkey hace que las teclas permitidas solo sean las numericas? seria lo mas rapido creo yo

¿probaste el spinedit?
yo no veo otra cosa más rápida que utilizar el spinedit, establecer dos o tres propiedades y listo. Sin código, sin conversiones, sin validaciones....

pnsd_89 23-03-2011 20:25:49

aaa si el valor es mayor que 10 sacas el mensaje en el OnExit del edit

oscarac 23-03-2011 20:36:05

el uso del SpinEdit seria una buena solucion, pero.. creo yo... que el inefable profesor de la Republica Dominicana pretende enseñar a los alumnos a tener algo de creatividad y a usar la materia gris para solucionar problemas que aparentemente son faciles, pero como veran... dependen de ciertas variables y que al mismo tiempo todos tenemos una solucion diferente y similar sobre un mismo problema

ecfisa 23-03-2011 22:13:56

Hola Chino150.

Sumo otra alternativa a las que ya te han sugerido los compañeros:
Código Delphi [-]
...
interface

(* Inicializar TEdit's, asignar eventos *)
procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to ComponentCount -1 do
    if Components[i] is TEdit then
    begin
      TEdit(Components[i]).Text:= ''; // aca poné lo que el profesor quiera que se visualice
      TEdit(Components[i]).OnKeyPress:= EditKeyPress;
      TEdit(Components[i]).OnChange:= EditChange;
    end;
end;

(* Verificar sólo números *)
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [#8,'0'..'9']) then
  begin
    MessageBeep(MB_ICONERROR);
    Key:= #0;
  end;
end;

(* Verificar rango 1-10 *)
procedure TForm1.EditChange(Sender: TObject);
var
  v: Integer;
  s: string;
begin
  s:= TEdit(Sender).Text;
  if TryStrToInt(TEdit(Sender).Text, v)and(v < 1) or (v > 10)  then
  begin
    ShowMessage('Valor máximo/minimo permitidos: 1-10');
    TEdit(Sender).OnChange:= nil;
    Delete(s,Length(s),1);
    TEdit(Sender).Text:= s;
    TEdit(Sender).SelStart:= Length(s);
    TEdit(Sender).OnChange:= EditChange;
  end;
end;

Y coincido también que la petición es un poquito rebuscada...

Un saludo.

Caral 23-03-2011 22:20:14

Hola
Me gusta mucho.
Muy legible, facil, hecho especialmente para el profe de Chino150 que le gusta el codigo.
Saludos

ecfisa 23-03-2011 22:30:39

Cita:

Empezado por Caral (Mensaje 394451)
Hola
Me gusta mucho.
Muy legible, facil, hecho especialmente para el profe de Chino150 que le gusta el codigo.
Saludos

:D:D:D

Yo también experimento ese sentimiento de ContraVeneno...
Cita:

No se porque me dieron ganas de darle un zape a tu maestro
(Aunque no se lo que es un 'zape' creo que pensamos en lo mismo)

Un saludo.:)

ContraVeneno 23-03-2011 23:16:00

Cita:

Empezado por oscarac (Mensaje 394424)
el uso del SpinEdit seria una buena solucion, pero.. creo yo... que el inefable profesor de la Republica Dominicana pretende enseñar a los alumnos a tener algo de creatividad y a usar la materia gris para solucionar problemas ...

a la hora de "los trancazos", o dicho de otra forma, cuando hay que entregar el trabajo, la manera más "creativa", siempre será la más sencilla y rápida, la de menos esfuerzo. Y el spinedit es eso, la solución más sencilla de menor esfuerzo y mucho más funcional que cualquier código que me digas. Si, el código es muy bonito y puede funcionar, pero deja que el profe le diga: "a ver... ¿qué pasa cuando le doy cortar y pegar a un texto en ese Edit?". Usar la materia gris no quiere decir escribir mucho código.

SpinEdit: modifcar dos o tres propiedades.
Edit: ¿cuantas líneas de código llevan ya?, ¿que pasa si le doy cortar y pegar a un texto?


Cita:

Empezado por ecfisa (Mensaje 394452)
:D:D:D

Yo también experimento ese sentimiento de ContraVeneno...


(Aunque no se lo que es un 'zape' creo que pensamos en lo mismo)

Un saludo.:)

Acción de dar un zape:

oscarac 23-03-2011 23:24:24

Cita:

Empezado por chino150 (Mensaje 394396)
El ejecicio dise que debe ser edits normales

no quiero iniciar un debate ni nada parecido...

pero hay veces en que debemos usar solo lo que tenemos para luego entender su uso y ver que otras potencialidades podemos utilizar de los recursos que poseemos

y si dice que deben ser edits normales... pues ni modo... que sean normales...

ContraVeneno 23-03-2011 23:47:28

totalmente de acuerdo, mi buen oscarac, debemos saber lo que tenemos y lo que podemos y no podemos hacer con eso que tenemos.

Y en este momento, tenemos un Edit que no fue diseñado para manejar solo números y tenemos un spinedit que fue diseñado específicamente para manejar solo números. Si el profe de nuestro amigo Chino, no conoce los spinedits, seguramente tendrá muchos dolores de cabeza cuando quiera manejar solo números. Pero su falta de conocimiento no debe implicar que transmita sus mismos dolores de cabeza a sus alumnos.

Sería diferente si te dijera que existe un TjvValidateEdit (que no viene "de fábrica" en Delphi) , que es mucho mejor que el spinedit.

Simplemente no entiendo porque debo tomar el camino más largo, cuando se que puedo resolver mi problema de la manera más sencilla. O tal vez será que a mi no me gusta escribir código (porque yo no cobro por líneas de código, cobro por lo que he aprendido... y se que el spinedit es mucho más sencillo y más elegante que utilizar un edit en este caso).

Y como dije antes, si lo quieren hacer por código, háganlo por código. Pero discutan si realmente hacer todo por código es la mejor opción, cuando sabes que existe el spinedit.

ecfisa 23-03-2011 23:49:34

Hola.

Cita:

¿qué pasa cuando le doy cortar y pegar a un texto en ese Edit?
Hay que teclear en el evento OnExit, complicando más el código que ya lo es bastante...

Y vista la explicación de 'zape', si, efectivamente pensamos en lo mismo ( aca 'coscorron' ). Aunque me avergüenza confesar que también me cruzaron peores ideas... :)

Un saludo.

ContraVeneno 24-03-2011 00:01:09

no bueno, es que el zape aquí es con la mano abierta y en la parte posterior de la cabeza... igualito que en la imagen...

y el coscorrón es con la mano cerrada, generalmente en la parte frontal, de la cabeza, pero puede ser en cualquier parte de la cabeza.... pero que mejor que una imágen para que se vea claramente; Coscorrón:


como veras, en mi pueblo el zape y el coscorrón son diferentes. :D
el zape es más despectivo y el coscorrón es más doloroso.

ecfisa 24-03-2011 00:13:10

Cita:

Empezado por ContraVeneno (Mensaje 394477)
no bueno, es que el zape aquí es con la mano abierta y en la parte posterior de la cabeza... igualito que en la imagen...

Entonces no vi bién la imagen...

Aca 'coscorrón' es un golpe en la cabeza generalmente con los nudillos. Creo que no tenemos un término para dar un 'sopapo' en la coronilla, al menos yo no conozco uno. ( 'sopapo' generalmente se aplica al golpe mano abierta en la cara y 'chirlo' los dados en la cola a los niños idem al anterior)

Así que podríamos incorporar 'zape'... :)


Un saludo.

Caral 24-03-2011 01:42:13

Hola
Por cierto, nunca he usado el spinedit, donde esta?, es un componente de terceros, por que no lo encuentro en mi delphi 6.
Saludos

ecfisa 24-03-2011 02:09:54

Hola Carlos.

En Delphi 7 está en la pestaña Samples, desconozco si lo trae la versión 6...

Un saludo.

Caral 24-03-2011 02:21:46

Hola
Ya lo vi amigo, tienes razón.
Pero tengo varias dudas:
1. Tiene flechitas para los números, esto no se lo pidio el profe.
2- Tiene un 0 de inicio, esto tampoco lo pidio.
No se si se podran quitar, pero no es un edit (normal) que es lo que le pidieron.
No estoy en contra de vuestra apreciación del uso de este componente de hecho lo veo muy practico, pero CREO que lo que plantea el profesor de chino150 es el aprendizaje de código no del uso de componentes y no creo que este del todo equivocado.
Saludos

Delphius 24-03-2011 15:41:34

Hola,
No he visto el hilo desde el comienzo,

Amigo ContraVeneno no necesariamente la imposición del profesor es por ser una persona falta de neuronas. Es más yo diría que su imposición se debe a que los estudiantes recién están comenzando y es un ejercicio por demás de habitual el condicionarlos a una pequeña cantidad de controles y "obligar" a los estudiantes a que usen la cabeza, a que piensen... desarrollen la lógica, traten de encarar sus ideas y expresarlas en código. ESE ES EL PUNTO. ;)

Yo, será que vengo de una etapa de transición de la vieja escuela a la nueva, tengo la visión de que prefiero que "sufran" con un lenguaje nada visual que los distraiga y no los ayude a pensar en código. Vamos, el Turbo Pascal... de hace unos tantos años.
¡Sabes como se le abre la cabeza a los chicos con eso!
Pero claro, hoy en día es tan visual las cosas que buscan que al comienzo se aprendan un IF cuando en realidad en lo primero y lo único que ven es una pantallita hermosa pero que por dentro no saben ni tienen la más paupérrima idea de como "programarla".

Si se comenzara con algo que no los distraiga visualmente, el estudiante dedicará más tiempo a pensar, analizar y canalizar mejor sus ideas.

No logro entender el porqué se busca saltar etapas en la enseñanza...

Saludos,

oscarac 24-03-2011 15:56:11

Cita:

Empezado por Delphius (Mensaje 394544)
Es más yo diría que su imposición se debe a que los estudiantes recién están comenzando y es un ejercicio por demás de habitual el condicionarlos a una pequeña cantidad de controles y "obligar" a los estudiantes a que usen la cabeza, a que piensen... desarrollen la lógica, traten de encarar sus ideas y expresarlas en código. ESE ES EL PUNTO. ;)
Si se comenzara con algo que no los distraiga visualmente, el estudiante dedicará más tiempo a pensar, analizar y canalizar mejor sus ideas.

No logro entender el porqué se busca saltar etapas en la enseñanza...

Esto es basicamente... lo que trate de explicar en mis comentarios anteriores

En mi Pais se dice "Cocacho" al coscorron y "lapo" al zape... y podria citar al buen Nicomedes Sant Cruz

a cocachos aprendi mi labor de colegial... si desean pueden buscarlo en google

rgstuamigo 24-03-2011 17:03:58

Cita:

Extraido de la guía de estilo>
Cita:

En cuanto a los modismos propios de cada país, pedimos que no hagas uso de ellos, ten en cuenta que es posible que sólo te entiendan los de tu país y la ayuda que buscas puede venir de cualquier otro.

Amigos creo que debemos respetar eso, y tratemos en lo posible utilizar palabras netas en el propio catellano; aquí en mi pais hay infinidad de modismo, pero personalmente yo no los utilizo al postear,por respeto a la guía de estilo y para que la gran comunidad me pueda entender mejor.;)

En cuanto al profesor de nuestro amigo chino150, puedo decir que lo comprendo, por que yo mismo en la universidad he tenido (especialmente en las primeras materias de la carrera de ingeniería informática) profesores que han hecho exactamente los mismo que el profesor de chino150; aún recuerdo aquella vez cuando en un examen preguntaron:
¿Haga una funcion que verifique si un número es par, sin utilizar los operadores Mod, Div y sin recurrir a funciones propias del lenguaje?:eek::confused:
Para serles franco no puede resolverla:o,era un principiante, no conocía nada ni mucho menos assembler, aunque eso me llevo a pensar miles formas de resolverlo, y de verdad que la creatividad se dispara.:D

Bueno no quiero irme sin proponer tambien otra alternativa para que un Edit solo acepte número, usando algunas APIs de windows:
Código Delphi [-]
SetWindowLong(Edit1.Handle, GWL_STYLE,GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
Dicho código podemos ponerlo en el evento OnCreate del formulario por ejemplo...;)
Lógicamente habrá que adicionar códico para que valide que el número esté entre el rango de 1 y 10, para lo cuál ya se han posteado muchas alternativas...;)
Saludos....:)

bulc 29-03-2011 20:30:20

Contador
 
Cita:

Empezado por chino150 (Mensaje 394386)
hola a todos
mi problema es el siguiente teng varios edit donde el usuario sol debe insertar los valores del 1 al 10 si insertar valores mas alto debe salir un mensaje informandole al usario.

como logro esto.

gracias de antemano

Pues lo puedes conectar a un contador de flecha arriba-flecha abajo. O recoger la pulsación con el evento OnEditChange. Vas comparando los valores que tendrás que cambiar de String a Integer.... ¿Se entiende?
Saludos.

roman 29-03-2011 21:29:07

Vaya, no había visto este hilo. Debo decir que estoy de acuerdo cien por ciento con Delphius y oscarac, y, sinceramente creo, ContraVeneno, que deberías repensar un poco el asunto. Seguir la filosofía de para qué pienso si ya hay componentes hechos es lo que lleva (o trae) a algunas personas a venir con preguntas del estilo de ¿dónde encuentro un componente que dibuje figuras en tres dimensiones? Es que quiero hacer una aplicación tipo AutoCad.

Claro que uno debe aprender a no reinventar la rueda, pero en un curso básico de programación de lo que se trata es de aprender ciclos, condicionales, funciones, etc. y no simplemente a incrustar componentes.

// Saludos


La franja horaria es GMT +2. Ahora son las 16:02:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi