📄 xqtable.pas
字号:
///////////////////////////////////////////////////////////////////////////////
//
// XQStduio Source Code (http://www.qipaile.net/xqstudio)
//
// Copyright (c) 1998-2008, DONG Shiwei (董世伟 or 过河象)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// 1) Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2) Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// 3) Neither the name of the XQStudio nor the names of its contributors
// may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
///////////////////////////////////////////////////////////////////////////////
//
// Note: Some characters of this file are Simplified Chinese characters
// encoded with GB2312/GB18030 standard
//
unit XQTable;
interface
uses Windows, Classes, Graphics, Forms, Controls, StdCtrls, ExtCtrls,
ComCtrls, SysUtils, Dialogs, XQSystem, dDelphiS, XQDataT, XQRecLBX, XQPNode,
DBCtrls, Buttons, ImgList, ToolWin, ActnList, XQFileRW, Menus, ClipBrd;
const
dCXQTableWidth = 732;
dCXQTableHeight = 454;
//-------------------------------------------------------------------------
//
//.........................................................................
type
TfrmXQTable = class(TForm) // "象棋对弈桌"类定义
pnlLeft: TPanel; // 对弈桌的左边,放棋盘
imgXQBoard: TImage; // 状态条
pnlRight: TPanel; // 对弈桌的右边,放置其它信息
pnlRTop: TPanel; // 右边底部
pgcInfoPage: TPageControl;
tstXQInfoA: TTabSheet; // 象棋对弈信息页
imgRed1: TImage; // 红棋: 车
imgRed2: TImage; // 红棋: 马
imgRed3: TImage; // 红棋: 相
imgRed4: TImage; // 红棋: 士
imgRed5: TImage; // 红棋: 帅
imgRed6: TImage; // 红棋: 炮
imgRed7: TImage; // 红棋: 兵
imgBlk1: TImage; // 黑棋: 车
imgBlk2: TImage; // 黑棋: 马
imgBlk3: TImage; // 黑棋: 象
imgBlk4: TImage; // 黑棋: 士
imgBlk5: TImage; // 黑棋: 将
imgBlk6: TImage; // 黑棋: 炮
imgBlk7: TImage; // 黑棋: 卒
imgXY00: TImage; // 棋盘的交叉点定义
imgXY10: TImage; // 变量后面的数字表示坐标
imgXY20: TImage;
imgXY30: TImage;
imgXY40: TImage;
imgXY50: TImage;
imgXY60: TImage;
imgXY70: TImage;
imgXY80: TImage;
imgXY01: TImage;
imgXY11: TImage;
imgXY21: TImage;
imgXY31: TImage;
imgXY41: TImage;
imgXY51: TImage;
imgXY61: TImage;
imgXY71: TImage;
imgXY81: TImage;
imgXY02: TImage;
imgXY12: TImage;
imgXY22: TImage;
imgXY32: TImage;
imgXY42: TImage;
imgXY52: TImage;
imgXY62: TImage;
imgXY72: TImage;
imgXY82: TImage;
imgXY03: TImage;
imgXY13: TImage;
imgXY23: TImage;
imgXY33: TImage;
imgXY43: TImage;
imgXY53: TImage;
imgXY63: TImage;
imgXY73: TImage;
imgXY83: TImage;
imgXY04: TImage;
imgXY14: TImage;
imgXY24: TImage;
imgXY34: TImage;
imgXY44: TImage;
imgXY54: TImage;
imgXY64: TImage;
imgXY74: TImage;
imgXY84: TImage;
imgXY05: TImage;
imgXY15: TImage;
imgXY25: TImage;
imgXY35: TImage;
imgXY45: TImage;
imgXY55: TImage;
imgXY65: TImage;
imgXY75: TImage;
imgXY85: TImage;
imgXY06: TImage;
imgXY16: TImage;
imgXY26: TImage;
imgXY36: TImage;
imgXY46: TImage;
imgXY56: TImage;
imgXY66: TImage;
imgXY76: TImage;
imgXY86: TImage;
imgXY07: TImage;
imgXY17: TImage;
imgXY27: TImage;
imgXY37: TImage;
imgXY47: TImage;
imgXY57: TImage;
imgXY67: TImage;
imgXY77: TImage;
imgXY87: TImage;
imgXY08: TImage;
imgXY18: TImage;
imgXY28: TImage;
imgXY38: TImage;
imgXY48: TImage;
imgXY58: TImage;
imgXY68: TImage;
imgXY78: TImage;
imgXY88: TImage;
imgXY09: TImage;
imgXY19: TImage;
imgXY29: TImage;
imgXY39: TImage;
imgXY49: TImage;
imgXY59: TImage;
imgXY69: TImage;
imgXY79: TImage;
imgXY89: TImage;
imgQZMove: TImage;
pnlRightMargin: TPanel;
pnlPlayRec: TPanel;
pgcRemark: TPageControl;
pgcPlayRec: TPageControl;
tstRecord: TTabSheet;
lbxPlayRec: TListBox;
tstRemark: TTabSheet;
pnlTalk: TPanel;
cbbTalk: TComboBox;
tmrAutoPlay: TTimer;
imgMovePosTo: TImage;
pnlCtrlToolBar: TPanel;
tlbPlayRec: TToolBar;
tbtFirstStep: TToolButton;
tbtPriorStep: TToolButton;
tbtNextStep: TToolButton;
tbtLastStep: TToolButton;
tbtDelStep: TToolButton;
pnlVarStepButtons: TPanel;
pnlPlayRecMemo: TPanel;
memPlayRec: TMemo;
pnlVarStepListBox: TPanel;
lblPlayVar: TLabel;
lbxPlayVar: TListBox;
aclXQTable: TActionList;
actPlayRecFirst: TAction;
actPlayRecPrior: TAction;
actPlayRecNext: TAction;
actPlayRecLast: TAction;
actPlayRecDelete: TAction;
pnlAddVarStepHint: TPanel;
lblAddPlayVarHint: TLabel;
lblBigHint: TLabel;
imgBlkNum: TImage;
imgRedNum: TImage;
pnlPlayerInfo: TPanel;
imgMovePosFrom: TImage;
tlbPlayVar: TToolBar;
tbtAddVarStep: TToolButton;
tbtDelVarStep: TToolButton;
tbtCancelAddVarStep: TToolButton;
actPlayVarAdd: TAction;
actPlayVarDelete: TAction;
actPlayVarCancel: TAction;
lblTitle: TLabel;
lblPlayer: TLabel;
lblTimeAddr: TLabel;
Label1: TLabel;
dlgSaveDialog: TSaveDialog;
tbtPlayVarSpace: TToolButton;
tbtPlayVarUp: TToolButton;
tbtPlayVarDown: TToolButton;
actPlayVarUp: TAction;
actPlayVarDown: TAction;
ppmPlayVar: TPopupMenu;
ppm01: TMenuItem;
ppm02: TMenuItem;
ppmPlayRec: TPopupMenu;
ppmAutoPlayStart: TMenuItem;
ppmLine1: TMenuItem;
ppmAutoPlayTime: TMenuItem;
ppmAutoPlay041: TMenuItem;
ppmAutoPlay01: TMenuItem;
ppmAutoPlay02: TMenuItem;
ppmAutoPlay03: TMenuItem;
ppmAutoPlay04: TMenuItem;
ppmAutoPlay05: TMenuItem;
ppmAutoPlay06: TMenuItem;
ppmAutoPlay07: TMenuItem;
ppmAutoPlay08: TMenuItem;
ppmLine2: TMenuItem;
ppmAutoPlayStop: TMenuItem;
ppmSoundOff: TMenuItem;
ppmSoundOn: TMenuItem;
tstXQInfoB: TTabSheet;
pgcQiTu: TPageControl;
tstQiTuText: TTabSheet;
memQiTuText: TMemo;
pnlQiTuTextToolBar: TPanel;
tlbQiTuToolBar: TToolBar;
tbtSelectQiTuText: TToolButton;
tbtCopyQiTuText: TToolButton;
tbtSaveQiTuText: TToolButton;
pnlQiTuTextStyle: TPanel;
rbtQiTuStyle01: TRadioButton;
rbtQiTuStyle02: TRadioButton;
lblQiTuTextStyle: TLabel;
ppmLine3: TMenuItem;
ppmPasteQipu: TMenuItem;
tstXQInfoC: TTabSheet;
pnlTextToolBar: TPanel;
tlbTextToolBar: TToolBar;
tbtSelectAllText: TToolButton;
tbtCopySelectedText: TToolButton;
tbtSaveTextIntoFile: TToolButton;
memText: TMemo;
pnlTextStyle: TPanel;
Label2: TLabel;
rbtTextStyle01: TRadioButton;
rbtTextStyle02: TRadioButton;
rbtTextStyle03: TRadioButton;
tmrMoveBlink: TTimer;
ppmImportQipu: TMenuItem;
dlgOpenDialog: TOpenDialog;
N1: TMenuItem;
ppmCopy: TMenuItem;
ppmSaveAsBmp: TMenuItem;
ppmSearcnFile: TMenuItem;
tstQituImage: TTabSheet;
Panel1: TPanel;
ToolBar1: TToolBar;
tbtCopyQituImage: TToolButton;
tbtSaveQituImage: TToolButton;
pnlQituImage: TPanel;
imgQituImage: TImage;
Label3: TLabel;
chkBbsColor: TCheckBox;
rbtTextStyle04: TRadioButton;
N2: TMenuItem;
ppmJavaXQ: TMenuItem;
ppmTextXQ: TMenuItem;
edtQipuInput: TEdit;
ppmMergeXqf: TMenuItem;
N3: TMenuItem;
lbxPlayRecBak: TListBox;
tstQituBitmap: TTabSheet;
Panel2: TPanel;
Label4: TLabel;
ToolBar2: TToolBar;
tbtCopyQituBitmap: TToolButton;
tbtSaveQituBitmap: TToolButton;
Panel3: TPanel;
imgQituBitmap: TImage;
ppmBitmapCopy: TMenuItem;
ppmBitmapSaveAsBmp: TMenuItem;
N6: TMenuItem;
Label5: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
// imgXY Events Handlers
procedure imgXYClick(Sender: TObject);
procedure imgXYDblClick(Sender: TObject);
procedure imgXYDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure imgXYDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure imgXYEndDock(Sender, Target: TObject; X, Y: Integer);
procedure imgXYEndDrag(Sender, Target: TObject; X, Y: Integer);
procedure imgXYMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure imgXYMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure imgXYMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure imgXYProgress(Sender: TObject; Stage: TProgressStage;
PercentDone: Byte; RedrawNow: Boolean;
const R: TRect; const Msg: String);
procedure imgXYStartDock(Sender: TObject;
var DragObject: TDragDockObject);
procedure imgXYStartDrag(Sender: TObject;
var DragObject: TDragObject);
procedure lbxPlayRecClick(Sender: TObject);
procedure tmrAutoPlayTimer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure memPlayRecChange(Sender: TObject);
procedure lbxPlayVarDblClick(Sender: TObject);
procedure lbxPlayVarClick(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
procedure actPlayRecFirstExecute(Sender: TObject);
procedure actPlayRecPriorExecute(Sender: TObject);
procedure actPlayRecNextExecute(Sender: TObject);
procedure actPlayRecLastExecute(Sender: TObject);
procedure actPlayRecDeleteExecute(Sender: TObject);
procedure pnlCtrlToolBarResize(Sender: TObject);
procedure pnlVarStepButtonsResize(Sender: TObject);
procedure pnlVarStepListBoxResize(Sender: TObject);
procedure pnlAddVarStepHintResize(Sender: TObject);
procedure pnlRTopResize(Sender: TObject);
procedure pnlRightResize(Sender: TObject);
procedure pgcInfoPageResize(Sender: TObject);
procedure pnlRightMarginResize(Sender: TObject);
procedure actPlayVarAddExecute(Sender: TObject);
procedure actPlayVarDeleteExecute(Sender: TObject);
procedure actPlayVarCancelExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure memPlayRecKeyPress(Sender: TObject; var Key: Char);
procedure imgMovePosToDblClick(Sender: TObject);
procedure pnlTextToolBarResize(Sender: TObject);
procedure tbtSelectAllTextClick(Sender: TObject);
procedure tbtSaveTextIntoFileClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure actPlayVarUpExecute(Sender: TObject);
procedure actPlayVarDownExecute(Sender: TObject);
procedure ppmPlayVarPopup(Sender: TObject);
procedure lbxPlayRecDblClick(Sender: TObject);
procedure ppmAutoPlayStartClick(Sender: TObject);
procedure ppmAutoPlayStopClick(Sender: TObject);
procedure ppmAutoPlayTimeClick(Sender: TObject);
procedure ppmPlayRecPopup(Sender: TObject);
procedure ppmSoundOffClick(Sender: TObject);
procedure ppmSoundOnClick(Sender: TObject);
procedure pnlQiTuTextToolBarResize(Sender: TObject);
procedure tbtSaveQiTuTextClick(Sender: TObject);
procedure tstXQInfoBShow(Sender: TObject);
procedure tbtSelectQiTuTextClick(Sender: TObject);
procedure ppmPasteQipuClick(Sender: TObject);
procedure tstXQInfoCShow(Sender: TObject);
procedure tmrMoveBlinkTimer(Sender: TObject);
procedure imgXQBoardMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ppmImportQipuClick(Sender: TObject);
procedure ppmCopyClick(Sender: TObject);
procedure ppmSaveAsBmpClick(Sender: TObject);
procedure ppmSearcnFileClick(Sender: TObject);
procedure tstQituImageShow(Sender: TObject);
procedure tbtCopyQituImageClick(Sender: TObject);
procedure tbtSaveQituImageClick(Sender: TObject);
procedure ppmJavaXQClick(Sender: TObject);
procedure ppmTextXQClick(Sender: TObject);
procedure edtQipuInputKeyPress(Sender: TObject; var Key: Char);
procedure edtQipuInputChange(Sender: TObject);
procedure ppmMergeXqfClick(Sender: TObject);
procedure tstQituBitmapShow(Sender: TObject);
procedure tbtCopyQituBitmapClick(Sender: TObject);
procedure tbtSaveQituBitmapClick(Sender: TObject);
procedure ppmBitmapCopyClick(Sender: TObject);
procedure ppmBitmapSaveAsBmpClick(Sender: TObject);
private
{ Private declarations }
FDragImgXY : TImage;
FReverseBoardH : Boolean;
procedure dSetupXQBoard; // 设置棋盘
procedure dSetAddVarStepMode(tf: dTBoolean);
function imgGetImgXY(X, Y: Integer): TImage; // 取(x,y)处交叉点
public
XQFileName : string;
isPasteMsgEnabled : Boolean;
imgXY : dTXQPXY; // 棋盘上的交叉点
XQ : dTXiangQi;
isShowBoardOnly : dTBoolean;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -