Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 01-10-2005
Epunamun Epunamun is offline
Miembro
 
Registrado: jul 2005
Posts: 45
Epunamun Va por buen camino
Validar tipo de datos en un Tedit..

Hola nuevamente..... tengo un problemita... mi idea es validar los datos ke insertan los usuarios de mi aplicacion a travez de un Tedit. Por ejemplo para ke un Tedit no se kede vacio es simple..

Código Delphi [-]
    
if edit1.text = '' then
   MessageDlg('Ingrese un Telefono', mtInformation, [mbOK], 0);
 end;
 edit1.setfocus;
Pero como lo hago para tambien validar ke en el Tedit se puedan ingresar solamente numeros, como en el caso del Tedit anterior ke se tienen que ingresar solamente numeros telefonicos.

Bueno mi idea es no usar maskedit . ..

Pa variar gracias .....

Última edición por dec fecha: 01-10-2005 a las 18:10:13. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #2  
Antiguo 01-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 18.860
roman Va camino a la fama
Cita:
Empezado por Epunamun
Por ejemplo para ke un Tedit no se kede vacio es simple..

Código:
    
  if edit1.text='' then
Pues ni tanto. Más correcto sería:

Código Delphi [-]
if Trim(edit1.text) = '' then

a menos que consideres puros espacios en blanco como un dato no vacío

Para lo de los números telefónicos te convendría más usar un TMaskEdit.

// Saludos
__________________

Menos reyes y más elefantes
http://clubdelphi.com/correo_contacto_clubdelphi.png
Responder Con Cita
  #3  
Antiguo 01-10-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.714
dec Va por buen camino
Hola,

¿Dónde demonios habré leído yo que algo como lo siguiente era más efectivo? ¿Acaso fue en relación al lenguaje C#? ¿Valdrá para Delphi también, quiero decir, será más efectivo que otra cosa? No recuerdo dónde me enteré de esto, y, sin embargo es obsesión lo mío... ahora siempre lo tengo que hacer así porque me acuerdo de aquello que leí no sé dónde...

Código Delphi [-]
   if Length(Edit1.Text) = 0 then
   begin
     ShowMessage('¡Escribe algo hombre!');
   end;
Esto es, comparar la longitud de la cadena, para saber, si esta es "cero", que no se escribió nada en un "TEdit", en este caso, vamos... Para mí tengo que lo leí en algún artículo, curso, manual o libro sobre C#, que, puesto que se puede hacer algo así:


Código:
 if (textBox1.Text == string.Empty)
 {
   // Aviso a navegantes
 }
Leí, como he dicho ya, que era mejor, más efectivo, hacer algo así:


Código:
 if (textBox1.Text.Length == 0)
 {
   // Aviso a navegantes
 }
Bueno. En cualquier caso disculpad la digresión, si esta es muy evidente
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #4  
Antiguo 01-10-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Modelador
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.237
vtdeleon Va por buen camino
Saludos

Pienso que la solucion de roman es mas efectiva, ya que con el trim eliminas los espacios en blanco. Pero midiendo la longitud podria ser validado si se deja un espacio, ya que seria diferente de 0.

Haciendo una combinacion de ambo, fenomenal
Código Delphi [-]
if Length(trim(Edit1.Text)) = 0 then
   begin
     ShowMessage('¡Escribe algo hombre!');
   end;
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #5  
Antiguo 01-10-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 18.860
roman Va camino a la fama
Como bien dice vtdeleon, la razón del Trim es para eliminar los espacios en blanco ya que ' ' no tiene longitud cero.

Lo que dices de la mayor efectividad de Length, en efecto, no sé dónde lo habrás leído ; la llamada a una función siempre será un poco más lenta (unos cuantos nano segundos) por el paso de parámetros al stack y la devolución del valor. Compara el código ensamblado que genera Delphi:

Código:
if Length(S) = 0 then

mov eax, [ebp-$04]
call @LStrLen
    ; código de LStrLen
    test eax, eax
    jz +$03
    mov eax, [eax-$04]
    ret

test eax, eax
jnz +$0a


if S = '' then

cmp dword ptr [ebp-$04]
jnz +$0a
Aún descontando el código de LStrLen, está el paso del parámetro para llamar a la función y luego de cualquier manera requires una comparación.

// Saludos
__________________

Menos reyes y más elefantes
http://clubdelphi.com/correo_contacto_clubdelphi.png
Responder Con Cita
  #6  
Antiguo 01-10-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.714
dec Va por buen camino
Hola,

Pues muchas gracias, roman, por la información. Lamento no recordar dónde leí lo que digo, pero, si se mira el código fuente de XEditor podrá verse cómo hize caso de la lectura aquella... pero pronto dejará de verse así, puesto que corregiré donde sea menester el código que hasta ahora existe por algo parecido a lo que tú has propuesto y demostrado como más efectivo. Gracias de nuevo.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #7  
Antiguo 01-10-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.714
dec Va por buen camino
Hola,

roman, ya revisé y cambié el código en donde corresponde de modo que se ajuste a lo que parece más razonable según tu explicación. Y además procuraré anotarme el dato para sucesivas ocasiones. Sin embargo, me queda una duda, puesto que leí lo que leí, como he dicho. Me explico. Arriba se ve que la comparación "a lo bruto" del código "ensamblador" resultante de hacerlo de una manera o de otra refleja que una de ellas "ocupa" más que otra, esto es, aparentemente (insisto) hay una diferencia clara.

Sin embargo, roman, puesto que dices que "de todos modos hay que hacer una comparación" y en mi ignorancia veo que, en todo caso, la comparación no se hace de la misma forma de una manera que de otra, me pregunto, ¿no puede ser que el hacer la comparación de la forma en que leí como la mejor de hacerlo sea más efectiva? Esto es, que, aunque a todas luces de una manera se ocupe "menos código ensamblador" que de la otra, ¿no puede ser que la que ocupa más, en este caso, sea más efectiva, más rápida, eficaz, preferible, qué se yo...?
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #8  
Antiguo 02-10-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Modelador
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.237
vtdeleon Va por buen camino
Saludos

Cita:
Lo que dices de la mayor efectividad de Length, en efecto, no sé dónde lo habrás leído ; la llamada a una función siempre será un poco más lenta (unos cuantos nano segundos) por el paso de parámetros al stack y la devolución del valor.
Sabía que dirían eso. Algo irónico:P
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #9  
Antiguo 02-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.331
Lepe cantidad desconocida en este momento
Yo tambien leí (en el mismo sitio que dec algo pareceido). Creo recordar que el tamaño del string se guardaba en la posición cero de la misma variable, por tanto, la función Length unicamente leía el primer byte del String (de ahí la "eficiencia" de esa función).

Ahora mismo y teniendo en cuenta el tamaño que puede tener un String en delphi 6/7, dudo que en el primer byte se puedea guardar el tamaño. Supongo que alguna vez en delphi fue tal y como dice dec

Un saludo
Responder Con Cita
  #10  
Antiguo 02-10-2005
dec dec is offline
Moderador
 
Registrado: dic 2004
Posts: 11.714
dec Va por buen camino
Hola,

Veo que Lepe y yo tenemos lecturas muy parecidas.

En todo caso me veo en la obligación de añadir que lo que leí creo recordar que tenía relación con C#, y, por ende, con .NET. Yo lo apliqué a Delphi porque pensé que al cabo era muy parecido: de hecho la comparación se lleva a cabo de la misma forma tanto en C# como en Delphi, esto es, a nivel de la sintaxis utilizada, porque, ciertamente, más allá no sabría ir... sin lazarillo y por lo pronto.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:16:07.


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