Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con Boton (https://www.clubdelphi.com/foros/showthread.php?t=54145)

adonias 10-03-2008 17:43:02

Ayuda con Boton
 
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:

Código Delphi [-]
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

Cita:

Empezado por eduarcol (Mensaje 272045)
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

Cita:

Empezado por adonias (Mensaje 272060)
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:

Código Delphi [-]
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.....

Código Delphi [-]
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

Cita:

Empezado por adonias (Mensaje 272201)
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:
Código Delphi [-]
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
  1. Quita lo que tienes en el evento OnCreate, como lo estabas haciendo inicialmente
  2. Dale doble click a uno de los botones y colocas la función que quieres que se ejecute
  3. Selecciona los demas botones, ve a Eventos y en el evento OnClick selecciona el evento del primer boton.
  4. 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.

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 14:11:33.

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