⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 用于开发税务票据管理的软件
💻 PAS
📖 第 1 页 / 共 4 页
字号:

    if Chessboard1.Undo then
    begin
      if Chessboard1.Turn = 1 then
        lblTurn.Caption := 'WHITE to move'
      else
        lblTurn.Caption := 'BLACK to move';

      lblCheck.Visible := Chessboard1.Check;
    end;

    UpdateUndoRedo;
  end;
end;

procedure TfrmMain.mnuRedo1Click(Sender: TObject);
begin
  if Chessboard1.RedoPossible then
  begin
    Chessboard1.Redo;

    UpdateUndoRedo;
  end;
end;

procedure TfrmMain.mnuUseRed1Click(Sender: TObject);
begin
  bgndFancy.ChangeRColour := not bgndFancy.ChangeRColour;
  mnuUseRed1.Checked := bgndFancy.ChangeRColour;
  mnuUseRed2.Checked := mnuUseRed1.Checked;
end;

procedure TfrmMain.mnuUseGreen1Click(Sender: TObject);
begin
  bgndFancy.ChangeGColour := not bgndFancy.ChangeGColour;
  mnuUseGreen1.Checked := bgndFancy.ChangeGColour;
  mnuUseGreen2.Checked := mnuUseGreen1.Checked;
end;

procedure TfrmMain.mnuUseBlue1Click(Sender: TObject);
begin
  bgndFancy.ChangeBColour := not bgndFancy.ChangeBColour;
  mnuUseBlue1.Checked := bgndFancy.ChangeBColour;
  mnuUseBlue2.Checked := mnuUseBlue1.Checked;
end;

procedure TfrmMain.mnuShowTextCaptions1Click(Sender: TObject);
begin
  mnuShowTextCaptions1.Checked := not mnuShowTextCaptions1.Checked;
  tlbMain.ShowCaptions := mnuShowTextCaptions1.Checked;
end;

procedure TfrmMain.mnuShowHints1Click(Sender: TObject);
begin
  mnuShowHints1.Checked := not mnuShowHints1.Checked;
  tlbMain.ShowHint := mnuShowHints1.Checked;
end;

procedure TfrmMain.mnuLeftRight1Click(Sender: TObject);
begin
  // TODO  make the following more succinct
  case TMenuItem(Sender).Tag of
   0: begin
        mnuLeftRight1.Checked := True;
        mnuLeftRight2.Checked := True;
      end;
   1: begin
        mnuRightLeft1.Checked := True;
        mnuRightLeft2.Checked := True;
      end;
   2: begin
        mnuUpDown1.Checked := True;
        mnuUpDown1.Checked := True;
      end;
   3: begin
        mnuDownUp1.Checked := True;
        mnuDownUp2.Checked := True;
      end;
  end;

  bgndFancy.Direction := TFillDirection(TMenuItem(Sender).Tag);
end;

procedure TfrmMain.FormResize(Sender: TObject);
begin
  bgndFancy.ForceRedraw;
  if Color <> Chessboard1.BackgroundColour then
    Color := Chessboard1.BackgroundColour;
end;

procedure TfrmMain.mnuViewCapturedPieces1Click(Sender: TObject);
begin
  frmCapturedPieces := TfrmCapturedPieces.Create(Application);
  try
    if Chessboard1.TimeLimitEnabled then PauseGame;
    frmCapturedPieces.ShowModal;
  finally
    if Chessboard1.TimeLimitEnabled then UnpauseGame;
    frmCapturedPieces.Free;
  end;
end;

procedure TfrmMain.mnuAnalysePosition1Click(Sender: TObject);
begin
  MessageDlg('THIS IS STILL TO BE IMPLEMENTED!', mtInformation, [mbOK], 0);
end;

procedure TfrmMain.mnuHighlightSquares1Click(Sender: TObject);
begin
  mnuHighlightSquares1.Checked := not mnuHighlightSquares1.Checked;
  mnuHighlightSquares2.Checked := mnuHighlightSquares1.Checked;
  Chessboard1.ShowSquareHighlights := mnuHighlightSquares1.Checked;
end;

procedure TfrmMain.mnuSelectPieceFilter1Click(Sender: TObject);
begin
  frmPieceFilter := TfrmPieceFilter.Create(Application);
  with frmPieceFilter do
  try
    if Chessboard1.TimeLimitEnabled then PauseGame;
    cmbFilters.ItemIndex := cmbFilters.Items.IndexOf(Chessboard1.PieceFilter);
    chkEnableFilter.Checked := Chessboard1.SmoothPieces;
    ShowModal;
  finally
    if ModalResult = mrOK then
    begin
      Chessboard1.PieceFilter := cmbFilters.Items[cmbFilters.ItemIndex];
      if mnuFilterPieces1.Checked <> chkEnableFilter.Checked then
        mnuFilterPieces1Click(Self);
    end;

    if Chessboard1.TimeLimitEnabled then UnpauseGame;

    Free;
  end;
end;

