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

📄 xqtable.pas

📁 象棋演播室1.6的dephi源码 作者 董世伟
💻 PAS
📖 第 1 页 / 共 5 页
字号:
// 处理棋谱记录Click事件,显示指定的记录的盘面状况
//.........................................................................
procedure TfrmXQTable.lbxPlayRecClick(Sender: TObject);
begin
  tmrMoveBlink.Enabled := False;
  FDragImgXY := nil;
  dStopAutoPlay;
  XQ.dOnRecListBoxClick;
end;

procedure TfrmXQTable.tmrAutoPlayTimer(Sender: TObject);
begin
  if (sImportFileName <> '') then
  begin
    tmrAutoPlay.Enabled := False;
    dImportQipuFromFile(sImportFileName);
    frmMain.iSaveXQTable(ChangeFileExt(sImportFileName, '.XQF'), Self);    
    Self.Close;
    Exit;
  end;

  if actPlayRecNext.Enabled then
  begin
    actPlayRecNextExecute(nil);
    if isAutoPlaySoundOn then beep;
  end
  else
  begin
    tmrAutoPlay.Enabled := False;
    IsAutoPlaying       := False;
    if isSetAutoPlayList then Self.Close;
  end;
end;

//-------------------------------------------------------------------------
// 删除棋桌
//.........................................................................
procedure TfrmXQTable.FormDestroy(Sender: TObject);
begin
  XQ.Free;
end;

//-------------------------------------------------------------------------
// 棋桌变为当前棋桌后要做的事情
//.........................................................................
procedure TfrmXQTable.FormActivate(Sender: TObject);
begin
  frmMain.pnlXQStudioLogo.Visible  := False;
  frmMain.ActiveXQTable            := Self;
  frmMain.dEnableXQTableMenuItem(True);
  frmMain.Caption := dCVersionInfo + ' - ' + ExtractFileName(XQFileName);
  dRefreshXQInfo;
end;

procedure TfrmXQTable.memPlayRecChange(Sender: TObject);
begin
  XQ.dOnRecMemoChange;
end;

procedure TfrmXQTable.lbxPlayVarDblClick(Sender: TObject);
var
  nTopIndex: Integer;
begin
  nTopIndex               := lbxPlayRec.TopIndex;
  lbxPlayRecBak.Items     := lbxPlayRec.Items;
  lbxPlayRecBak.ItemIndex := lbxPlayRec.ItemIndex;
  lbxPlayRecBak.TopIndex  := lbxPlayRec.TopIndex;
  lbxPlayRecBak.Visible   := True;
  XQ.dOnVarListBoxDblClick;
  lbxPlayRec.TopIndex     := nTopIndex;
  lbxPlayRecBak.Visible   := False;
end;

procedure TfrmXQTable.lbxPlayVarClick(Sender: TObject);
begin
  if lbxPlayVar.ItemIndex >= 0 then
    actPlayVarDelete.Enabled := (not XQ.isHighlightVarStepActive)
  else
    actPlayVarDelete.Enabled := False;

  actPlayVarUp.Enabled   := (lbxPlayVar.ItemIndex > 0);
  actPlayVarDown.Enabled := (lbxPlayVar.ItemIndex>=0) and
                            (lbxPlayVar.ItemIndex<(lbxPlayVar.Items.Count-1));
end;

procedure TfrmXQTable.FormDeactivate(Sender: TObject);
begin
  frmMain.ActiveXQTable            := nil;
  frmMain.dEnableXQTableMenuItem(False);
end;

procedure TfrmXQTable.actPlayRecFirstExecute(Sender: TObject);
begin
  if (XQ=nil) then Exit;
  XQ.dDispQiziAtRecNo(0);
  XQ.dEnablePlayer(XQ.DispNode);
end;

procedure TfrmXQTable.actPlayRecPriorExecute(Sender: TObject);
var
  iIdx: dTInt32;
begin
  if (XQ=nil) then Exit;
  if XQ.DispStepNo=0 then Exit;
  iIdx := XQ.DispStepNo - 1;
  XQ.dDispQiziAtRecNo(iIdx);
  XQ.dEnablePlayer(XQ.DispNode);
end;

procedure TfrmXQTable.actPlayRecNextExecute(Sender: TObject);
var
  iIdx: dTInt32;
begin
  if (XQ=nil) then Exit;
  if XQ.DispStepNo=XQ.PlayStepNo then Exit;
  iIdx := XQ.DispStepNo + 1;
  XQ.dDispQiziAtRecNo(iIdx);
  XQ.dEnablePlayer(XQ.DispNode);
end;

procedure TfrmXQTable.actPlayRecLastExecute(Sender: TObject);
begin
  if (XQ=nil) then Exit;
  XQ.dDispQiziAtRecNo(XQ.PlayStepNo);
  XQ.dEnablePlayer(XQ.DispNode);
end;

procedure TfrmXQTable.actPlayRecDeleteExecute(Sender: TObject);
begin
  if (XQ=nil) then Exit;
  XQ.dDeleteOnePlayNode;
  isXQFileChange := True;
end;

var
  PlayNodeBeforeAddVarStep: dTXQPlayNode;
