Firemonkey Grid Control - Styling eine Zelle basierend auf einem Wert (über die OnGetValue function call)
Ich bin auf der Suche für empfohlenen Lösung, um Stil ein TGrid-Zelle, die gezeichnet wird durch die OnGetValue nennen (das heißt, zu malen die Zellen in der Ansicht). Für den hintergrund, eine exzellente Antwort von Mike, der zeigte, wie einfach tAlign Eigenschaft, wenn die Zelle angelegt wird; aber meine nächste Herausforderung ist die Färbung der Inhalt der Zelle.
Ziel ist die Veränderung der Zelle Attribute (Schriftart, Stil, Farbe, etc...) von dem Wert bin ich etwa wieder, wie die Zelle "Wert". In dem unten aufgeführten Beispiel; es wäre die Anwendung eines Stils auf den OnGetValue "Wert" zurückgegeben wird. Es kann gut sein, dass wir zu tun haben, das über eine FM-Stylesheet, oder können wir direkt zur TText Attribute? Im Idealfall, beide Szenarien wären toll - aber in diesem Stadium nehme ich entweder Lösung... (;->
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.Grid,
FMX.Layouts, FMX.Edit;
type
TForm1 = class(TForm)
Grid1: TGrid;
Button1: TButton;
StyleBook1: TStyleBook;
procedure Grid1GetValue(Sender: TObject; const Col, Row: Integer;
var Value: Variant);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TStringColNum = class(TStringColumn)
private
function CreateCellControl: TStyledControl; override;
published
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
function TStringColNum.CreateCellControl: TStyledControl;
begin
Result:=TTextCell.Create(Self);
TTextCell(Result).TextAlign := TTextAlign.taTrailing;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Grid1.AddObject(TStringColumn.Create(Self));
Grid1.AddObject(TStringColNum.Create(Self)); // Right Aligned column?
Grid1.RowCount:=5000;
Grid1.ShowScrollBars:=True;
end;
procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
var Value: Variant);
begin
if Col=0 then
Value:='Row '+IntToStr(Row);
if Col=1 then
Value := 'Row '+IntToStr(Row);
// Apply style based on value ?
end;
end.
Vielen Dank im Voraus,
Ian.
- Können Sie definieren ', basierend auf einem Wert'? Meinst du, sagen Sie, wenn der Wert negativ ist dann ist die Schrift rot sein usw?
- Hallo Mike - ja, spot-on. Ich habe zwei Szenarien, aber beide sind nach dem gleichen Prinzip. Ein Szenario ist der negative Wert wird ROT dargestellt, und das andere Szenario ist zu "Fett" ein Element in der Liste (die ich wählen werden - durch off-grid-statt details; wichtige Kunden etc...). Vielen Dank im Voraus. Ian.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens eine Entschuldigung. In meiner Antwort auf Ihre Letzte Frage, CreateCellControl sollte genannt haben geerbt zu erstellen, die die Zelle. Ich habe ergänzten meine Antwort.
Als für diese Frage, die ich hochgeladen habe, meine blog-posting auf FireMonkey-Zellen - http://monkeystyler.com/blog/entry/firemonkey-grid-basics-custom-cells-and-columns - es deckt den Stoff von der vorherigen Antwort und umfasst auch das erstellen von benutzerdefinierten Zelle steuert. Sie müssen Lesen, bevor Ihr gehen. Ich werde warten.
...
Nun zurück? Gut.
Folgenden auf das Beispiel in dem blog-post.
Außer, dass ich schon aktualisiert, die TFinancialCell Erben direkt von TTextCell (das ist natürlich ein TEdit), das macht weit mehr Sinn und ist wesentlich einfacher zu stylen ist.
So, update der TFinancialCell:
Code für die oben:
Und schließlich, aktualisieren Sie die GetValue-event-handler:
Code oben ist in Ordnung für Versionen vor XE4, aber für XE4 und XE5 funktioniert nicht. Farbe und Stil der text wird nicht geändert.
Dies ist ein fester code für XE4 und XE5: