Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Asignar evento Oncalcfield en tiempo de ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=24885)

el_barto 05-09-2005 18:35:27

Asignar evento Oncalcfield en tiempo de ejecucion
 
Buenos dias foro:

Tengo una duda puedo asignar el evento Onclalfield en tiempo de ejecucion, es decir como por ejemplo cuando yo oprima un button.

Se puede hacer esto?? ¿si se puede como debo hacerlo?, gracias por su ayuda :D

islu 05-09-2005 19:13:10

Si claro, te creas una función cuya forma sea igual a la que el evento requiera, y la asignas asi :

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Table1: TTable;
    Button1: TButton;
    procedure CalcField(DataSet: TDataSet);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CalcField(DataSet: TDataSet);
begin
    ShowMessage('ISLU');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    Table1.OnCalcFields := CalcField;
end;

end.

Para saber cual es la forma del procedimiento, es decir, que parametros toma, basta con que crees una por defecto con el diseñador de Delphi, y luego crees la tuya.

Puedes hacerlo con cualquier evento, bien sea de una tabla, de un botón ( OnCLick ), de cualquier elementio visual. Solo has de tener en cuenta los parámetros de entrada.

Una cosa, para saber si un evento ya esta asignado :

Código Delphi [-]
    if( not assigned( Table1.OnCalcFields ) ) then
       Table1.OnCalcFields := CalcField
    else
        ShowMessage( 'Ya asignado!!!');

Asi evitas macharacar algún evento, o si lo tienes que asignar o no.

vtdeleon 05-09-2005 23:33:52

Saludos

islu, Estas seguro que esto te funciona:-S. Hice un ejemplo casi identico y no marcha

jmariano 05-09-2005 23:41:59

La respuesta dada por islu funciona, pero el problema es que, como asignamos el evento "OnCalcFields" mas tarde, tenemos que hacer un refresco o un desplazamiento en el DataSet para que se actualice el valor del campo calculado. (Esto lo comento en base a una pequeña prueba que hice sobre el tema).

Así que la asignación del evento quedaría, por ejemplo, así

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
    Table1.OnCalcFields := CalcField;
    Table1.First; // Para que actualice el resultado, también podría ser 'Refresh'
end;

Saludos!

el_barto 05-09-2005 23:46:40

Gracias J es ciero vt hazle un refresh y veras que funciona perfectamente

vtdeleon 06-09-2005 00:08:46

Saludos

Ok,ok verdad, ya vi el error que tenia
Código Delphi [-]
Table1.OnCalcFields := CalcField(asignando dataset);//Como tenia un parametro, lo estaba asignando


La franja horaria es GMT +2. Ahora son las 22:34:45.

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