![](/img/trans.png)
[英]Delphi: How to make cells' texts in TStringGrid center aligned?
[英]How to prevent editing unempty cells in tstringgrid in delphi 7?
我有一個問題,需要你的幫助我將在數獨游戲上工作。 在我的Stringgrid中,我在[grid1.cells [8,8]:= inttostr(2);之前用數字填充了一些單元格。 grid1.cells [2,5]:= inttostr(9); 等等]和數字的文字字體顏色是黑色的。 現在我希望玩家不能更改(編輯)以前的值,只能添加到空單元格(只能更改自己的值)。 插入到單元格中的值必須是不同的文本字體顏色(exp:clRed)我在這兩種情況下需要幫助。 提前致謝 。
有中斷單元格編輯的過程中沒有公開的方式,但你可以做一個TStringGrid
子類,並覆蓋其CanEditShow
保護的方法。 在此控制子類中,您可以例如創建一個事件來控制是否創建就地編輯器。
以下內插器類介紹OnCanEdit
事件,該事件將在創建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;
雖然這個問題已經超過4年了,但我正在回答,因為最初的答案並非絕對正確。 其實還有一種方法,以防止編輯特定的細胞:
您可以設置TStringGrid OnSelectCell的CanSelect參數:
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Options := StringGrid1.Options+[goEditing];
StringGrid1.Cells[2,3] := '3';
StringGrid1.Objects[2,3] := Pointer(1);
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
if StringGrid1.Objects[ACol,ARow]<>nil then
CanSelect := false;
end;
阻止單元格的決定可以通過為相應的對象設置阻塞值來完成
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.