2012-07-21 16 views
9

En otros lenguajes como C++, hay operadores para hacer un tipo de operación de igual a igual o igual a igual para agregar estilos/indicadores adicionales. ¿Hay un equivalente en Delphi?¿Cuál es el equivalente de Delphi a "+ =" para agregar elementos a un conjunto?

Ahora mismo tengo algo de código como:

label1.Font.Style := label1.Font.Style + [fsBold]; 
label2.Font.Style := label2.Font.Style + [fsBold]; 

pero me encantaría, si es posible, para conseguir que la simplificado un poco a algo más concisa, sin duplicar el nombre de etiqueta en ambos lados de la asignación operador, algo similar a: label1.Font.Style += [fsBold]; o label1.Font.Style := self + [fsBold];

¿Se puede hacer esto? ¿O no tanto?

+0

utilice la función 'inc' - http://docwiki.embarcadero.com/Libraries/en/System.Inc. De todos modos, no puedes usarlo en las propiedades. – RBA

+4

Para conjuntos, no sería Inc, sería el [Incluir procedimiento] (http://docwiki.embarcadero.com/Libraries/en/System.Include) con el mismo problema que requiere una variable. – hvd

+0

Para cadenas, use 'Concat (S1, S2, S3, S4 ...)' –

Respuesta

8

Este es uno de los pocos casos en los que puedo recomendar el with declaración:

with label1.Font do Style := Style + [fsBold]; 
with label2.Font do Style := Style + [fsBold]; 

Normalmente, el problema con with es que no está claro lo que es un acceso de miembros y lo que no lo es, pero si el El alcance es una declaración única en la que se utiliza una sola propiedad, es lo suficientemente claro.

11

Delphi tiene la función Inc, pero no funciona en propiedades:

Inc(a);  // Increment a with 1 
Inc(a, 5); // Increment a with 5 

Si necesita añadir estilo a un tipo de letra a menudo, puede escribir un procedimiento:

procedure AddStyle(const AFont: TFont; const AStyle: TFontStyles); 
begin 
    AFont.Style := AFont.Style + AStyle; 
end; 

(Con versiones posteriores de Delphi puedes usar ayudantes de clase).

+3

+1, y solo soluciono el método AddStyle :), también puede agregar un poco de uso como lo hace ' AddStyle (Label1.Font, [fsBold]); ' – RRUZ

+0

Gracias por la corrección ;-). –

0

Subclase TLabel tipo y crear un método como este:

procedure TMyLabel.AddStyle(const AStyle: TFontStyles); 
begin 
Self.Font.Style := Self.Font.Style + AStyle; 
end; 

entonces usted puede poner la clase en un paquete bpl e instalarlo en el editor. Después de eso, puede reemplazar todas sus etiquetas por sus etiquetas personalizadas. Para proyectos grandes, recomendaría Notepad ++ para reemplazar todas sus declaraciones en .pas y (texto!) .dfm archivos. Esto puede sonar complicado pero es menos de una hora de trabajo. ¡Buena suerte!

+0

no hagas esto, el complemento que introduces al código es mucho más que valioso el trabajo extra.hágalo en un patrón de visitante, (cree una función externa que acepte TLabel y TFontStyles y haga el trabajo en una función). – none

+0

Esta es probablemente una de las peores razones posibles para crear una subclase. Una sencilla función de utilidad hace el trabajo bastante bien, sin interferir con la jerarquía de su clase. –

13

Incluir es lo que estás buscando. Desafortunadamente se encuentra con el problema de que Label.Font.Style es una propiedad y debe ser asignada y no aprobada por var. Sin embargo, puede hacer esto:

var 
    fontStyle: TFontStyles; 
begin 
    fontStyle := Label1.Font.Style; 
    Include(fontStyle, fsBold); 
    Label1.Font.Style := fontStyle; 
Cuestiones relacionadas