delphi - Cambio del color de fondo de TTextCell en el tiempo de ejecución XE4
colors grid (1)
Gracias Mike. Tuve que jugar un poco, pero lo hice funcionar según su sugerencia. Agregué un TRectangle a mi textcellstyle en el estilocontainer, de la siguiente manera:
textcellstyle : TLayout
background: TSubImage
rectangle1: TRectangle
rectanimation: TRectAnimation
En TFinancialCell.ApplyStyle probé FindStyleResource (''background''), pero esto siempre devuelve nil. Lo cambié a FindStyleResource (''rectangle1'') y funcionó muy bien. ¿Esto se debe a que busca la propiedad StyleName relevante (que obviamente pasa a ''Rectangle1'' para el rectángulo 1) en el inspector de objetos? Todavía no veo la madera para los árboles, estoy seguro de que puedes decir ...
El código de trabajo:
Procedure TFinancialCell.ApplyStyle;
var
T : TFMXObject;
begin
inherited;
T:=FindStyleResource(''Rectangle1'');
If (T<>nil) and (T is TRectangle) then
begin
If TRectangle(T).Fill<>nil then
begin
If IsNegative then
begin
TRectangle(T).Fill.Color:=claRed;
Repaint;
end;
end;
end;
ApplyStyling;
end;
También intenté, como ejercicio separado, poner el código anterior en TFinancialCell.ApplyStyling, y también funcionó allí, por lo que no estoy seguro de cuál es la mejor opción, y ¿por qué?
El resumen de mi comprensión de estos estilos hasta ahora es (corrija / comente según sea necesario):
- He creado un estilo llamado textcellstyle, que aplico en TFinancialCell.Create en mi clase TFinancialCell [StyleLookup: = ''textcellstyle''].
- Cuando llamo a TFinancialCell.ApplyStyling, puedo acceder directamente a las propiedades Font y FontColor de TFinancialCell, ya que estas propiedades son propiedades de TTextCell.
- Si quiero pintar el fondo de las celdas, tengo que llamar explícitamente al componente TRectangle que agregué manualmente al ''estilo'' textcellstyle, y luego acceder a la propiedad Fill etc desde allí.
Trabajé a través del ejemplo publicado aquí como mi punto de partida: Cambiar el fondo de TTextCell en un Firemonkey TGrid
He creado un textcellstyle que hace referencia a una imagen, y esto está funcionando bien. Cuando ejecuto el programa, todas las celdas muestran la imagen de fondo como se esperaba.
Desde el enlace de arriba, Mike Sutton (espero que estés leyendo esto, ¿qué haríamos sin tu aporte?) Escribe (se repite aquí solo para hacerlo más fácil):
"Luego puede establecer cada una de las propiedades de StyleLookup de su celda para usarla, o establecer los estilos StyleName en TextCellStyle para que se recoja automáticamente para cada TTextCell".
A continuación de la consulta sobre cómo cambiar los colores de las fuentes ( Delphi XE4 Firemonkey Grid Control - Estilo de las celdas individualmente ), ¿se pueden establecer los colores de fondo de forma dinámica también?
Mi código para crear las celdas:
Constructor TFinancialCell.Create(AOwner:TComponent);
begin
inherited;
StyleLookup:=''textcellstyle'';
StyledSettings:=StyledSettings-[TStyledSetting.ssStyle,TStyledSetting.ssFontColor];
TextAlign:=TTextAlign.taTrailing;
end;
Esto aplica mi imagen con éxito a TFinancialCell.
Pero, según la consulta de color de la fuente, me gustaría que el fondo de la imagen se muestre solo cuando se alcanza un cierto valor o lo que sea:
Procedure TFinancialCell.ApplyStyling;
begin
Font.Style:=[TFontStyle.fsItalic];
If IsNegative then
FontColor:=claRed
else
FontColor:=claGreen;
If IsImportant then Font.Style:=[TFontStyle.fsItalic,TFontStyle.fsBold];
If Assigned(Font.OnChanged) then
Font.OnChanged(Font);
Repaint;
end;
Cualquier ayuda sobre cómo hacer esto sería apreciada.