procedure TfrmMain.PauseGame;
begin
  if Chessboard1.GameRunning then
  begin
    if PauseGameOnDialogue then
      Chessboard1.Pause;

    Chessboard1.Hide;
    memMoveList.Font.Color := clWhite;
  end;
end;

procedure TfrmMain.UnpauseGame;
begin
  if Chessboard1.GameRunning then
  begin
    Chessboard1.Show;
    memMoveList.Font.Color := clBlack;
    if PauseGameOnDialogue then
      Chessboard1.Unpause;
  end;
end;

procedure TfrmMain.mnuHighlightDragStartSquare1Click(Sender: TObject);
begin
  mnuHighlightDragStartSquare1.Checked := not mnuHighlightDragStartSquare1.Checked;
  Chessboard1.HighlightStartSquare := mnuHighlightDragStartSquare1.Checked;
end;

procedure TfrmMain.mnuResetBoardOnGameEnd1Click(Sender: TObject);
begin
  mnuResetBoardOnGameEnd1.Checked := not mnuResetBoardOnGameEnd1.Checked;
  ResetBoardOnGameEnd := mnuResetBoardOnGameEnd1.Checked;
end;

procedure TfrmMain.mnuContinueLastGameOnStartup1Click(Sender: TObject);
begin
  mnuContinueLastGameOnStartup1.Checked := not mnuContinueLastGameOnStartup1.Checked;
  SaveOnExit := mnuContinueLastGameOnStartup1.Checked;
end;

procedure TfrmMain.mnuGame1Click(Sender: TObject);
begin
  mnuShowTimeLeft1.Enabled := mnuTimeLimitEnabled1.Checked and (Chessboard1.GameRunning);
end;

procedure TfrmMain.mnuPauseGame1Click(Sender: TObject);
begin
  mnuPauseGame1.Checked := not mnuPauseGame1.Checked;
  PauseGameOnDialogue := mnuPauseGame1.Checked;
end;

procedure TfrmMain.ShowOptionsScreen(Sender: TObject);
begin
//  frmOptionsPreview := TfrmOptionsPreview.Create(Application);
  try
    with frmOptions do
    begin
      SetBackgroundColour(Chessboard1.BackgroundColour);
      SetGridLinesColour(Chessboard1.GridLineColour);
      SetBlackSquaresColour(Chessboard1.BlackSquareColour);
      SetWhiteSquaresColour(Chessboard1.WhiteSquareColour);
      SetCurrentDragColour(Chessboard1.ValidMoveDragColour);
      SetStartSquareColour(Chessboard1.StartDragColour);
      SetCaptureColour(Chessboard1.HighlightCaptureColour);
      SetInvalidMoveColour(Chessboard1.HighlightEnemyColour);
      SetValidMoveColour(Chessboard1.HighlightColour);

      chkEnableHighlighting.Checked := Chessboard1.ShowSquareHighlights;
      chkHighlightStartDragSquare.Checked := Chessboard1.HighlightStartSquare;
      chkShowValidMoves.Checked := Chessboard1.ShowValidMovesMode;

      chkContinueLastGame.Checked := SaveOnExit;
      chkShowPieceHints.Checked := Chessboard1.ShowPieceHints;
      chkDrawGridLines.Checked := Chessboard1.DrawLines;
      chkResetBoardOnGameEnd.Checked := ResetBoardOnGameEnd;

      chkUseRed.Checked := bgndFancy.ChangeRColour;
      chkUseGreen.Checked := bgndFancy.ChangeGColour;
      chkUseBlue.Checked := bgndFancy.ChangeBColour;

      rgpBackgroundDirection.ItemIndex := Ord(bgndFancy.Direction);

      chkEnableTimeLimit.Checked := Chessboard1.TimeLimitEnabled;
      speTimeLimit.Value := Chessboard1.TimeLimit div 60;
      chkPauseGame.Checked := PauseGameOnDialogue;

      chkEnableTimeLimit.Enabled := not Chessboard1.GameRunning;
      speTimeLimit.Enabled := not Chessboard1.GameRunning;
      chkPauseGame.Enabled := not Chessboard1.GameRunning;

      lblUncheckResetBoard.Visible := Chessboard1.GameRunning and
                                      ResetBoardOnGameEnd;

      lblTimeNote.Visible := Chessboard1.GameRunning;
    end;

    Hide;
    frmOptions.ShowModal;
  finally
