VCLButtons(Delphi)
From RAD Studio XE2 Code Examples
Language:
Description
This example demonstrates how to use a TButtonGroup. This example requires the following components:
- A TButtonGroup object with 3 TGrpButtonItems objects
- A TButton object
The form should look like in the following image.
After running the project and pressing the button, the form should look like in the following image.
The user can press different buttons from the button group, setting their caption to X. The computer automatically places a 0 caption on an empty button, chosen randomly.
If a column, line, or diagonal is marked the same, a ShowMessage box appears, announcing the winner.
Code
//Delphi //procedures and variables declaration procedure Validate(); procedure StartGame(); procedure FillMatrix(Pos: Integer; I: Integer); procedure Comp(); var Form1: TForm1; Random_var: Byte; //generate a random number from 0 through 9 GameMatrix: array[1..3,1..3] of Integer; //set to be -10 for an empty position, 0 for the 0-player, 1 for the X-player Score: Integer; //used for verifying whether the game is over (equals 3 if the X-player wins, 0 if the 0-player wins) implementation procedure TForm1.FormCreate(Sender: TObject); begin // initialize the properties of the button group and other visual objects Form1.Caption := 'Tic Tac Toe'; ButtonGroup1.ButtonHeight := 50; ButtonGroup1.ButtonWidth := 50; ButtonGroup1.Height := 170; ButtonGroup1.Width := 170; ButtonGroup1.Visible := False; ButtonGroup1.BorderStyle := bsNone; ButtonGroup1.Font.Size := ButtonGroup1.ButtonHeight - 10; Button1.Align := alBottom; Button1.Caption := 'START GAME'; end; //procedures implementation procedure FillMatrix(Pos: Integer;I: Integer); begin //set a specific item of the matrix to be the value given through the parameter case Pos of 0: GameMatrix[1,1] := I; 1: GameMatrix[1,2] := I; 2: GameMatrix[1,3] := I; 3: GameMatrix[2,1] := I; 4: GameMatrix[2,2] := I; 5: GameMatrix[2,3] := I; 6: GameMatrix[3,1] := I; 7: GameMatrix[3,2] := I; 8: GameMatrix[3,3] := I; end; end; procedure StartGame(); var I, J: Integer; begin //show the button group and all the buttons' captions to an empty string Form1.ButtonGroup1.Visible := True; for I := 0 to 8 do Form1.ButtonGroup1.Items.Items[I].Caption := ''; //fill the game matrix with negative values, to help calculating the score for I := 1 to 3 do for J := 1 to 3 do GameMatrix[I,J] := -10; end; procedure Validate; var I, J: Integer; begin // verify the lines for i := 1 to 3 do begin Score := 0; for j := 1 to 3 do Score := Score + GameMatrix[i,j]; if (Score = 3) or (Score = 0) then Exit; end; // verify the main diagonal Score := 0; for i := 1 to 3 do Score := Score + GameMatrix[i,i]; if (Score = 3) or (Score = 0) then Exit; // verify the secondary diagonal Score := 0; for i := 1 to 3 do Score := Score + GameMatrix[i,4-i]; if (Score = 3) or (Score = 0) then Exit; // verify the columns for i := 1 to 3 do begin Score := 0; for j := 1 to 3 do Score := Score + GameMatrix[j,i]; if (Score = 3) or (Score = 0) then Exit; end; end; procedure Comp(); var I: Integer; begin //when the user presses a button and sets its caption to 'X', randomly find an //unused button and set its caption to '0' for I := 1 to 9 do begin Random_var := Random(9); if (Form1.ButtonGroup1.Items.Items[Random_var].Caption = '') then begin Form1.ButtonGroup1.Items.Items[Random_var].Caption := '0'; FillMatrix(Random_var,0); Break; end; end; end; //OnClick event handler for TButton procedure TForm1.Button1Click(Sender: TObject); var I, J: Integer; begin ButtonGroup1.Align := alTop; ButtonGroup1.ButtonWidth := ButtonGroup1.Width div 3; ButtonGroup1.Height := ButtonGroup1.Width; ButtonGroup1.ButtonHeight := ButtonGroup1.Height div 3; ButtonGroup1.Enabled := True; StartGame(); end; //OnClick event handler for a button group item (TGrpButtonItems) procedure TForm1.ButtonGroup1Items0Click(Sender: TObject); begin //when the user presses a button, set its caption to 'X', complete the GameMatrix, //verify whether X wins, set another button's caption to '0', verify whether 0 wins if (ButtonGroup1.Items.Items[0].Caption = '') then begin ButtonGroup1.Items.Items[0].Caption := 'X'; GameMatrix[1,1] := 1; Validate(); if Score = 3 then begin ShowMessage('X WINS!'); ButtonGroup1.Enabled := False; end else begin Comp(); Validate(); if Score = 0 then begin ShowMessage('0 WINS!'); ButtonGroup1.Enabled := False; end; end; end; end; //[...] //rewrite the previous procedure for all the other 8 button group items end.
Uses
- Vcl.StdCtrls.TButton ( fr | de | ja )
- Vcl.StdCtrls.TButton.OnClick ( fr | de | ja )
- Vcl.StdCtrls.TButton.Caption ( fr | de | ja )
- Vcl.StdCtrls.TButton.Align ( fr | de | ja )
- Vcl.ButtonGroup.TButtonGroup ( fr | de | ja )
- Vcl.ButtonGroup.TButtonGroup.Items ( fr | de | ja )
- Vcl.ButtonGroup.TButtonGroup.Align ( fr | de | ja )
- Vcl.ButtonGroup.TButtonGroup.Enabled ( fr | de | ja )
- Vcl.ButtonGroup.TButtonGroup.Visible ( fr | de | ja )
- Vcl.ButtonGroup.TGrpButtonItems ( fr | de | ja )
- Vcl.ButtonGroup.TGrpButtonItems.Items ( fr | de | ja )
- Vcl.ButtonGroup.TGrpButtonItem ( fr | de | ja )
- Vcl.CategoryButtons.TBaseButtonItem.Caption ( fr | de | ja )
- Vcl.CategoryButtons.TBaseButtonItem.OnClick ( fr | de | ja )