Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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 30-05-2015
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 Delphius.

Al tratar con apuntadores es totalmente correcta tu apreciación, como queda claro en este ejemplo:
Código Delphi [-]
var
  f1, f2: TFont;
begin
  f1 := TFont.Create;
  f2 := TFont.Create;

  f2 := f1;   // (*) f2.Assign(f1) 
  f1.Free;

  f2.Color := clRed;  // ¡ Error, f2 no es un apuntador válido !
Lo correcto sería usar el método Assign (*), que copia las propiedades a la otra instancia de TFont.

Pero para el código anterior:
Código Delphi [-]
   Label1.Font := FontBase;
   Edit1.Font := FontBase;
   Memo1.Font := FontBase;
  ...
Font , que estos componentes heredan de TControl, está definida como una propiedad:
Código Delphi [-]
  TControl = class(TComponent)
  ...
    property Font: TFont read FFont write SetFont stored IsFontStored;
  ...
  end;
...
procedure TControl.SetFont(Value: TFont);
begin
  FFont.Assign(Value);  
end;
por lo que en el caso anterior, no se trataría de una asignación de punteros.

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 30-05-2015 a las 13:46:45. Razón: sintáxis
Responder Con Cita
  #2  
Antiguo 30-05-2015
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Algo tan simple y, sin embargo, muy instructivo.
Responder Con Cita
  #3  
Antiguo 30-05-2015
sac sac is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 20
sac Va por buen camino
Problema Resuelto

Como dijera Casimiro muy instructivo todo. Con ustedes se aprende mucho.
Gracias.
Responder Con Cita
  #4  
Antiguo 31-05-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Hola Delphius.

Al tratar con apuntadores es totalmente correcta tu apreciación, como queda claro en este ejemplo:
Código Delphi [-]var f1, f2: TFont; begin f1 := TFont.Create; f2 := TFont.Create; f2 := f1; // (*) f2.Assign(f1) f1.Free; f2.Color := clRed; // ¡ Error, f2 no es un apuntador válido !

Lo correcto sería usar el método Assign (*), que copia las propiedades a la otra instancia de TFont.

Pero para el código anterior:
Código Delphi [-] Label1.Font := FontBase; Edit1.Font := FontBase; Memo1.Font := FontBase; ...

Font , que estos componentes heredan de TControl, está definida como una propiedad:
Código Delphi [-] TControl = class(TComponent) ... property Font: TFont read FFont write SetFont stored IsFontStored; ... end; ... procedure TControl.SetFont(Value: TFont); begin FFont.Assign(Value); end;

por lo que en el caso anterior, no se trataría de una asignación de punteros.

Saludos
Vaya. Eso si que es una sorpresa. No recordaba que una asignación del TFont entre componentes (al menos en los TControl y descendientes) se procediera con el Asign().
Recuerdo de La Cara Oculta la advertencia que se daba justamente sobre TFont y por ello se me quedó en la cabeza que debía hacerse por medio de Assing().

Hagan de cuenta entonces que no dije nada.

En Lazarus, las cosas son un poquito diferentes:

Código Delphi [-]
procedure TControl.SetFont(Value: TFont);
begin
  if FFont.IsEqual(Value) then exit;
  FFont.Assign(Value);
  Invalidate;
end;

Y de curioso me puse a ver como está implementado el Assign() y vaya código de extraño e intrincado, me imaginaba algo más directo de copiar:

Código Delphi [-]
procedure TFont.Assign(Source: TPersistent);
begin
  if Source is TFont then
  begin
    //TODO:lock;
    try
      //TODO: TFont(Source).Lock;
      try
        BeginUpdate;
        try
          CharSet := TFont(Source).CharSet;
          SetColor(TFont(Source).Color, TFPCanvasHelper(Source).FPColor);
          if TFont(Source).PixelsPerInch <> FPixelsPerInch then
            // use size to convert source height pixels to current resolution
            Size := TFont(Source).Size
          else
            // use height which users could have changed directly
            Height := TFont(Source).Height;
          Name := TFont(Source).Name;
          Orientation := TFont(Source).Orientation;
          Pitch := TFont(Source).Pitch;
          Style := TFont(Source).Style;
          Quality := TFont(Source).Quality;
        finally
          EndUpdate;
        end;
      finally
        //TODO: TFont(Source).UnLock;
      end;
    finally
      //TODO: UnLock;
    end;
    Exit;
  end;

  inherited Assign(Source);
end;

Saludos,
PD: Se que no se debe hacer pero... ¿alguien más se anima a hecharle un ojo a mi hilo abierto hace unos días?
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 31-05-2015
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Sí que es raro, además esos beginupdate y endupdate, como si fuese una transacción
Responder Con Cita
  #6  
Antiguo 31-05-2015
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Sí que es raro, además esos beginupdate y endupdate, como si fuese una transacción
Hasta donde se esos BeginUpdate y EndUpdate son para llevar una copia segura. Creo que tiene algo que ver con intentos de acceso mientras se invoca a Assign.

OJO: esto es código Lazarus. Desconozco si en Delphi es similar.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
agregar fonts Celta Varios 3 14-03-2011 23:34:19
Fonts en mi Aplicación Ledian_Fdez Varios 1 07-05-2010 01:16:24
como cambio propiedades de la impresora omy Impresión 3 12-01-2009 18:13:57
como crear fonts para windows? Citlalli Varios 1 24-11-2006 02:30:48
InstallShield + instalar fonts miguelb Varios 1 16-07-2003 06:32:21


La franja horaria es GMT +2. Ahora son las 23:29:13.


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