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 26-02-2010
Archer Archer is offline
Miembro
 
Registrado: sep 2005
Ubicación: Valencia
Posts: 28
Poder: 0
Archer Va por buen camino
¿¿TFont es una clase puntero??

Pues simplemente eso, ¿¿TFont es una clase puntero??, tengo un ejemplo que parece que lo confirma, pero me ralla la tira...

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    Fuente: TFont;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Fuente := Label1.Font;
  Fuente.Color := clWhite;
  Label2.Font := Fuente;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Fuente := TFont.Create;
  Label1.Font.Size := 20;
end;

end.

es muy sencillo dos labels y un boton, supuestamente despues de pulsar el boton teniamos que tener 2 etiquetas con tamaño de fuente 20 una blanca y otra negra, pero no es asi, tenemos 2 etiquetas de tamaño 20 de color blanco las dos!!!!

parece ser que cuando cambio la propiedad "color" de la variable fuente se cambia tambien en la label1, como si realmente no existiera la variable como un objeto sino simplemente como una referencia hacia label1.font

¿es normal esto? ¿os pasa a todos? ¿lo sabias? ¿como narices se puede saber, que no sea el metodo prueba y ensayo, si una clase es una "clase puntero" o tiene "datos propios"? y ya por ultimo, ¿como hariais para acabar con una etiqueta de cada color de una manera "elegante" y sin usar mas etiquetas no visibles y cosas de esas?

por supuesto la mayoria de las preguntas de arriba no esperan respuesta, es una manera de hablar, tranquis!!!

Saludos.

PD: Supongo que no tendra nada que ver pero uso Turbo Delphi Explorer en WinXP
Responder Con Cita
  #2  
Antiguo 26-02-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
En Delphi todos los objetos son apuntadores, aunque no se usa el operador ^ como en apuntadores normales.

// Saludos
Responder Con Cita
  #3  
Antiguo 26-02-2010
Archer Archer is offline
Miembro
 
Registrado: sep 2005
Ubicación: Valencia
Posts: 28
Poder: 0
Archer Va por buen camino
¿Y si quiero almacenar los parametros de una fuente fuera de un componente de la VLC?

Porque si declaro una variable del tipo TFont (para almacenar la fuente original) y luego cambio la fuente del componente se me cambiara tambien en la variable TFont... o vice versa...
Responder Con Cita
  #4  
Antiguo 26-02-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
Básicamente, tienes que crear un objeto de tipo Font (no basta declarar la variable, ties que crearla) y copiar las propiedades del objeto Font deseado, por ejemplo Edit1.Font.

Ahora bien, a partir de TComponent, Delphi implementa el método Assign, que algunas clases descendientes (pero no todas) usan para ese copiado de propiedades, de manera que se nos facilita el trabajo:

Código Delphi [-]
var
  Font: TFont;

begin
  Font := TFont.Create; // Hay que crear el objeto
  Font.Assign(Edit1.Font); // A partir de aquí, Font y Edit1.Font son indepedientes
  
  ...

  Font.Free; // Eventualmente hay que destruir lo que creamos
end;

Por otra parte, algo que te puede confundir al principio, es cuando haces una asignación del tipo:

Código Delphi [-]
Edit1.Font := Font;

En este caso, Edit1.Font y Font son ya independientes. La razón de esto es que en Delphi las propiedades de un objeto no necesariamente corresponden directamente a variables o campos dentro de la clase, sino que tras bambalinas, tal asignación se hace a través de un método SetFont de la clase TEdit, y este métod hace uso internamente de Assign:

Código Delphi [-]
procedure TEdit.SetFont(Value: TFont);
begin
  FFont.Assign(Font); // FFont es una variable privada de la clase
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 26-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por Archer Ver Mensaje
....
¿es normal esto? ¿os pasa a todos? ¿lo sabias? ¿como narices se puede saber, que no sea el metodo prueba y ensayo, si una clase es una "clase puntero" o tiene "datos propios"? y ya por ultimo, ¿como hariais para acabar con una etiqueta de cada color de una manera "elegante" y sin usar mas etiquetas no visibles y cosas de esas?
Aparte de lo comentado por roman creo que éste artículo de Ian Marteens te va sacar todas tus dudas..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #6  
Antiguo 26-02-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
Hombre, no seré yo Ian Marteens, pero realmente es lo mismo que ya le expliqué yo

// Saludos
Responder Con Cita
  #7  
Antiguo 26-02-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por roman Ver Mensaje
Hombre, no seré yo Ian Marteens, pero realmente es lo mismo que ya le expliqué yo

// Saludos
Disculpa roman pero es que a veces me gusta que la gente lea un poco más para una mejor comprensión.
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
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
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
puntero jdlara OOP 2 27-10-2008 19:41:38
¿puntero a puntero? Guillermo80 Varios 3 09-03-2008 22:46:32
puntero gaston260 API de Windows 11 01-02-2008 22:39:20
Puntero a Stream Enan0 Varios 3 22-03-2005 22:08:13


La franja horaria es GMT +2. Ahora son las 07:30:21.


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