//    frmOptionsPreview.Free;

    if frmOptions.ModalResult = mrOK then
    with frmOptions do
    begin
      Chessboard1.BackgroundColour := pnlBackgroundColour.Color;
      Chessboard1.GridLineColour := pnlGridLinesColour.Color;
      Chessboard1.BlackSquareColour := pnlBlackSquaresColour.Color;
      Chessboard1.WhiteSquareColour := pnlWhiteSquaresColour.Color;
      Chessboard1.ValidMoveDragColour := pnlCurrentDragColour.Color;
      Chessboard1.StartDragColour := pnlStartSquareColour.Color;
      Chessboard1.HighlightCaptureColour := pnlCaptureColour.Color;
      Chessboard1.HighlightEnemyColour := pnlInvalidMoveColour.Color;
      Chessboard1.HighlightColour := pnlValidMoveColour.Color;

      if chkEnableHighlighting.Checked <> Chessboard1.ShowSquareHighlights then
        mnuHighlightSquares1Click(Self);

      if chkHighlightStartDragSquare.Checked <> Chessboard1.HighlightStartSquare then
        mnuHighlightDragStartSquare1Click(Self);

      if chkShowValidMoves.Checked <> Chessboard1.ShowValidMovesMode then
        mnuShowValidMoves1Click(Self);

      if mnuContinueLastGameOnStartup1.Checked <> chkContinueLastGame.Checked then
        mnuContinueLastGameOnStartup1Click(Self);

      Chessboard1.ShowPieceHints := chkShowPieceHints.Checked;
      mnuShowPieceHints1.Checked := Chessboard1.ShowPieceHints;
      if not Chessboard1.ShowPieceHints then Chessboard1.Hint := '';

      if mnuDrawGridLines1.Checked <> chkDrawGridLines.Checked then
        mnuDrawGridLines1Click(Self);

      if mnuResetBoardOnGameEnd1.Checked <> chkResetBoardOnGameEnd.Checked then
        mnuResetBoardOnGameEnd1Click(Self);

      // Change the panel background colours
      if mnuUseRed1.Checked <> chkUseRed.Checked then
        mnuUseRed1Click(Self);
      if mnuUseGreen1.Checked <> chkUseGreen.Checked then
        mnuUseGreen1Click(Self);
      if mnuUseBlue1.Checked <> chkUseBlue.Checked then
        mnuUseBlue1Click(Self);

      case rgpBackgroundDirection.ItemIndex of
       0: mnuLeftRight1Click( mnuLeftRight1);
       1: mnuLeftRight1Click( mnuRightLeft1);
       2: mnuLeftRight1Click( mnuUpDown1);
       3: mnuLeftRight1Click( mnuDownUp1);
      end;

      if not Chessboard1.GameRunning then
      begin
        Chessboard1.TimeLimitEnabled := chkEnableTimeLimit.Checked;
        mnuTimeLimitEnabled1.Checked := Chessboard1.TimeLimitEnabled;
        Chessboard1.TimeLimit := speTimeLimit.Value * 60;
        if mnuPauseGame1.Checked <> chkPauseGame.Checked then
          mnuPauseGame1Click(Self);
      end;
    end;

    Show;
  end;
end;

procedure TfrmMain.mnuShowPieceHints1Click(Sender: TObject);
begin
  mnuShowPieceHints1.Checked := not mnuShowPieceHints1.Checked;
  Chessboard1.ShowPieceHints := mnuShowPieceHints1.Checked;
  if not Chessboard1.ShowPieceHints then Chessboard1.Hint := '';
end;

procedure TfrmMain.Chessboard1PositionMove(MovedColour: TColour; const From,
  WhereTo: TPoint);
begin
  UpdateUndoRedo;
  if Chessboard1.RedoPossible then
  begin
    if RedoStrings.Count > 0 then
    RedoStrings.Delete(RedoStrings.Count - 1);
  end;

  memMoveList.Lines.Add(Format('POSITION: [%d,%d] to [%d,%d]', [From.X,
                                               From.Y, WhereTo.X, WhereTo.Y]));
end;

procedure TfrmMain.mnuFile1Click(Sender: TObject);
var
  iter: Integer;
  CurrMenu: TMenuItem;
  MenuName: String;
begin
  for iter := 0 to ComponentCount - 1 do
    if (Components[iter] is TMenuItem) then
    begin
      CurrMenu := (Components[iter] as TMenuItem);

      MenuName := CurrMenu.Name;
      Delete(MenuName, Length(MenuName), 1);
      if Lowercase(MenuName) = 'mnufilehistory' then
      begin
        CurrMenu.Caption := FileHistory[CurrMenu.Tag];
        CurrMenu.Visible := CurrMenu.Caption <> '(Empty)';
      end;
    end;

  mnuN1.Visible := mnuFileHistory1.Visible;
end;

procedure TfrmMain.mnuFileHistory1Click(Sender: TObject);
begin
  LoadGame((Sender as TMenuItem).Caption);
end;

procedure TfrmMain.AddToFileHistory(const Filename: String);
var
  iter,
  iter2: Integer;
  FindStr: String;
begin
  // First, check to see if the name is already in the list.
  FindStr := Lowercase(Filename);
  for iter := 0 to High(FileHistory) do
    if FindStr = Lowercase(FileHistory[iter]) then
    begin
      if iter = 0 then Exit;  // no more work to be done - it's first item in list

      if iter <> High(FileHistory) then
        for iter2 := iter to High(FileHistory) - 1 do
          FileHistory[iter] := FileHistory[iter + 1];

      Break;
    end;

  for iter := High(FileHistory) downto 1 do
    FileHistory[iter] := FileHistory[iter - 1];

  FileHistory[0] := Filename;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -