gpt4 book ai didi

delphi - 如何防止在delphi 7中编辑tstringgrid中的非空单元格?

转载 作者:行者123 更新时间:2023-12-03 15:46:34 24 4
gpt4 key购买 nike

enter image description here我有问题需要你的帮助我要去开发数独游戏。在我的 Stringgrid 中,我在 [grid1.cells[8,8]:=inttostr(2); 之前用数字填充了一些单元格。 grid1.cells[2,5]:=inttostr(9);等]和数字的文本字体颜色为黑色。现在我希望玩家不能更改(编辑)以前的值,只能添加到空单元格(只能更改其自己的值)。插入单元格的值必须是不同的文本字体颜色(exp:clRed)在这两种情况下我需要帮助。提前致谢 。

最佳答案

没有公共(public)方法可以中断单元格编辑过程,但您可以创建 TStringGrid子类化并覆盖其 CanEditShow protected 方法。在此控制子类中,您可以例如创建一个事件来控制是否创建就地编辑器。

以下插入器类引入了 OnCanEdit 事件,该事件将在创建就地编辑器之前触发,并允许您通过其 CanEdit 决定是否要创建它参数:

type
TCanEditEvent = procedure(Sender: TObject; Col, Row: Longint;
var CanEdit: Boolean) of object;

TStringGrid = class(Grids.TStringGrid)
private
FOnCanEdit: TCanEditEvent;
protected
function CanEditShow: Boolean; override;
public
property OnCanEdit: TCanEditEvent read FOnCanEdit write FOnCanEdit;
end;

implementation

{ TStringGrid }

function TStringGrid.CanEditShow: Boolean;
begin
Result := inherited CanEditShow;

if Result and Assigned(FOnCanEdit) then
FOnCanEdit(Self, Col, Row, Result);
end;

此示例展示了如何仅允许编辑行索引和列索引大于 2 的单元格,这不是您的情况,但我确信您了解该怎么做:

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
private
procedure StringGridCanEdit(Sender: TObject; Col, Row: Longint;
var CanEdit: Boolean);
end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.OnCanEdit := StringGridCanEdit;
end;

procedure TForm1.StringGridCanEdit(Sender: TObject; Col, Row: Integer;
var CanEdit: Boolean);
begin
// to the CanEdit parameter assign True if you want to allow the cell
// to be edited, False if you don't
CanEdit := (Col > 2) and (Row > 2);
end;

关于delphi - 如何防止在delphi 7中编辑tstringgrid中的非空单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22084421/

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