Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Asignar Evento (https://www.clubdelphi.com/foros/showthread.php?t=74411)

AndyLupa 17-06-2011 17:52:46

Asignar Evento
 
Buenas, estoy haciendo un form gral de consulta.
La idea es que funcione con cualquier tabla , a partir de la informacion pre cargada en una db.
Genere el form , la consulta, los botones, las busquedas pero me queda un tema.

Necesitaría asignar en tiempo de ejecucion un procedimiento a un objeto, mas precisamente a un boton.
El nombre del proc está en una campo str de una DB

Como puedo hacer?

maeyanes 17-06-2011 18:11:59

Hola...

Para asignar un evento en tiempo de ejecución se hace así:

Código Delphi [-]
TMyForm = class(TForm)
private
  procedure DoBtnClick(Sender: TObject);
public
  constructor Create(AOwner: TComponent); override;
end;

implementation

constructor TMyForm.Create(AOwner: TComponet);
begin
  inherited;
  Button1.OnClick := DoBtnClick
end;

procedure TMyForm.DoBtnClick(Sender: TObject);
begin
  // Hacer algo...
end;


Saludos...

roman 17-06-2011 18:45:27

El problema es que Andy toma la información del procedimiento a asignar de una cadena de caracteres. Tendría que usar RTTI:

Código Delphi [-]
uses TypInfo;

...

var
  Method: TMethod;

begin
  Method.Data := Self;
  Method.Code := Self.MethodAddress('MiClick');
  TypInfo.SetMethodProp(Button2, 'OnClick', Method);
end;

// Saludos

AndyLupa 17-06-2011 18:48:50

Ok
 
Probe lo que me pasate aunque no lo entendí del todo.
Pero no resultó.

Estuve viendo el tema, pero no encuantro como hacer para asignar el nombre del proc al boton, el nombre del proc lo tengo como str en una db,

Al ser un str no me da error, alguna otra ides?

Les paso parte de mi codigo a ver si se les ocurre algo

Código Delphi [-]
procedure TfrmConsulta.CreoBotones;
var
  NuevoBoton: TSCButton;
begin
  with zQryBusca do
  begin
    SQL.Clear;
    SQL.Add('SELECT *');
    SQL.Add('FROM BOTONES');
    SQL.Add('WHERE MODULO=' + IntToStr(Modulo));
    SQL.Add('ORDER BY ORDEN DESC');
    Open;
    First;
    while not Eof do
    begin
      NuevoBoton := TSCButton.Create(self);
      with NuevoBoton do
      begin
        Parent := PanelInf;
        Align := alLeft;
        with zQryFormat do
        begin
          SQL.Clear;
          SQL.Add('SELECT *');
          SQL.Add('FROM TIPOS');
          SQL.Add('WHERE TIPO=''BOTON''');
          Open;
          Font.Name := FieldByName('FONT').AsString;
          Font.Size := FieldByName('FONT_WIDTH').AsInteger;
          if FieldByName('BOLD').AsInteger = 1 then
            Font.Style := [fsBold];
          Close;
        end;
        Style := cmdBusca1.Style;
        Width := FieldByName('WIDTH').AsInteger;
        Color := StringToColor(FieldByName('COLOR').AsString);
        Name := FieldByName('NAME').AsString;
        Caption := FieldByName('CAPTION').AsString;

{Tambien en la DB tengo un campo con el nombre del proc que debe ejecutar el boton en el cliec
El tema es como asignar este valor
}
      end;
      Next;
    end;
  end;
end;


:)

roman 17-06-2011 18:54:53

Por favor, usa etiquetas [delphi] para publicar código:


[delphi]
Aquí tu código
[/delphi]


Por ahora te las he puesto yo.

// Saludos


La franja horaria es GMT +2. Ahora son las 03:25:42.

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