Tôi đang sử dụng điều khiển Lưới điều khiển FireMonkey nhưng có vấn đề đang xảy ra khi cố gắng căn chỉnh cột thẳng hàng. Từ các bài đăng của người dùng khác, tôi đã quản lý để tạo một loại TColumn mới, áp dụng một kiểu cho văn bản này (văn bản là HorzAlign = taTrailing) và theo lý thuyết - nghĩ rằng đây sẽ là giải pháp. Các giá trị được cung cấp bởi hàm OnGetValue để điều khiển lưới. Tuy nhiên, vấn đề là mặc dù lúc đầu nó có vẻ OK, nếu bạn di chuyển thanh/con lăn chuột vv cột cột TColumn mới không xuất hiện để làm mới một cách chính xác bằng cách sử dụng phương pháp/mã dưới đây. Nó có thể là một lỗi/tính năng của Grid (hoặc cách tôi đang làm nó). Tôi đã thử .ReAlign vv ...; nhưng không có kết quả. Cách duy nhất để có được lưới trở lại trong dòng là làm một cột thay đổi kích cỡ ví dụ - mà sau đó vẽ lại chính xác?Điều khiển lưới Firemonkey - Căn chỉnh một cột sang bên phải
Đoạn mã dưới đây cho thấy rằng đó là một TGrid đơn giản, với 2 cols, 1 StringColumn chuẩn và 1 StringColNum mới của tôi (áp dụng căn chỉnh wuth đúng). - Bất kỳ trợ giúp nào được đánh giá cao vì điều này là yêu cầu cơ bản của bất kỳ công việc lưới điện nào.
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;
public
constructor Create(AOwner: TComponent); override;
published
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
constructor TStringColNum.Create(AOwner: TComponent);
begin
inherited;
end;
function TStringColNum.CreateCellControl: TStyledControl;
var
t:TEdit;
begin
Result:=TStringColNum.Create(Self);
Result.StyleLookup := 'textrightalign';
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);
var
cell: TStyledControl;
t: TText;
begin
if Col=0 then
Value:='Row '+IntToStr(Row);;
if Col=1 then
begin
cell := Grid1.Columns[Col].CellControlByRow(Row);
if Assigned(cell) then
begin
t := (Cell.FindStyleResource('text') as TText);
if Assigned(t) then
t.Text:='Row '+IntToStr(Row);
end;
end;
end;
end.
Trân trọng. Ian.
Cảm ơn Mike - Các "câu trả lời hoàn hảo" tôi đang tìm kiếm; một siêu sao thực sự ..! – Ian