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 20-03-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Question Redefinir eventos de controles "delegados"

Hola a todos, quiero hacer lo siguiente (a ver si consigo explicarme):

Tengo una clase que hace un trabajo X.
Ahora quiero hacer una clase que utiliza esta primera y que sirva de interfaz entre la primera clase y los propios componentes del form.

Para ello quiero utilizar los eventos onKeyUp de los TEdit. Y con cada cambio de cada uno de ellos, afectar a la propiedad Text de los demas.

Algo así (aunque quizá lo que persigo no sea muy importante finalmente):


Código Delphi [-]
TClase1 = class
 ....
end;

Y la segunda:

Código Delphi [-]
TClase2 = Class(Clase1)
strict private
  FEdit1: TEdit;
  FEdit2: TEdit;
  FEdit3: TEdit;
privateprocedure MiFOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
 procedure SetEdit1(const Value: TEdit);
public
  property Edit1: TEdit read FEdit1 write SetEdit1;
  property Edit2: TEdit read FEdit2 write SetEdit2;
  property Edit3: TEdit read FEdit3 write SetEdit3;
end;

procedure TClase2.SetEdit1(const Value:TEdit);
begin
  FEdit1 := Value;
  FEdit1.OnKeyUp := FMiOnKeyUp(Self, Key, Shift);
end;

procedure TClase2.MiFOnKeyUp(Sender: TObject; var Key: Word; Shift:  TShiftState);
begin
  //.... hago lo que sea aquí.....
  if Assigned(FOnKeyUp) then FOnKeyUp;  <<<< aquí el error...
end;

El tema es, como hago para crear mi propio OnKeyUp para cada Edit1, 2 y 3, y que siga ejecutandose el onKeyUp del propio componente dentro del formulario (después/antes de mi propio OnKeyUp).

He cambiado la linea marcada como erronea, de todas las formas (razonables) que se me ocurren...

No se si me explico. Si hay alguna duda, trato de aclararla.

Gracias.
Responder Con Cita
  #2  
Antiguo 20-03-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que sería más sencillo si trabajaras con clases derivadas de TEdit. En estas clases redefines su evento DoKeyUp o KeyUp (no recuerdo bien) y haces lo que quieras hacer antes o después de llamar a inherited. De esta manera no te tienes que meter con la llamada a los eventos pues eso ya lo hace la clase original.

Dicho de otra manera: cuando extiendes el comportamiento de una clase, es más adecuado hacerlo mediante la redefinición de métodos virtuales que mediante la reasignación de eventos.

// Saludos
Responder Con Cita
  #3  
Antiguo 20-03-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
El problema de redefinir la clase TEdit es que, entiendo (en mi más completa ignorancia) que debo crear un NUEVO componente visual y poner ese componente en el form.

Digo esto porque he intentado hacerlo (sin crear ese otro componente visual), pero al asignar el TEdit del form al TMiEdit de la clase "intermedia", me dá este error:

Código Delphi [-]
Conversor1 := TClass2.Create;
//Conversor1.Edit1 es del Tipo TMiEdit (que desciende de TEdit).
Conversor1.Edit1 := Form1.Edit1;

Incompatible types: TMiEdit and TEdit
Entiendo que es por que TMiEdit desciende de TEdit y ........

Vamos... que me he atorado aquí....

Gracias.

Última edición por yapt fecha: 20-03-2010 a las 19:48:07.
Responder Con Cita
  #4  
Antiguo 22-03-2010
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 yapt.

Quizá hayas leído este artículo, pero si no, pegale una leida por ahí te tira una nueva idea.

http://www.marteens.com/trick46.htm

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 22-03-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Fantastico ecfisa... funciona perfecto.

Habia leido sobre las clases interpuestas... pero no las había relacionado con este tema. Se me habían escapado por completo. Esta cabeza mía ya no es la que era...

Muchas gracias.
Responder Con Cita
  #6  
Antiguo 26-03-2010
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
De nada yapt, me alegro haberte sido de ayuda.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Ventana MDI, "Siempre visible" y "Pantalla completa" ixMike API de Windows 7 11-04-2007 18:36:55
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32


La franja horaria es GMT +2. Ahora son las 23:47:40.


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