Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-10-2003
chuck chuck is offline
Registrado
 
Registrado: oct 2003
Posts: 1
Poder: 0
chuck Va por buen camino
Post Crear eventos

Hola a todos.
Tengo un problema que probablemente tendra facil solucion, pero soy navato en esto.
Necesito asignar un determinado codigo en el evento onclick de un boton. El problema que tengo es que este boton esta creado en tiempo de ejecucion y no puedo asignar el evento desde el inspector de objetos. ¿Alguien sabe como hacerlo?.

Gracias por adelantado
Responder Con Cita
  #2  
Antiguo 29-10-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Siempre recuerda que en Delphi los eventos, no son mas que propiedades del tipo procedure of object (Una grán mayoría del tipo TNotifyEvent), o sea que se asignan como cualquier otra propiedad:
Código:
procedure TForm1.OnButtonClick(Sender: TObject);
begin
  ShowMessage('Click!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TButton.Create(Self) do
  begin
    Parent := Self;
    Caption := 'Botón';
    OnClick := OnButtonClick;
  end;
end;
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 29-07-2007
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por delphi.com.ar
Siempre recuerda que en Delphi los eventos, no son mas que propiedades del tipo procedure of object (Una grán mayoría del tipo TNotifyEvent), o sea que se asignan como cualquier otra propiedad:
Código:
procedure TForm1.OnButtonClick(Sender: TObject);
begin
  ShowMessage('Click!');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TButton.Create(Self) do
  begin
    Parent := Self;
    Caption := 'Botón';
    OnClick := OnButtonClick;
  end;
end;
Saludos!
Hola se q este hilo es algo viejo.....pero podrias decirme como resolviste el problema -que por cierto lo tengo este momento-, para saber q boton estas pulsando???

Gracias camarada de antemano por tu tiempo q le dediques a leer esto q envio.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #4  
Antiguo 29-07-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por mRoman
...podrias decirme como resolviste el problema -que por cierto lo tengo este momento-, para saber q boton estas pulsando???...
Simple, si te fijas muchos eventos tienen un parámetro Sender del tipo TObject, y este objeto es el objeto que ha llamado al evento.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 29-07-2007
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Gracias por tu respuesta rapida.

En estos momentos estoy desarrollando la pantalla q tendra creacion de botones en tiempo de ejecucion, la respuesta q me das entiendo lo siguiente, el TObject es un parametro....asi lo entiendo, pero serias tan amable de mostrarme como seria con codigo, ya que desafortunadamente no lo he entendido del todo como lo planteas, un ejemplo seria mas descriptivo....

Gracias...en estos momentos estoy en linea.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #6  
Antiguo 29-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No se si sera esto lo que preguntas, pero para saber que boton presionaste es solo cuestion de definir el nombre de la variable, algo asi:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure OnButton1Click(Sender: TObject);
    procedure OnButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Button1,Button2: TButton;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    Button1:= TButton.Create(Self);
    Button1.Parent := Self;
    Button1.Caption := 'Botón';
    Button1.Left:= 20;
    Button1.Top:= 10;
    Button1.OnClick := OnButton1Click;

    Button2:= TButton.Create(Self);
    Button2.Parent := Self;
    Button2.Caption := 'Botón';
    Button2.Left:= 100;
    Button2.Top:= 10;
    Button2.OnClick := OnButton2Click;
end;

procedure TForm1.OnButton1Click(Sender: TObject);
begin
  ShowMessage('Presionaste el boton 1!');
end;

procedure TForm1.OnButton2Click(Sender: TObject);
begin
  ShowMessage('Presionaste el boton 2!');
end;

end.
Como veras, aqui estan el boton 1 y el dos declarados y tienen un diferente evento OnClick.
Espero que te sirva.
Saludos
Responder Con Cita
  #7  
Antiguo 29-07-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Código Delphi [-]
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Button1,Button2: TButton;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
    Button1:= TButton.Create(Self);
    Button1.Parent := Self;
    Button1.Caption := 'Botón 1';
    Button1.Left:= 20;
    Button1.Top:= 10;
    Button1.OnClick := ButtonClick;
 
    Button2:= TButton.Create(Self);
    Button2.Parent := Self;
    Button2.Caption := 'Botón 2';
    Button2.Left:= 100;
    Button2.Top:= 10;
    Button2.OnClick := ButtonClick;
end;
 
procedure TForm1.ButtonClick(Sender: TObject);
begin
 ShowMessage('Presionaste el ' + (Sender as TButton).Caption + '!');
end;
 
end.

Y me parece que al no interesar más datos de los botones se podría hacer algo como ésto:

Código Delphi [-]
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 with TButton.Create(Self) do
  begin
   Parent := Self;
   Caption := 'Botón 1';
   Left:= 20;
   Top:= 10;
   OnClick := ButtonClick;
  end;
 with TButton.Create(Self) do
  begin
   Parent := Self;
   Caption := 'Botón 2';
   Left:= 100;
   Top:= 10;
   OnClick := ButtonClick;
  end;
end;
 
procedure TForm1.ButtonClick(Sender: TObject);
begin
 ShowMessage('Presionaste el ' + (Sender as TButton).Caption + '!');
end;
 
end.

PD: Claro que hay N formas de obtener lo que quieres.
Responder Con Cita
  #8  
Antiguo 29-07-2007
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Crear botones en ejecucion

Cita:
Empezado por Caral
Hola
No se si sera esto lo que preguntas, pero para saber que boton presionaste es solo cuestion de definir el nombre de la variable, algo asi:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure OnButton1Click(Sender: TObject);
    procedure OnButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Button1,Button2: TButton;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    Button1:= TButton.Create(Self);
    Button1.Parent := Self;
    Button1.Caption := 'Botón';
    Button1.Left:= 20;
    Button1.Top:= 10;
    Button1.OnClick := OnButton1Click;

    Button2:= TButton.Create(Self);
    Button2.Parent := Self;
    Button2.Caption := 'Botón';
    Button2.Left:= 100;
    Button2.Top:= 10;
    Button2.OnClick := OnButton2Click;
end;

procedure TForm1.OnButton1Click(Sender: TObject);
begin
  ShowMessage('Presionaste el boton 1!');
end;

procedure TForm1.OnButton2Click(Sender: TObject);
begin
  ShowMessage('Presionaste el boton 2!');
end;

end.
Como veras, aqui estan el boton 1 y el dos declarados y tienen un diferente evento OnClick.
Espero que te sirva.
Saludos
Si, Gracias CARAL por tu ayuda....pero ya lo resolvi, resulta q no sabia utilizar el SENDER del procedimiento....te comento q estoy creando botones en tiempo de ejecucion, por cada SERVICIO de lavanderia que registre el usuario es un boton, la solucion q me propones, y la cual se agradece, no me podria servir de mucho, ya que necesito dejar abierto la cantidad de botones, habra tantos de ellos como servicios haya creado el usuario.

En si lo servicios no pasaran de 10....pongo la forma en como lo solucione, para ti -si en algo te ayuda- y todos los q consultan este club.

GRACIAS !
Solucion:
Código Delphi [-]
procedure TfrmRegServicios.FormShow(Sender: TObject);
Var
PosY:Integer;
begin
   gBoxTipoServicio.Caption:='';
   qryServicios.Close;
   qryServicios.Open;
   PosY:=100;
   n:=1;
   While not qryServicios.Eof do
   begin
      Botones[n]:=TButton.Create(Self);
      with Botones[n] do
      begin
          Caption:=qryServicios.fieldbyname('DESCRIPCION').AsString;
          Parent:=self;
          Height:=71;
          Top:=PosY;
          PosY:=PosY+Height+10;
          Left:=16;
          Width:=97;
          OnClick:=OnButtonClick;
          Name:='btn'+IntToStr(n);
          Tag:=qryServicios.fieldbyname('CLAVE_SERVICIO').AsInteger;
      end;
      qryServicios.Next;
      inc(n);
   end;

end;

procedure TfrmRegServicios.OnButtonClick(Sender:TObject);
var
nServicio:Integer;
begin
    with Sender as tButton do begin
       nServicio:=(Sender as tButton).Tag;
       gBoxTipoServicio.Caption:=(Sender as tButton).Caption;
    end;    
    qryPrenda.Close;
    qryPrenda.ParamByName('SERVICIO').AsInteger:=nServicio;
    qryPrenda.Open;
    qryPrenda.FetchAll;
end;

procedure TfrmRegServicios.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
   Action:=caFree;
end;

Lo resaltado con rojo es lo q andaba buscando !....SALUDOS !
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 29-07-2007 a las 03:36:27.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 08:02:12.


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
Copyright 1996-2007 Club Delphi