Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Eventos en componentes creados en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=22529)

joumont 17-06-2005 21:07:01

Eventos en componentes creados en tiempo de ejecucion
 
¿Como puedo asignar eventos a un boton creado en tiempo de ejecución?
Para crearlo utilizo el siguiente codigo extraido de las paginas del foro. Con el creo tanto botones como se le indique en el Tedit. El problema es que no se cuando se pulsa uno de esos botones. ¿Como puedo capturar el evento en dicho boton?

Gracias por adelantado

CODIGO

procedure TForm1.Button1Click(Sender: TObject);
var
i, cont:Integer;
p:TButton;
begin

cont := StrToInt(Edit1.Text);

for i := 0 to (cont-1) do begin
p := TButton.Create(Self);
p.Left := (50 * i);
p.Top := 0;
p.Width:= 50;
p.Height := 20;
p.ParentWindow := Self.Panel1.Handle;
p.Name := 'Button' + IntToStr(i+4);

end;
end;

delphi.com.ar 17-06-2005 21:12:21

En delphi ese tema es mas que sencillo, los eventos son "punteros" a procedimientos de objectos. Simplemente tienes que tener definido un procedimiento del tipo que requiera el evento, y asignarlo como cualquier propiedad:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FButton: TButton;
  public
    procedure MiEvento(Sender: TObject); { Del tipo TNotifyEvent}
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FButton := TButton.Create(Self);
  FButton.Parent := Self;
  FButton.OnClick := MiEvento
end;

end.


http://www.clubdelphi.com/foros/showthread.php?t=979

jfgaliano 27-12-2005 10:03:29

Perfecto,gracias, esto ya me soluciona un problema. Lo que quiero hacer es que en ese procedimiento asociado se muentren un valor asociado al label pulsado. Me explico, cada label creado sale de un campo de una tabla en la base de datos con muchos otros datos,y lo que quiero es que al pulsar un label asociado a un campo de un registro determinado, se muestre en el procedimiento otro campo pero del mismo registro que el label pulsado.

Mi tabla tiene por ejemplo dos campos, uno nombre y otro descripcion. Muesto todos los nombre que hay en la tabla en una columna de forma dinámica. Y quiero que al pulsar en nombre en concreto se me muestre en un único memo la descripcion asociada a ese nombre. Por tanto en el procedimiento tengo que asociar este campo al valor del memo, pero no se como obtener el valor del campo descripcion .

Gracias.

Lepe 27-12-2005 14:48:23

Simplemente lanza una consulta:

Código Delphi [-]
query1.sql.clear;
query1.sql.add('select descripcion from tabla');
query1.sql.add('where nombre = '+Tlabel(Sender).caption);
quey1.Open;

Esto iría dentro del evento general de todos los labels, cuando se pulse uno determinado, se usa su caption para averiguar la descripción.

En lugar del Memo, puedes usar un DBMemo asociado a esa consulta.

saludos


La franja horaria es GMT +2. Ahora son las 13:25:56.

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