2011-10-14 11 views
6

Tengo una subclase de TPanel que amo tan mucho y muy a mi pesar, la fuente no parece tomar cuando se hace esto:¿Por qué tengo que asignar la fuente de la Lona para cambiar el tamaño de la fuente en Delphi 2009?

font.size := AFontsize; 
font.style := AFontStyle; 
font.color := AFontColor; 

pero sí cambia cuando hago esto:

Canvas.Font.Assign(Font); 

No tuve que hacer eso en Delphi 7, pero parece que tengo que hacerlo en 2009. ¿Cuál es el problema?

+0

Quizás 'ParentFont: = true' ?, primero configure ParentFont: = false, luego intente nuevamente. – Johan

+0

@Johan, al cambiar la fuente automáticamente establece parentfont en falso (pruébelo en el OI). –

Respuesta

8

Si pinta texto en el panel utilizando su lienzo, debe establecer la fuente de lienzo.

Algunos componentes y/o algunas versiones de Delphi pueden, ya sea intencionalmente o como efecto secundario de una tarea de pintura anterior, establecer Canvas.Font, pero no debe confiar en ello.

Por lo tanto, se recomienda hacer Canvas.Font := Font; antes de comenzar a pintar el texto.

Lo mismo se aplica a Canvas.Brush y Canvas.Pen.

type 
    TMyPanel = class(TCustomPanel) 
    protected 
    procedure Paint; override; 
    end; 

procedure TMyPanel.Paint; 
var 
    r: TRect; 
begin 
    r := ClientRect; 

    Canvas.Brush.Color := Color; 
    Canvas.FillRect(r); // fill the background 

    Canvas.Font := Font; 
    DrawText(Canvas.Handle, 'Sample Text', -1, r, DT_SINGLELINE or DT_CENTER or DT_VCENTER or DT_EXPANDTABS or DT_NOPREFIX); 
end; 
+0

¿'Canvas.Font: = Font;' es realmente una forma recomendada? ¿No debería ser 'Canvas.Font.Assign (Font)'? –

+0

Gracias, pensé que había intentado esto y establecer 'Canvas.Font.assign (Font)' causó un redibujo en lo que estaba dibujando (por lo tanto, un montón de parpadeo) Debo haberlo hecho al revés por accidente. –

+2

@AndriyM: VCL generalmente usa 'Canvas.Font: = Font'. Por lo tanto, es lo mismo que usar 'Assign', ya que el procedimiento establecido de la propiedad' Font' hace un 'Assign'. – JRL

Cuestiones relacionadas