Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 19
Lord Delfos Va por buen camino
Hola mlara.

Te olvidaste de poner cuál es el error que recibís del compilador, pero me jugaría la cabeza a que el problema es de tipos incorrectos.

Esto se debe a que el compilador interpreta que vos querés llamar a la función y asignarle el resultado a tu evento. Solución:

Código Delphi [-]
MiFuncion:= @MiFuncion1;

El arroba le dice a Delphi explicitamente que vos querés asignar la dirección de memoria de tu función, y no el resultado de llamarla

Espero te sirva. Saludongos.
Responder Con Cita
  #2  
Antiguo 23-08-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, creo que el error lo tienes por definicion de tipos. Antes que nada, lo que estas comentando con los eventos es posible porque son procedures, no estoy seguro si lo que te pondre va tambien con funciones, si eso lo pruebas

Código Delphi [-]

type TMiTipoDeFuncion = function (Sender : TObject) : boolean of object

...

function TForm1.F1(Sender : TObject): boolean;
begin
...
end;

function TForm1.F2(Sender : TObject) : boolean;
begin
...
end;

var
  MiFuncion : TMiTipoDeFuncion;
begin
case Switch of 
1 : MiFuncion := F1;
2 : MiFuncion := F2;
...
end;

if MiFuncion(Argumento) = true then ...

Algo asi. No se si funcionaria porque creo que los punteros a funciones, no a procedures, se aplican tal como te dice Lord Delfos. De todas maneras, este codigo siguiente si que te funcionaria :

Código Delphi [-]

type TMiProcedureBoolean : procedure (Sender : TObject; var b : boolean) of object;

...

procedure TForm1.P1(sender : TObject;var b : boolean);
begin
...
   b := resultado
end;

...

var
   MiProcedure : TMiProcedureBoolean;
   Resultado : boolean;
begin

case Switch of 
1 : MiProcedure := P1;
2 : MiProcedure := P2;
...
end;

MiProcedure(self,Resultado);

if Resultado then ...

Espero te sirva de ayuda. Un saludo.
Responder Con Cita
  #3  
Antiguo 23-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 mlara.

Me llama la atención que no funcione... debería. Por lo que hice una prueba simple y me funciona bién.

Aunque no lo aclaras, creo que no te dá un error sino que simplemente no se ejecuta el código...
Me parece que el problema lo tenés en la evaluación del Tag.

Probá esto:
.Un PopupMenu asignado a la propiedad PopupMenu del Form.
.En el PopupMenu,tres Menuitems 'nil', 'OnChange1', 'Onchange2' y en sus eventos OnClick asignado: itOnChangeClick
.Por último un Edit.
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit: TEdit;
    PopupMenu1: TPopupMenu;
    itNil: TMenuItem;
    itOnChange1: TMenuItem;
    itOnChange2: TMenuItem;
    procedure itOnChangeClick(Sender: TObject);
  private
    procedure EditChange1(Sender: TObject);
    procedure EditChange2(Sender: TObject);
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.EditChange1(Sender: TObject);
begin
  ShowMessage('OnChange 1')
end;

procedure TForm1.EditChange2(Sender: TObject);
begin
  ShowMessage('OnChange 2');
end;

procedure TForm1.itOnChangeClick(Sender: TObject);
begin
  case TMenuItem(Sender).Tag of
    1: Edit.OnChange:= nil;
    2: Edit.OnChange:= EditChange1;
    3: Edit.OnChange:= EditChange2;
  end;
end;

end.

Tecleá en el edit seleccionando las opciones del PopupMenu...


Saludos.

Última edición por ecfisa fecha: 23-08-2010 a las 21:41:46.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
No es un delirio, fue real o "virtual": Funeral virtual que se transforma en masacre! delphi.com.ar La Taberna 42 21-06-2007 18:00:59
MDI Virtual isg OOP 1 16-10-2006 11:18:37
Virtual Replay - Repetición Virtual de los Goles del Mundial delphi.com.ar La Taberna 0 26-06-2006 17:15:07
Virtual PC fjcg02 Linux 2 15-12-2004 18:11:18
Red virtual Pablo Carlos Varios 4 07-08-2004 02:24:31


La franja horaria es GMT +2. Ahora son las 23:28:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi