Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   puntero a un procedure en un procedure como parametro (https://www.clubdelphi.com/foros/showthread.php?t=64040)

fcios 13-03-2009 16:03:23

puntero a un procedure en un procedure como parametro
 
Hola tengo un procedimiento en una unit que no es desde donde llamaré al procedimiento

Código Delphi [-]
procedure miprocedure(Puntero: pointer);
begin
  // hago un monton de cosas
// y ahora si le mande algo a Puntero llamo al procedimiento o funcion que apunte pero como ?

if Puntero <> nil then puntero

end;
  
//--

y en la unit ppal tengo definido el procedimiento ppal y al que quiero mandar

procedure TEstadisticasF.Estadistica1BBClick(Sender: TObject);
begin
  miprocedure(@Fin); // no anda , como es la forma correcta de pasarlo ?
end;

procedure TEstadisticasF.Fin;
begin
  ShowMessage('ANDA !');
end;
Utilizo Delphi7
muchas gracias

coso 13-03-2009 20:18:06

Hola, puedes hacer algo asi

Código Delphi [-]
type
     TProcedure = procedure;

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

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure Call(P : TProcedure);
begin
     p;
end;

procedure Test;
begin
     ShowMessage('test');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     Call(Test);
end;

end.

predefiniendo el tipo. En la ayuda de delphi (procedure pointers) veras varios ejemplos. Un saludo.

fcios 14-03-2009 03:41:22

Muchas gracias Coso,

al final me quedo ok de la siguiente manera (y necesité más parametros)

Código PHP:

type
  TProcedure2
procedure(WSTExcelWorksheet; var nLinea1:integer; var nLineaDesdeDatos1,nUltimaCol1:byte);


procedure miprocedure(PunteroaUnProcedureTProcedure2);
var 
WSTExcelWorksheetnLinea:integer
   
nLineaDesdeDatos,nUltimaCol:byte
begin
  
// hago un monton de cosas
// y ahora si le mande algo a PunteroaUnProcedure llamo al procedimiento que apunte

  
if @PunteroaUnProcedure <>  nil then
    PunteroaUnProcedure
(ws,nLinea,nLineaDesdeDatos,nUltimaCol);
end;
  
//--
en la unit ppal tengo

miprocedure
(Fin); // el llamado ppal

// el procedure a ejecutar
procedure Fin(WSTExcelWorksheet; var nLinea:integer; var nLineaDesdeDatos,nUltimaCol:byte);
var 
n:Word;
begin
   ShowMessage
('ANDA !');
end



La franja horaria es GMT +2. Ahora son las 05:28: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