Tôi đang tìm giải pháp được đề xuất để tạo kiểu ô TGrid đang được gọi bằng cuộc gọi OnGetValue (được gọi để vẽ các ô trong chế độ xem). Đối với nền, một phản ứng tuyệt vời của Mike, cho thấy làm thế nào để chỉ cần áp dụng một thuộc tính tAlign khi ô được tạo; nhưng thử thách tiếp theo của tôi là tô màu nội dung của ô.Điều khiển lưới Firemonkey - Tạo một ô dựa trên giá trị (thông qua cuộc gọi hàm OnGetValue)
Mục tiêu là để thay đổi các thuộc tính di động (Font, phong cách, màu sắc vv ...) giá trị tôi sắp trở lại như những tế bào "Giá trị". Trong ví dụ dưới đây; nó sẽ áp dụng một kiểu cho giá trị "OnGetValue" đang được trả về. Nó cũng có thể là chúng ta phải làm điều này thông qua một FM Stylesheet; hoặc chúng ta có thể trực tiếp đến các thuộc tính TText không? Lý tưởng nhất, cả hai kịch bản sẽ là tuyệt vời - nhưng ở giai đoạn này tôi sẽ đưa một trong hai giải pháp ... (; -..>
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.
Nhiều cảm ơn trước, Ian
Bạn có thể xác định dựa trên giá trị '? Bạn có nghĩa là, nói, nếu giá trị là tiêu cực thì phông chữ sẽ là màu đỏ vv? –
Xin chào Mike - Có; tại chỗ trên. Tôi có hai kịch bản nhưng cả hai đều là nguyên tắc tương tự. Một kịch bản là giá trị âm sẽ được hiển thị RED và kịch bản khác là "in đậm" một mục trong danh sách (mà tôi chọn - do tắt chi tiết tổ chức lưới; khách hàng quan trọng, v.v ...). Cảm ơn trước. Ian. – Ian