You've already forked lazarus-ccr
Sudoku: restrict user input in grid.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7228 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -27,6 +27,7 @@ object Form1: TForm1
|
|||||||
ScrollBars = ssNone
|
ScrollBars = ssNone
|
||||||
TabOrder = 2
|
TabOrder = 2
|
||||||
OnPrepareCanvas = SGridPrepareCanvas
|
OnPrepareCanvas = SGridPrepareCanvas
|
||||||
|
OnSelectEditor = SGridSelectEditor
|
||||||
OnSetEditText = SGridSetEditText
|
OnSetEditText = SGridSetEditText
|
||||||
end
|
end
|
||||||
object ButtonFill: TButton
|
object ButtonFill: TButton
|
||||||
|
@ -43,9 +43,12 @@ type
|
|||||||
SGrid: TStringGrid;
|
SGrid: TStringGrid;
|
||||||
procedure ButtonFillClick(Sender: TObject);
|
procedure ButtonFillClick(Sender: TObject);
|
||||||
procedure ButtonSolveClick(Sender: TObject);
|
procedure ButtonSolveClick(Sender: TObject);
|
||||||
|
procedure EditorKeyPress(Sender: TObject; var Key: char);
|
||||||
procedure FormActivate(Sender: TObject);
|
procedure FormActivate(Sender: TObject);
|
||||||
procedure SGridPrepareCanvas(sender: TObject; aCol, aRow: Integer;
|
procedure SGridPrepareCanvas(sender: TObject; aCol, aRow: Integer;
|
||||||
{%H-}aState: TGridDrawState);
|
{%H-}aState: TGridDrawState);
|
||||||
|
procedure SGridSelectEditor(Sender: TObject; {%H-}aCol, {%H-}aRow: Integer;
|
||||||
|
var Editor: TWinControl);
|
||||||
procedure SGridSetEditText(Sender: TObject; ACol, ARow: Integer;
|
procedure SGridSetEditText(Sender: TObject; ACol, ARow: Integer;
|
||||||
const Value: string);
|
const Value: string);
|
||||||
private
|
private
|
||||||
@ -84,6 +87,19 @@ begin
|
|||||||
ShowSolution;
|
ShowSolution;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.EditorKeyPress(Sender: TObject; var Key: char);
|
||||||
|
var
|
||||||
|
Ed: TStringCellEditor;
|
||||||
|
begin
|
||||||
|
if (Sender is TStringCellEditor) then
|
||||||
|
begin
|
||||||
|
Ed := TStringCellEditor(Sender);
|
||||||
|
Ed.SelectAll; //Key will now overwrite selection, in effect allowing to enter only 1 key
|
||||||
|
if not (Key in [#8, '1'..'9']) then Key := #0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TForm1.FormActivate(Sender: TObject);
|
procedure TForm1.FormActivate(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
Self.OnActivate := nil;
|
Self.OnActivate := nil;
|
||||||
@ -92,6 +108,7 @@ begin
|
|||||||
ClientWidth := 2 * SGrid.Left + SGrid.Width;
|
ClientWidth := 2 * SGrid.Left + SGrid.Width;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TForm1.SGridPrepareCanvas(sender: TObject; aCol, aRow: Integer;
|
procedure TForm1.SGridPrepareCanvas(sender: TObject; aCol, aRow: Integer;
|
||||||
aState: TGridDrawState);
|
aState: TGridDrawState);
|
||||||
var
|
var
|
||||||
@ -116,6 +133,18 @@ begin
|
|||||||
(Sender as TStringGrid).Canvas.Brush.Color := $00EEEEEE;
|
(Sender as TStringGrid).Canvas.Brush.Color := $00EEEEEE;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TForm1.SGridSelectEditor(Sender: TObject; aCol, aRow: Integer;
|
||||||
|
var Editor: TWinControl);
|
||||||
|
var
|
||||||
|
Ed: TStringCellEditor;
|
||||||
|
begin
|
||||||
|
if Editor is TStringCellEditor then
|
||||||
|
begin
|
||||||
|
Ed := TStringCellEditor(Editor);
|
||||||
|
Ed.OnKeyPress := @EditorKeyPress;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TForm1.SGridSetEditText(Sender: TObject; ACol, ARow: Integer;
|
procedure TForm1.SGridSetEditText(Sender: TObject; ACol, ARow: Integer;
|
||||||
const Value: string);
|
const Value: string);
|
||||||
begin
|
begin
|
||||||
@ -153,6 +182,7 @@ begin
|
|||||||
ShowMessage(Format('Unable to completely solve sudoku (tried %d steps).',[Steps]));
|
ShowMessage(Format('Unable to completely solve sudoku (tried %d steps).',[Steps]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TForm1.ShowSolution;
|
procedure TForm1.ShowSolution;
|
||||||
var
|
var
|
||||||
Col, Row: Integer;
|
Col, Row: Integer;
|
||||||
|
Reference in New Issue
Block a user