Ver Mensaje Individual
  #4  
Antiguo 06-09-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 14
aguml Va por buen camino
ecfisa tu código para cuando sales del TEdit tiene algo mal, he estado mirandolo y yo al final lo he dejado así y funciona:
Código:
// 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);

  //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])){
      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);
      ed->SetFocus();
    }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) {
          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);
          ed->SetFocus();
          break;
        }
      }
    }
  }
}
//---------------------------------------------------------------------------
El problema es que si metes el primer caracter inválido de la lista que es '|' no lo detecta o he visto cosas raras como que si es el primero si lo detecta pero si no lo es y tiene mas caracteres detras tampoco lo detecta. Ahora no recuerdo cuales eran los casos pero en mi código si funciona. Mira a ver que falla en el tuyo. Creo que ademas en tu código, en el for, i tendria que empezar valiendo 0 y el <= tendria que ser solo < ya que si no te saltas el primer caracter malo de la lista wrongKey. Ademas si encuentras un caracter malo tienes que terminar el bucle ya que recorrería toda la cadena aunque encuentre un caracter de los de wrongKey.
Corrijeme en lo que veas que estoy equivocado.
Responder Con Cita