Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-03-2007
jlrbotella jlrbotella is offline
Miembro
 
Registrado: ene 2007
Posts: 185
Poder: 18
jlrbotella Va por buen camino
TFieldGetTextEvent

Hola:

Tengo un problema al llamar desde un evento a un procedimiento. He estado revisando el foro y hay un ejemplo de como formatear campos usando el evento TFieldGetTextEvent.

Mi procedimiento lo declaro como:

procedure FormatearFechaHoraEDI(Sender: TField; var Text: string; DisplayText: Boolean);

Pero cuando lo llamo desde una tabla, desde esta forma:

mitabla.ongettext := formatearFechaHora;

El compilador me devuleve el siguiente error:

[Pascal Error] pedidos_entrada.pas(183): E2010 Incompatible types: 'TFieldGetTextEvent' and 'Pointer'

¿Qué error cometo?.

Gracias,
JL
Responder Con Cita
  #2  
Antiguo 06-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Bueno pues asi a simple vista...

Tu dices que el procedimiento tiene como nombre FormatearFechaHoraEDI pero estas asignando otro llamado formatearFechaHora, ademas de que lo estas asignando a un procedimiento llamado ongettext y asumo de que la tabla se llama mitabla y en ese caso pues las tablas no tienen dicho evento desde la fabrica.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 06-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
además de lo dicho, tu procedimiento debe estar declarado así:

procedure TForm1.FormatearFechaHoraEDI(Sender: TField; var Text: string; DisplayText: Boolean);

TForm1, TFormXXX, lo que quieras, pero dentro de una clase.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 06-03-2007
jlrbotella jlrbotella is offline
Miembro
 
Registrado: ene 2007
Posts: 185
Poder: 18
jlrbotella Va por buen camino
De eventos a procedures

Hola:

He comprobado que me he equivocado en el nombre de función, pero ha sido un error. Aquí teneís un ejemplo más claro:


Código Delphi [-]
unit libedicom;
 
interface
 
uses db, sysutils, ifxsql, classes, ifxconnection, dialogs, ifxdataset;
 
procedure FormatearEstadoDI(Sender: TField; var Text: string; DisplayText: Boolean);






.....


Código Delphi [-]
unit pedidos_entrada;
 
interface
 
uses
db,dialogs, libedicom
 
type
  TfChildPedidoEntrada = class(TForm)
    private
       mitabla : TTable;
   end;
....
 
procedure TfChildPedidoEntrada.FormShow(Sender: TObject);
begin
    miTabla.fieldbyname('estado').OnGetText :=  libedicom.FormatearEstadoEdi;
end;






He comprobado que la función FormatearEstadoEdi, solo funciona cuando la declaro dentro de la clase TfchilpedidoEntrada. ¿Por que no la puedo poner en otro unit?.

Gracias.
JL

Lo Edite para arreglar las etiquetas delphi

Última edición por jhonny fecha: 06-03-2007 a las 17:26:51.
Responder Con Cita
  #5  
Antiguo 06-03-2007
jlrbotella jlrbotella is offline
Miembro
 
Registrado: ene 2007
Posts: 185
Poder: 18
jlrbotella Va por buen camino
Llamar a un procedimiento desde un evento

Hola:

Para llamar un evento que esta en otro unit, se debe crear una clase llamada "dumy class", consulta la página siguiente:

http://delphi.about.com/cs/adptips20...ltip1003_5.htm

Cuando el evento y el procedimiento están dentro de la misma clase es mucho más sencillo, ya que no hay que hacer nada.

Saludos,
JL
Responder Con Cita
  #6  
Antiguo 06-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
A ver, y digo yo. Ya tienes la tabla dentro de una ventana, useasé la clase TfChildPedidoEntrada, ¿por qué no creas el evento ahí mismo y después dentro, llamas a la rutina que más te guste?, reusas código, no creas un objeto que no necesitas, y reusas la rutina, vamos, algo tan simple como esto:

Código Delphi [-]
unit pedidos_entrada;
 
interface
 
uses
db,dialogs, libedicom
 
type
  TfChildPedidoEntrada = class(TForm)
    private
       mitabla : TTable;
       procedure MiEventoChulo(Sender: TField; var Text: string; DisplayText: Boolean);
   end;
....
 
procedure TfChildPedidoEntrada.MiEventoChulo(Sender: TField; var Text: string; DisplayText: Boolean);
begin
  libedicom.FormatearEstadoEdi(Sender, text,DisplayText);
end;

procedure TfChildPedidoEntrada.FormShow(Sender: TObject);
begin
    miTabla.fieldbyname('estado').OnGetText :=  MiEventoChulo;
end;

El por qué no te deja compilar es bien simple. un evento está declarado como:
Código Delphi [-]
procedure of object
Y un procedimiento fuera de una clase como:
Código Delphi [-]
procedure

La diferencia es que se usan técnicas distintas para identificar a cada uno de ellos, por tanto, da el error de tipos distintos.

Para quien quiera saberlo:
- Para identificar un procedure se usa un puntero de 4 bytes (32 bits)
- Para identificar un procedure of object se usa dos punteros de 4 bytes (64 bits).

Saludos

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 06-03-2007
jlrbotella jlrbotella is offline
Miembro
 
Registrado: ene 2007
Posts: 185
Poder: 18
jlrbotella Va por buen camino
Hola:

Pues tambien funciona.

Gracias.
JL
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


La franja horaria es GMT +2. Ahora son las 03:58:32.


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