procedure TfrmXQTable.dSetAddVarStepMode(tf: dTBoolean);
var
  i      : dTInt32;
  sPlayer: string;
begin
  case tf of
    True:
      begin
        if (lbxPlayVar.Items.Count=dCMaxVarNo) then Exit;
        if XQ.DispStepNo = 0 then Exit;
        if XQ.isAddVarStep then Exit;
        XQ.isAddVarStep             := True;
        XQ.dDispQiziAtRecNo(XQ.DispStepNo);
        PlayNodeBeforeAddVarStep    := XQ.DispNode;
        if ((XQ.DispNode.StepNo mod 2)=0) then
          sPlayer := '黑方'
        else
          sPlayer := '红方';
        lblAddPlayVarHint.Caption   :=
          '    如左图形势,'+ sPlayer +'刚才一步走' +
          PlayNodeBeforeAddVarStep.StrRec +
          ',现在不走' + PlayNodeBeforeAddVarStep.StrRec +
          ',请输入新的变着(在棋盘上直接走子)。'+
          '按“取消”按钮可以停止这一操作。';
        lbxPlayRec.Visible := False;
        for i:=XQ.PlayStepNo downto XQ.DispStepNo do
          XQ.dDeleteOnePlayRec;
        lbxPlayRec.Visible := True;
        actPlayVarAdd.Enabled       := False;
        pnlAddVarStepHint.Visible   := True;
        actPlayVarDelete.Enabled    := False;
        actPlayVarCancel.Enabled    := True;

        actPlayVarUp.Enabled        := False;
        actPlayVarDown.Enabled      := False;

        lbxPlayVar.Enabled          := False;
        lbxPlayRec.Enabled          := False;
        memPlayRec.Enabled          := False;

        actPlayRecFirst.Enabled     := False;
        actPlayRecPrior.Enabled     := False;
        actPlayRecNext.Enabled      := False;
        actPlayRecLast.Enabled      := False;

        actPlayRecDelete.Enabled    := False;
        tlbPlayRec.Enabled          := False;
      end;

    False:
      begin
        XQ.isAddVarStep             := False;
        actPlayVarAdd.Enabled       := (lbxPlayRec.ItemIndex>0);
        pnlAddVarStepHint.Visible   := False;
        actPlayVarDelete.Enabled    := False;
        actPlayVarCancel.Enabled    := False;

        actPlayVarUp.Enabled        := False;
        actPlayVarDown.Enabled      := False;

        lbxPlayVar.Enabled          := True;
        lbxPlayRec.Enabled          := True;
        memPlayRec.Enabled          := True;
        tlbPlayRec.Enabled          := True;
      end;
  end;
end;

procedure TfrmXQTable.dReverseBoardV;
var
  i, j, iLeft, iTop: dTINT32;
begin
  imgMovePosTo.Visible   := False;
  imgMovePosFrom.Visible := False;
  for i:=0 to 8 do for j:=0 to 4 do
  begin
    iLeft                := imgXY[i, j].Left;
    iTop                 := imgXY[i, j].Top;
    imgXY[i, j].Left     := imgXY[8-i, 9-j].Left;
    imgXY[i, j].Top      := imgXY[8-i, 9-j].Top;
    imgXY[8-i, 9-j].Left := iLeft;
    imgXY[8-i, 9-j].Top  := iTop;
  end;
  imgRedNum.Visible := not imgRedNum.Visible;
  imgBlkNum.Visible := not imgBlkNum.Visible;
  XQ.dDispQiziAtRecNo(XQ.DispStepNo);    // 为了显示最后移动棋子的标记
end;

procedure TfrmXQTable.dReverseBoardH;
var
  i, j, iLeft, iTop: dTINT32;
begin
  FReverseBoardH         := not FReverseBoardH;
  XQ.ReverseH            := FReverseBoardH;
  imgMovePosTo.Visible   := False;
  imgMovePosFrom.Visible := False;
  for i:=0 to 3 do for j:=0 to 9 do
  begin
    iLeft                := imgXY[i, j].Left;
    iTop                 := imgXY[i, j].Top;
    imgXY[i, j].Left     := imgXY[8-i, j].Left;
    imgXY[i, j].Top      := imgXY[8-i, j].Top;
    imgXY[8-i, j].Left   := iLeft;
    imgXY[8-i, j].Top    := iTop;
  end;
//
  XQ.dRefreshRecStr;
//
  XQ.dDispQiziAtRecNo(XQ.DispStepNo);    // 为了显示最后移动棋子的标记
end;

procedure TfrmXQTable.pnlCtrlToolBarResize(Sender: TObject);
begin
  with Sender as TPanel do
  begin
    Height := 28;
    tlbPlayRec.Height := 28;
    tlbPlayRec.Width  := 121;
    tlbPlayRec.Left   := (Width  - tlbPlayRec.Width ) div 2;
    tlbPlayRec.Top    := (Height - tlbPlayRec.Height) div 2;
  end;
