Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Bien, me ha servido para orientarme en mi código y ver otro fallo más. ¿qué pasa si seleccionamos el primer caracter o un rango que contenga el primer caracter y pulsamos un número? pues que el número se escribe porque SelLength no es igual a 0 y lo he solucionando cambiando el == por un >= y con eso da igual la cantidad de caracteres que seleccione que si el primer caracter es uno de ellos no dejará que se introduzca un número.
Así quedó mi código:
Código:
const char* wrongKey = "|°¬!\"#$%&/()='?\\¿¡@´¨+*~{[^}]`<>,;.:-";

//---------------------------------------------------------------------------

// Verificar en escritura
// El mismo evento lo asignamos a todos los TEdits que queramos filtrar
void __fastcall TForm1::EditsKeyPress(TObject *Sender, char &Key)
{
  TEdit *ed = static_cast<TEdit*>(Sender);

  // Si es el primer caracter  o si hay una seleccion que abarque al primer caracter
  // y este es numérico o si la tecla pulsada es uno de los caracteres prohibidos
  // evitamos que se imprima el caracter
  if((ed->SelStart == 0 && ed->SelLength >= 0 && isdigit(Key)) ||
     StrPos(wrongKey, String(Key).c_str()) != NULL)
  {
    Key=0;
    MessageBeep(0);
  }
}
//---------------------------------------------------------------------------

// Verificar por copiado/pegado
// El mismo evento lo asignamos a todos los TEdits que queramos filtrar
void __fastcall TForm1::EditsExit(TObject *Sender)
{
  TEdit *ed = static_cast<TEdit*>(Sender);
  bool invalid = false;

  // Si el TEdit no está vacío entramos
  if(ed->Text != "")
  {
    // Si el primer caracter es un número en este caso no nos vale la cadena pegada
    if(isdigit(ed->Text[1])){
      invalid = true;
    }else{
      // Si el primer caracter no es numérico comprobamos que la cadena no contenga caracteres inválidos para nuestro propósito recorriendola entera
      for(int i = 1; i <= ed->Text.Length();i++)
      {
        if (StrPos(wrongKey, String(ed->Text[i] ).c_str()) != NULL) {
          // Si se encuentra un caracter inválido
          invalid = true;
          // Salimos del bucle
          break;
        }
      }
    }

    if(invalid)
    {
      // Mostramos un mensaje avisando
      MessageBox(Application->Handle,AnsiString("Una cadena no válida fue pegada en " + ed->Name + ".\nRevísela antes de continuar.").c_str(),"Atención",MB_OK | MB_ICONERROR);
      // Devolvemos el foco al TEdit que contiene la cadena inválida
      ed->SetFocus();
      ed->SelStart = 0;
      ed->SelLength = 0;
    }
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  //Limpiamos todos los TEdits
  for(int i=0;i < ComponentCount; i++)
    if(Components[i]->ClassNameIs("TEdit"))
      (static_cast<TEdit*>(Components[i]))->Clear();
}
//---------------------------------------------------------------------------
Puedes ver que muchisimas cosas son copiadas o adaptadas de tu código porque me parecen muy bien hechas y he guardado este proyecto porque es bueno tener algo en que fijarse cuando lo necesite ya que cambiando cuatro cosas esto es muy estandarizable para cualquier otro proyecto.
Responder Con Cita
  #2  
Antiguo 08-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por aguml Ver Mensaje
...lo he solucionando cambiando el == por un >= ...
Perfecto

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 08-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Y ya que estamos refinando la operación, estaba viendo que esta parte:
Código PHP:
     for(int i 1<= ed->Text.Length();i++)
      {
        if (
StrPos(wrongKeyString(ed->Text[i] ).c_str()) != NULL) {
          
// Si se encuentra un caracter inválido
          
invalid true;
          
// Salimos del bucle
          
break;
        } 
Se puede escribir:
Código PHP:
     for(int i 1<= ed->Text.Length() && !invalidi++)
        if (
StrPos(wrongKeyString(ed->Text[i] ).c_str()) != NULL)
          
invalid true
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
nombres de tablas en un SP akela Conexión con bases de datos 2 14-12-2007 21:11:34
Propiedad tableName,al criterio look SQL 2 16-10-2007 01:54:32
¿Que componentes usar para tablas Paradox? h2o_mx Tablas planas 5 18-05-2006 18:14:38
Consejo para manejar tablas Paradox Coco_jac Varios 8 17-11-2005 17:27:17
como bloquear para borrar en tablas Paradox Mario1980 Varios 4 01-12-2004 15:17:51


La franja horaria es GMT +2. Ahora son las 22:45:10.


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