PDA

Ver la Versión Completa : Ayuda con Boton


adonias
10-03-2008, 17:43:02
Hola Amigos.

Tengo el siguiente problema. en mi form hay 8 botones que todos deben ejecutar la misma accion pero con distintas variable.

Entonces lo que hago es lo siguiente:

Button1.Caption := Nombre del Botton;
Button1.Visible := true;
Button1.OnClick := Mi_function(Mis varable);

El problema es que cuando ejecuto el exe, la funcion se ejecuta enseguida, y NO cuando hago CLICK sobre el boton.

No se como solucionar esto....

gracias por su ayuda

eduarcol
10-03-2008, 18:04:00
si la funcion se ejecuta es porque la estas llamando en un sitio, revisa las lineas qe se deben ejecutar al iniciar la aplicacion para ver si estas invocando la funcion

Neftali [Germán.Estévez]
10-03-2008, 18:20:15
si la funcion se ejecuta es porque la estas llamando en un sitio, revisa las lineas qe se deben ejecutar al iniciar la aplicacion para ver si estas invocando la funcion

A veces me ha pasado que algun evento (como el que tu comentas) lo he asignado a algun evento (sin darme cuenta) de los que se ejecutan al inicio (OnShow, OnActive,...); Revisa que no te haya pasado lo mismo...

adonias
10-03-2008, 18:45:55
Ya revise, y nada...

es decir cuando coloco esta funcion es cuando ejecuto el form create.. nada mas...

revise todos los botones, y ninguno tiene asignada ninguna accion ni nada.. :eek::eek::eek::eek::eek::eek::eek::eek:

turminator
10-03-2008, 18:50:12
Ya revise, y nada...

es decir cuando coloco esta funcion es cuando ejecuto el form create.. nada mas...

revise todos los botones, y ninguno tiene asignada ninguna accion ni nada.. :eek::eek::eek::eek::eek::eek::eek::eek:
Creo que este es el problema. Has asignado que la función se ejecute nada más crear el Form. Si lo que quieres es asignar la función debes escibiri tu codigo en el evento click del ratón.

Para llegar a dicho evento puedes buscarlo en el inspector de eventos o bien pulsar doble clic directamente encima del botón de la Form (en edición)

Espero te sea de ayuda, ya que yo aún soy un principiante de Delphi.

Saludos!

Neftali [Germán.Estévez]
10-03-2008, 22:22:02
Coloca un breakpoint al inicio de la función y cuando se pare la ejecución en ese punto visualiza la ventana de "Call stack" (pila de llamadas) y tal vez veas quien ha hecho la llamada y te de pistas de porqué se está lanzando la función en ese punto.

adonias
11-03-2008, 01:32:14
Gracias por su ayuda, pero aun asi no funciona...

pegare el codigo completo:

function Ejecutor(const var1:string ;var2:string ) : tnotifyevent;
begin
//alerto cuando cliqueo el boton
showMessage('Esta es una funcion desde un boton con varias variables');
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
C4_server1_nombre :string,
begin


//Chequeamos y activamos los botones segun INI

C4_server1_nombre:= retINI( 'C4', 'SERVER1_Nombre');
if Length(Trim(C4_server1_nombre)) > 0 then
begin
Button1.Caption := C4_server1_nombre;
Button1.Visible := true;
Button1.onClick := Ejecutor(var1, var2 );
end;

end;

gracias

egostar
11-03-2008, 01:34:36
Y si pruebas en el evento Onshow.....

procedure TForm1.FormShow(Sender: TObject);
var
C4_server1_nombre :string,
begin
//Chequeamos y activamos los botones segun INI
C4_server1_nombre:= retINI( 'C4', 'SERVER1_Nombre');
if Length(Trim(C4_server1_nombre)) > 0 then begin
Button1.Caption := C4_server1_nombre;
Button1.Visible := true;
Button1.onClick := Ejecutor(var1, var2 );
end;
end;


Salud OS

adonias
11-03-2008, 01:39:06
sigue danto el mismo error... sin apretar nada muestra el mensaje aun con el show.

y en Call stk dice the procces is not access...

Una duda...

el OnClick puede llamar una function o obligatoriamente tiene que llamar un Produce (por el TNotifyEvent)?

egostar
11-03-2008, 01:50:52
sigue danto el mismo error... sin apretar nada muestra el mensaje aun con el show.

y en Call stk dice the procces is not access...

Una duda...

el OnClick puede llamar una function o obligatoriamente tiene que llamar un Produce (por el TNotifyEvent)?

Bueno, es que por supuesto que esta haciendo bien las cosas, NO es un error, ya que estas ejecutando el proceso cuando inicias tu aplicación.

Que es lo que realmente quieres que haga, no entiendo lo que comentas al inicio del hilo.

Salud OS

adonias
11-03-2008, 01:56:24
Tengo una serie de botones...

cada uno de estos botones, llama la misma accion , pero con distintas variables...
desde el showform le asigno la funcion al boton con sus variables...

NECESITO QUE ESTA FUNCION SE EJECUTE CUANDO HAGAN CLICK.

Si tu intentas crear un form basico y le das a un boton una funcion como esta:

function funciondelboton():TnotifyEvent;
begin
showMessage('jo');
end;
{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
Button1.OnClick := funciondelboton() ;
end;


el showmesage se ejecuta cuanto tu corres el exe, y no cuando haces click

egostar
11-03-2008, 02:03:02
Muy bien, entonces has esto


Quita lo que tienes en el evento OnCreate, como lo estabas haciendo inicialmente
Dale doble click a uno de los botones y colocas la función que quieres que se ejecute
Selecciona los demas botones, ve a Eventos y en el evento OnClick selecciona el evento del primer boton.
Listo, compila y ejecuta. :)


Salud OS

Edito:

No habia visto lo de las variables de cada botón pero en el evento "común" deberia de tener algo así, puede haber algo mas adecuado pero esto es lo que se me ocurre así de bote-pronto.


procedure TForm1.Button1Click(Sender: TObject);
begin
if (sender as TButton).Name = 'Button1' then begin
//Asigna Variables Boton 1
end;
if (sender as TButton).Name = 'Button2' then begin
//Asigna Variables Boton 2
end;
if (sender as TButton).Name = 'Button3' then begin
//Asigna Variables Boton 3
end;
if (sender as TButton).Name = 'Button4' then begin
//Asigna Variables Boton 4
end;
Ejecutor(var1, var2 );
end;

adonias
11-03-2008, 02:58:15
:P

Funciono ... mil gracias