📄 xqtable.pas
字号:
// 处理棋谱记录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 + -