PDA

Ver la Versión Completa : Eventos en componentes creados en tiempo de ejecucion


joumont
17-06-2005, 21:07:01
¿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:

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:


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