![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
muy interesante pero hay algo que no entiendo bien: if((ed->SelStart+ed->SelLength == 0 && Key>=0x30 && Key<=0x39)... La primera no entiendo que comprueba y la segunda ¿No se admiten numeros en el nombre? ¿Puedes explicar esa zona?
|
|
#2
|
||||
|
||||
|
Hola aguml.
Cuando la suma de las propiedades SelLength y SelStart es igual a cero, estamos situados en el primer caracter y un nombre de tabla no puede comenzar por por un dígito numérico (0x33='0', 0x39='9'). De allí en más esta condición no se cumple y son permitidos los dígitos numéricos. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#3
|
||||
|
||||
|
Muy interesante tu código y no sabía que un nombre de tabla no podia empezar con un número. ¿eso es solo en paradox?
Por cierto no sabía de la existencia de StrPos, yo siempre tiraba de strstr en C y en builder de AnsiString().Pos. Me gusta mucho el modo en que compruebas si el caracter es uno de los no deseados ya que yo hubiese tirado de muuuchos if. Nunca se me pasó por la cabeza esa opcion. Otra cosa, ¿por qué haces esto en vez de usar directamente el nombre del componente? TEdit *ed = static_cast<TEdit*>(Sender); if((ed->SelStart+ed->SelLength == 0... en vez de: if((Edit1->SelStart+Edit1->SelLength == 0... Le vería sentido para una funcion a la cual le pasas el puntero pero en un evento del componente donde puedes usar su nombre ya que no es algo que se vaya a usar en varios componentes diferentes... Última edición por aguml fecha: 06-09-2014 a las 18:13:12. |
|
#4
|
||||
|
||||
|
Aquí si le veo sentido:
Código:
const char* wrongKey = "|°¬!\"#$%&/()='?\\¿¡@´¨+*~{[^}]`<>,;.:-";
//---------------------------------------------------------------------------
// Limpiar Edit ingreso de nombre
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Clear();
Edit2->Clear();
Edit3->Clear();
}
//---------------------------------------------------------------------------
// Verificar en escritura
void VerifyKey(TObject *Sender, char &Key)
{
TEdit *ed = static_cast<TEdit*>(Sender);
if((ed->SelStart+ed->SelLength == 0 && isdigit(Key)) ||
StrPos(wrongKey, String(Key).c_str()) != NULL)
Key=0;
}
//---------------------------------------------------------------------------
// Verificar por copiado/pegado
void VerifyOnPaste(TObject *Sender)
{
TEdit *ed = static_cast<TEdit*>(Sender);
for(int i = 1; i <= ed->Text.Length();i++)
if (StrPos(wrongKey, ed->Text.c_str()+i) != NULL || 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();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
VerifyKey(Sender,Key);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
{
VerifyKey(Sender,Key);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit3KeyPress(TObject *Sender, char &Key)
{
VerifyKey(Sender,Key);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
VerifyOnPaste(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Exit(TObject *Sender)
{
VerifyOnPaste(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit3Exit(TObject *Sender)
{
VerifyOnPaste(Sender);
}
//---------------------------------------------------------------------------
Última edición por aguml fecha: 06-09-2014 a las 18:50:46. |
|
#5
|
||||
|
||||
|
Hola aguml.
Cita:
Código:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
TEdit *ed = static_cast<TEdit*>(Sender);
if((ed->SelStart+ed->SelLength == 0 && Key>=0x30 && Key<=0x39) ||
StrPos(wrongKey, String(Key).c_str()) != NULL)
Key=0;
}
Lo mismo cuenta para la función miembro "Edit1Exit". Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#6
|
||||
|
||||
|
pues tienes toda la razon, no habia pensado en esa opcion. En ese caso seria mejor crearnos un nombre mas estandar pero es algo simplemente porque el nombre no haga referencia a un tedit, solo eso. Por ejemplo EditKeyPress y EditExit.
|
|
#7
|
||||
|
||||
|
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;
}
}
}
}
}
//---------------------------------------------------------------------------
Corrijeme en lo que veas que estoy equivocado. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|