Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-11-2011
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Self y Font en creación de componentes

Hola a todos

Estoy viendo el código de un componente bajado de internet, para modificarlo a mis necesidades, y encuentro que las funciones/procedimientos las construye utilizando la palabra Self
Código Delphi [-]
  Self.Canvas.Font.Assign(value);
pero cuando cambio la fuente al componente no actúa.

Estoy siguiendo el libro Delphi 4 de Francisco Charte, y veo que para modificar la fuente asigna Font.OnCreate := AttributeChanged;

He buscado esa función en intenet, pero no la encuento (debe ser definida en el componente). Desgraciadamente no dispongo del CD con el código de los ejemplos. En el libro pone (pag. 782. Fundamentos de creación de componentes)
Código Delphi [-]
private
  FFont : TFont;
protected
// Cuando las propiedades Brush, Pen o Font se modifican
// automáticamente generan un evento OnChange, que dirigiremos
// a éste procedimiento
  procedure AttributeChanged( Sender: TObject);
¿Alguien puede darme un poco de luz sobre el asunto?

Gracias
salvica
Responder Con Cita
  #2  
Antiguo 06-11-2011
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 salvica.

Es claro que AttributeChanged no es nativo de Delphi y creo al igual que vos que es inherente al componente. Seguramente quién disponga del código que viene en el CD te podrá informar.

En relación a Self, hay que ver en que contexto está siendo usado, por que por ejemplo:
Código Delphi [-]
procedure TfrmUnForm.Button1Click(Sender: TObject);
begin
  ShowMessage(Self.ClassName); 
end;
Mostrará en pantalla TfrmUnForm ya que el parámetro implícito (Self), del método Button1Click es de tipo TfrmUnForm.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 06-11-2011
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola ecfisa, gracias, lo del AttributeChanged me lo estaba figurando. Tendré que revisar la pila de CD's que tengo (por si lo encontrase)

Lo del Self, lo está utilizando para todo
Código Delphi [-]
procedure TComponentePrueba.SetFont(Value: TFont);
begin
  try
    Self.Canvas.Font.Assign(Value);
  except
  end;
end;

procedure TComponentePrueba.SetInactive(Value: boolean);
begin
  Self.FShowInactive :=  Value;
  Invalidate;
end;

procedure TComponentePrueba.SetInvertir(Value: boolean);
begin
  Self.FInvertir := Value;
  Invalidate;
end;

Es que es la primera vez que lo veo y me parece extraño.

En fin, gracias de nuevo
Saludos
salvica
Responder Con Cita
  #4  
Antiguo 06-11-2011
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 de nuevo.

No lo has visto por que generalmente no se utiliza, ya que como te dije antes es implícito (aunque no es incorrecto usarlo).

Es decir que:
Código Delphi [-]
procedure TComponentePrueba.SetFont(Value: TFont);
begin
  try
    Self.Canvas.Font.Assign(Value);  // Self es TComponentePrueba
  except
  end;
end;

Es lo mismo que:
Código Delphi [-]
procedure TComponentePrueba.SetFont(Value: TFont);
begin
  try
    Canvas.Font.Assign(Value);  // Self (implícito) es TComponentePrueba
  except
  end;
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-11-2011 a las 01:21:30. Razón: corregir redacción
Responder Con Cita
  #5  
Antiguo 06-11-2011
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola de nuevo.

No lo has visto seguramente por que en la mayoría de los casos no se utiliza, ya que como te dije antes es implícito (aunque no es incorrecto usarlo).
Código Delphi [-]procedure TComponentePrueba.SetFont(Value: TFont); begin try Canvas.Font.Assign(Value); // Self (implícito) es TComponentePrueba except end; end;

Un saludo.
Gracias por la aclaración, de todas formas el componente debe dibujar en el Canvas, originalmente provenía de TCustomControl, lo ha intentado adaptar a un TGraphicControl, pero me dice que no encuentra la propiedad DoubleBuffered (que debe ser para evitar el parpadeo), con lo que lo he dejado como estaba
Código Delphi [-]
  //TComponentePrueba = class(TGraphicControl)
  TComponentePrueba = class(TCustomControl)

¿Que diferencia hay entre asignar la fuente al canvas o al componente?
Código Delphi [-]
procedure TComponentePrueba.SetFont(Value: TFont);
begin
  FFont := Value; // ---------> aquí asigna la fuente a la variable interna ( en el original esto no viene, pero FFont : TFont si)
  try
    Self.Canvas.Font.Assign(Value); // ---------> aquí asigna la fuente al canvas
  except
  end;
end;
Responder Con Cita
  #6  
Antiguo 06-11-2011
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.

Cita:
de todas formas el componente debe dibujar en el Canvas, originalmente provenía de TCustomControl, lo ha intentado adaptar a un TGraphicControl, pero me dice que no encuentra la propiedad DoubleBuffered
Es que la propiedad DoubleBuffered pertenece a la clase TWinControl, clase de la cuál deriva TCustomControl pero no TGraphicControl.

Cita:
¿Que diferencia hay entre asignar la fuente al canvas o al componente?
En realidad, los atributos de las fuentes se le asignan a la clase TFont en ambos casos.


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 06-11-2011
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Gracias por todo
Saludos
salvica
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
VerifyUnicode Font: No Font Found rchavezh Varios 0 23-02-2011 17:59:28
Creacion de componentes paur C++ Builder 5 25-06-2008 10:45:36
Font.Assign(Owner.Font); vs Font:=owner.Font; eliash OOP 10 10-01-2006 03:14:49
Creación de componentes CAOS OOP 28 16-09-2005 14:24:22
Creación de componentes soul6301 Varios 14 01-06-2004 18:36:11


La franja horaria es GMT +2. Ahora son las 21:11:49.


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