 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
lypaus Invitado
|
Publicado: Vie 19 Nov, 2004 3:49 pm Asunto: Controles pasarlo por referencia en una funcion.... |
|
|
Hola a todos y gracias a quienes contestaron mi duda anteriormente, pero eso no es lo que buscaba o bueno no entendi. vulevo con la misma inquietud y es pasar controles como el Edit como parametro en una funcion, por ejemplo una funcion para validar los caracteres que se deben ingresar, si yo quiero que esa validacion sea para 10 Edit debo copiar el mismo codigo para todos pero debe existir una forma que permita pasar el control como parametro y asi ahorrar lineas de codigo y tiempo.
gracias.......  |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Vie 19 Nov, 2004 4:11 pm Asunto: |
|
|
En cada evento OnExit de cadaTedit para validar colocas:
| Código: |
if(Valiacion(txtEsteEdit))==false txtEsteEdit->SetFocus();
|
y el evento validacion
| Código: |
bool Validacion(TEdit *TuEdit)
{
valor=true;
bla bla bla
bla bla bla (algo no se cumple pon valor a false)
bla bla bla
return valor;
}
|
_________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Vie 19 Nov, 2004 9:12 pm Asunto: |
|
|
Hola, Entiendo que deseas escribir una funcion donde pasandole como parametro un edit realice una validacion sobre este, pongamos como ejemplo que solo acepte "SI" y "NO", bien, puedes escribir la funcion pero esta debera ser llamada desde algun evento de los edits, otra forma es es poner la validacion como respuesta al evento deseado y asignar esta respuesta a los edits ya sea en tiempo de diseño o en tiempo de ejecucion, para ambos casos y esta validacion en particular el evento mas apropiado es OnExit, como te propone Gabriel.
Coloca unos 10 Edits en un form, selecciona el primero y en el inspector de objetos, pagina Events doble click en OnExit y pon lo siguente para que quede asi: | Código: | void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
TEdit* EsteEdit = (TEdit *)Sender;
if(EsteEdit->Text!="SI"&&EsteEdit->Text!="NO")
{
EsteEdit->Text="";
EsteEdit->SetFocus();
ShowMessage("Solo SI o NO");
}
} |
En la practica, en tiempo de diseño selecciona con el mouse todos los edits y en el inpector de objetos despliega el combo correspondiente a OnExit y selecciona Edit1Exit, o vete seleccionando uno por uno los edits y realiza la operacion con cada uno de ellos.
Al terminar veras que solo se escribio una vez el codigo pero funciona para todos los edit que tengan asignado este evento.
Si quisieras implementar la funcion seria asi:
| Código: | //en el cpp
void TForm1::ValidarEdit(TEdit *Edit)
{
if(Edit->Text!="SI"&&Edit->Text!="NO")
{
Edit->Text="";
Edit->SetFocus();
ShowMessage("Solo SI o NO");
}
}
//---------------------------
//Para usar el mismo evento OnExit como disparador
void __fastcall TForm1::Edit1Exit(TObject *Sender)
{
TEdit* EsteEdit = (TEdit *)Sender;
ValidarEdit(EsteEdit);
}
//---------------------------------------------------------------------------
|
Debes declarar la funcion tambien el el header: | Código: | public: // User declarations
void ValidarEdit(TEdit *Edit); |
Luego tendras que asignar a cada edit la respuesta al evento OnExit igual como en la opcion anterior, como veras de la primera forma es mas economico en lineas de codigo.
Para realizar las asignaciones a RunTime es asi: | Código: | Edit5->OnExit=Edit1Exit; | Bueno espero haberte sido util. |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Sab 20 Nov, 2004 1:43 am Asunto: |
|
|
Hola, veo que entre Touchsoftwares e Invitado han intentado resolver tu problema, y me parece que lo han conseguido.
Sin embargo no terminan de responder a tu pregunta ¿Cómo pasar un TEdit como parámetro a una funcón?
En los prototipos de las funciones que crea Builder por tí tienes cantidad de ejemplos Button1Click(TObject *Sender), TForm1(TComponent* Owner), ...
Crea una aplicación y, sin cambiar ningún nombre ni propiedad le añades 2 TEdit, un TCheckBox y un TButton, luego cambia el código do Unit1.cpp y pega el que te propongo: | Código: | //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (CheckBox1->Checked)
EjecutaEstaFuncion(Edit1, "Este es el mensaje");
else
EjecutaEstaFuncion(Edit2, "Este es el mensaje");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EjecutaEstaFuncion(TEdit *edit, const AnsiString mensaje)
{
edit->Color = clRed;
edit->Text = mensaje;
}
//--------------------------------------------------------------------------- | El ejemplo es bastante tonto, pero creo que ilustrativo para la pregunta que hacías (no para el problema que planteas). |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|