Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-09-2013
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Procedimiento Como Parametro

Hola a todos...

Quería saber si en Delphi se puede hacer algo así y como:

Código Delphi [-]
      FrmMensaje.BtnOk      := (Procedure (Sender:TObject)
                                begin
                                  FrmMain.RaEdit_ClienteNro.SetFocus;
                                End);

Donde BtnOk del Formulario FrmMensaje esta definido asi:

Código Delphi [-]
property BtnOk:TNotifyEvent read neBtnOk write neBtnOk default nil;


Al compilar el proyecto me dice:
Cita:
[DCC Error] E2009 Incompatible types: 'method pointer and regular procedure'

En resumen, necesito pasar un procedimiento como parámetro y me gustaría definirlo directamente en el parámetro...
Es posible?

Saludos...
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #2  
Antiguo 25-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Neeruu,

Cita:
Empezado por Neeruu
...necesito pasar un procedimiento como parámetro...
Revisa estos links:
Cita:
How to Use a Function or a Procedure as a Parameter in another Function : http://delphi.about.com/od/adptips20...ionasparam.htm

Procedure : http://www.delphibasics.co.uk/RTL.asp?Name=Procedure

Function : http://www.delphibasics.co.uk/RTL.asp?Name=Function
Espero sea útil

Nelson.
Responder Con Cita
  #3  
Antiguo 25-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

El error se produce por que estas asignando a la propiedad BtnOk un procedimiento normal y no un mètodo de clase.

En un TForm agrega un TButton y un TEdit y proba este ejemplo:
Código Delphi [-]
...
type
  TFrmMensaje = class(TForm)
    Button1: TButton;
    Edit1  : TEdit;
    procedure FormCreate(Sender: TObject);
  private
    FBtnOk : TNotifyEvent;
    procedure MiProc(Sender: TObject);
  public
    property BtnOk: TNotifyEvent read FBtnOk write FBtnOk;
  end;

var
  FrmMensaje: TFrmMensaje;

implementation  

procedure TFrmMensaje.MiProc(Sender: TObject);
begin
  ShowMessage(TControl(Sender).Name); 
end;

procedure TFrmMensaje.FormCreate(Sender: TObject);
begin
  BtnOk           := MiProc;
  Button1.OnClick := BtnOk;
  Edit1.OnClick   := BtnOk;
end;
...

Tal vez tambièn te puede interesar este enlace : Punteros de Metodos

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 25-09-2013
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
El error se produce por que estas asignando a la propiedad BtnOk un procedimiento normal y no un mètodo de clase.
Claro... cuando lo defino como lo definiste tu como un método de una clase anda de 10...
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #5  
Antiguo 25-09-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Creo que que lo que quieres usar se llama "métodos anónimos". Revisa este enlace.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 25-09-2013
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Código Delphi [-]
type
  TFrmMensaje = class(TForm)
    RxTheme1: TRxTheme;
    PnlBase: TPanel;
    ListBox1: TListBox;
    Panel1: TPanel;
    BtnOk: TButton;
    BtnCancel: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BtnOkClick(Sender: TObject);
    procedure BtnCancelClick(Sender: TObject);    
  private
    neBtnOk:TNotifyEvent;
    neBtnCancel:TNotifyEvent;
    { Private declarations }
  public
    procedure ShowMessage(sCaption:String; sMensaje:TStrings; CantBtn:Integer);

    property BtnOk:TNotifyEvent read neBtnOk write neBtnOk default nil;
    property BtnCancel:TNotifyEvent read neBtnCancel write neBtnCancel default nil;
    { Public declarations }
  end;

var
  FrmMensaje: TFrmMensaje;

implementation

{$R *.dfm}

procedure TFrmMensaje.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caHide;
end;

procedure TFrmMensaje.BtnCancelClick(Sender: TObject);
begin
  Close;
  if Assigned(BtnCancel) then
    BtnCancel(Self);
end;

procedure TFrmMensaje.BtnOkClick(Sender: TObject);
begin
  Close;
  if Assigned(BtnOk) then
    BtnOk(Self);
end;

procedure TFrmMensaje.ShowMessage(sCaption:String; sMensaje:TStrings; CantBtn:Integer);
begin
  Case CantBtn of
    1:begin
        BtnOk.Left := PnlBase.Width-BtnOk.Width - 6;
        BtnCancel.Visible := False;
        BtnCancel.Enabled := False;
      end;
    else
      begin
        BtnOk.Left := 6;
        BtnCancel.Visible := True;
        BtnCancel.Enabled := True;
      end;
  end;


  FrmMensaje.Caption := sCaption;
  ListBox1.Items.Clear;
  ListBox1.Items := sMensaje;

  FrmMensaje.ShowModal;
end;


Al Form lo llamo de esta manera...

Código Delphi [-]
FrmMensaje.BtnOk := MiProc o Nil dependiendo de que quiero que haga;
FrmMensaje.BtnCancel := MiProc o Nil dependiendo de que quiero que haga;
FrmMensaje.ShowMessage('',MyStringList, 2);

Como debería modificar las propiedades BtnOK y BtnCancel para poder hacer lo siguiente...
Código Delphi [-]
FrmMensaje.BtnOk := (procedure (Sender:TObject)
                               begin
                                     ShowMessage('Presiono el Btn OK');
                               end);
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
  #7  
Antiguo 25-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por dec Ver Mensaje
Hola,

Creo que que lo que quieres usar se llama "métodos anónimos". Revisa este enlace.
Muy interesante ese nuevo (para mi) tipo de puntero a método. Curioseando un poco, parece que se implementó a partir de la versiòn 2009.

Todavía no lo puedo usar, pero está muy bueno conocerlo

Un saludo
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 26-09-2013
Neeruu Neeruu is offline
Miembro
 
Registrado: oct 2007
Posts: 485
Poder: 17
Neeruu Va por buen camino
Acá anexo un par de links que me parecieron entretenidos leerlos para entender como trabaja....

Y si creo que es esto lo que andaba buscando... solo que ahora tengo que hacer un re analisis de lo que tengo programado...

Gracias Dec!!!


http://markdelphi.blogspot.mx/2008/0...en-delphi.html
http://www.compago.it/clng_es/294-i-...in-delphi.html
__________________
Saluda Atte Neeruu!!! :)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
se puede enviar un procedimiento como parametro a otro?? jasmad Lazarus, FreePascal, Kylix, etc. 13 28-03-2014 09:57:38
Mandar parametro a procedimiento exportado look OOP 1 22-08-2011 21:19:00
Parametro nulo en un procedimiento almacenado Viky SQL 3 29-03-2007 22:45:22
Pasar Matriz como parametro a un procedimiento Caro Varios 2 28-07-2006 17:20:12
Pasar parametro a un procedimiento? danytorres Varios 2 12-12-2003 09:55:09


La franja horaria es GMT +2. Ahora son las 20:10:17.


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
Copyright 1996-2007 Club Delphi