end;
procedure TfrmXQTable.pnlVarStepButtonsResize(Sender: TObject);
begin
  with Sender as TPanel do
  begin
    Height := 28;
    tlbPlayVar.Height := 28;
    tlbPlayVar.Width  := 123;
    tlbPlayVar.Left   := (Width  - tlbPlayVar.Width ) div 2;
    tlbPlayVar.Top    := 2;
  end;
end;

procedure TfrmXQTable.pnlVarStepListBoxResize(Sender: TObject);
begin
  with Sender as TPanel do
  begin
    Height := 95;
    pnlAddVarStepHint.Height := Height;
  end;
  lbxPlayVar.Height := 63;
  lblPlayVar.Top    := 13;
  lblPlayVar.Left   := 2;
end;

procedure TfrmXQTable.pnlAddVarStepHintResize(Sender: TObject);
begin
  lblBigHint.Left := 4;
  lblBigHint.Top  := 8;
  lblAddPlayVarHint.Left  := 8;
  lblAddPlayVarHint.Top   := lblBigHint.Top + lblBigHint.Height + 4;
  lblADdPlayVarHint.Width  := pnlAddVarStepHint.Width - 16;
  lblAddPlayVarHint.Height := pnlAddVarStepHint.Height -
                                lblAddPlayVarHint.Top;
end;

procedure TfrmXQTable.pnlRTopResize(Sender: TObject);
begin
  with Sender as TPanel do
  begin
    Height             := 0;
    //Height             := 50;
  end;
end;

procedure TfrmXQTable.pnlRightResize(Sender: TObject);
begin
  with Sender as TPanel do
  begin
    // Height := 
  end;
end;

procedure TfrmXQTable.pgcInfoPageResize(Sender: TObject);
begin
  with Sender as TPageControl do
  begin
    Height := imgXQBoard.Height - pnlRTop.Height; 
  end;
end;

procedure TfrmXQTable.pnlRightMarginResize(Sender: TObject);
begin
  with Sender as TPanel do
  begin
    width := 3;
  end;
end;

procedure dPlayRecHook;
begin
  if frmMain.ActiveXQTable = nil then Exit;
  with frmMain.ActiveXQTable do
  begin
    if XQ.isAddVarStep then Exit;
    actPlayRecFirst.Enabled := (XQ.DispStepNo<>0);
    actPlayRecPrior.Enabled := (XQ.DispStepNo<>0);
    actPlayRecNext.Enabled  := (XQ.DispStepNo<>XQ.PlayStepNo);
    actPlayRecLast.Enabled  := (XQ.DispStepNo<>XQ.PlayStepNo);
    edtQipuInput.Visible    := not actPlayRecLast.Enabled;
    actPlayRecDelete.Enabled:= (XQ.DispStepNo=xQ.PlayStepNo) and
                               (XQ.DispStepNo<>0);

    actPlayVarAdd.Enabled   := (XQ.DispStepNo>0) and (not XQ.isAddVarStep);
    if actPlayVarAdd.Enabled then
    begin
      actPlayVarDelete.Enabled := False;
      actPlayVarUp.Enabled     := False;
      actPlayVarDown.Enabled   := False;
    end;
  end;
end;

procedure dRefreshHook;
begin
  if frmMain.ActiveXQTable = nil then Exit;
  frmMain.ActiveXQTable.Refresh;
end;

procedure TfrmXQTable.actPlayVarAddExecute(Sender: TObject);
begin
  isXQFileChange := True;
  dSetAddVarStepMode(True);
end;

procedure TfrmXQTable.actPlayVarDeleteExecute(Sender: TObject);
begin
  isXQFileChange := True;
  XQ.dDeletePlayVar(XQ.PlayVar[XQ.VarListBox.ItemIndex]);
  XQ.dDispQiziAtRecNo(XQ.DispStepNo);
  actPlayVarDelete.Enabled := False;
  actPlayVarUp.Enabled     := False;
  actPlayVarDown.Enabled   := False;
end;

procedure TfrmXQTable.actPlayVarCancelExecute(Sender: TObject);
begin
  actPlayVarCancel.Enabled := False;
  XQ.dLoadAllRecForPlayNode(PlayNodeBeforeAddVarStep);
  dSetAddVarStepMode(False);
end;

procedure TfrmXQTable.dShowBoardOnly(tf: dTBoolean);
begin
  isShowBoardOnly := tf;
  if tf then
    Self.Width := pnlLeft.Width
  else
    Self.Width := dCXQTableWidth;
end;

procedure TfrmXQTable.dBeforeSave;
begin
  isXQFileSaveOK := False;
  XQ.dDispQiziAtRecNo(XQ.DispStepNo);
end;

procedure TfrmXQTable.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if (not isXQFileChange) or isDemoTable then
  begin
    CanClose := True; Exit;
  end;

  case Application.MessageBox(
          PChar('是否保存对文件"'+ExtractFileName(XQFileName)
          +'"的修改?'),
          dCVersionInfo,
          MB_YESNOCANCEL + MB_ICONWARNING + MB_DEFBUTTON1) of
     IDYES:
       begin
         dBeforeSave;
         frmMain.actFileSaveExecute(nil);
         if isXQFileSaveOK then
         begin
           isXQFileChange := False;

⌨️ 快捷键说明

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