gpt4 book ai didi

delphi - TStringGrid 在列外标注

转载 作者:行者123 更新时间:2023-12-03 18:31:55 27 4
gpt4 key购买 nike

我写的一段代码有一些问题。我正在使用 TStringGrid 来绘制座位图。

它应该做的是用列向下的字母和行的数字标记 fixedcol 和 fixedrow。

我的问题是我不知道如何更改我的代码,以便它排除单元格 [0,0]。它也没有标记所有行。

procedure TfrmDraw.FormCreate(Sender: TObject);
var
i, j, k: Integer;
begin
sgFloor.RowCount := adotSeats['Rows'] + 1;
sgFloor.ColCount := adotSeats['Seats_per_Row'] + 1;

for i := 0 to SgFloor.RowCount do
begin
for j := 0 to SgFloor.ColCount do
begin
if i = 0 then
SgFloor.Cells[i,j] := Chr(65 + j)
else
if j = 0 then
begin
for k := 1 to sgFloor.ColCount do
SgFloor.Cells[i,0] := IntToStr(i) ;
end;
end;
end;
end;

截屏:

enter image description here

谢谢

最佳答案

一些好的建议:

我知道使用 RAD 风格的组件是多么容易,
但尽量不要绑定(bind) GUI 逻辑和应用程序逻辑。
这将使您的代码更简洁,更易于阅读和维护。
还要为变量使用有意义的名称,这样做可以防止愚蠢的错误。

现在关于你的问题,
Grid 使用从 0 开始的索引,因此最后一个索引作为计数减一。
在您的情况下,固定行和列都有索引 0,这意味着我们必须从下一个索引开始迭代,即 1,我使用了 FixedRowsFixedCols属性使其更具可读性。这有一个额外的好处,如果你有多个固定行/列,它将标记最内部的固定行/列。制作 2 个单独的循环更容易,一个用于标题行,一个用于列:

procedure SetupGrid(Grid : TStringGrid; Rows, Columns : Integer);

var
Row, Col: Integer;

begin
Grid.FixedCols := 1;
Grid.FixedRows := 1;
Grid.RowCount := Rows + Grid.FixedRows;
Grid.ColCount := Columns + Grid.FixedCols;

for Row := Grid.FixedRows to Grid.RowCount-1 do
Grid.Cells[0, Row] := Chr(Ord('A') + Row-1);

for Col := Grid.FixedCols to Grid.ColCount-1 do
Grid.Cells[Col, 0] := IntToStr(Col);
end;

procedure TfrmDraw.FormCreate(Sender: TObject);
begin
// try to make your GUI events as lightweight as possible and seal
// your code into separate functions/classes, this will improve readability
// of the GUI units and it will make your code testable
SetupGrid(sgFloor, adotSeats['Rows'], adotSeats['Seats_per_Row']);
end;

关于delphi - TStringGrid 在列外标注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699080/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com