📄 piecevaluedlog.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CDefines.h"
#include "InfoForm3.h"
#include "Global.h"
#include "PieceValueDlog.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TPieceValueDlg *PieceValueDlg;
const int DefaultValues[6] = {0x90, 0x45, 0x40, 0x20, 0x20, 0x10};
enum PIECES { pvrook, pvgunner, pvknight, pvassist, pvbishop, pvpawn};
//---------------------------------------------------------------------------
__fastcall TPieceValueDlg::TPieceValueDlg(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
/*
以try开头的代码块中的代码被保护了起来。try代码块之后可以有任意多个
包含异常句柄的catch代码块。当一个C++应用发出一个异常时,运行库搜索
调用堆栈,寻找一个类参数与发出的异常中的类型匹配的catch代码块。try
代码块之后的catch代码块依次被搜索,直到遇到一次匹配为止。如果未能发现
匹配,用调用函数继续搜索。如果用...作为参数,可以创建一个与任意异常匹配的
catch代码块。
如果用户在数量域中敲入一个非数字值,catch (EConvertError &error)
发出整数转换错误。这里用到了指针引用符“&”,因为VCL异常(那些从
Exception类派生来的异常)必须通过指针引用来被捕捉。
当捕捉到了异常后,显示出错消息,并把输入聚焦到编辑控件中。
这个代码块不仅捕捉处理错误,而且在没有将其完全恢复之前将继续弹出错误对话框。
*/
bool TPieceValueDlg::GetColorValue(TObject *Sender)
{
int NewVal;
bool Ok;
int *CurVal;
TScrollBar *Scroller;
TEdit *Sender1 = (TEdit *)Sender;
Ok = true;
try
{
NewVal = Sender1->Text.ToInt();
}
catch (EConvertError &error)
{
Ok=false;
}
if (Sender1==Eassist)
{
CurVal = &Values[pvassist];
Scroller = Sassist;
}
else if (Sender1==Ebishop)
{
CurVal = &Values[pvbishop];
Scroller = Sbishop;
}
else if (Sender1==Eknight)
{
CurVal = &Values[pvknight];
Scroller = Sknight;
}
else if (Sender1==Erook)
{
CurVal = &Values[pvrook];
Scroller = Srook;
}
else if (Sender1==Egunner)
{
CurVal = &Values[pvgunner];
Scroller = Sgunner;
}
else if (Sender1==Epawn)
{
CurVal = &Values[pvpawn];
Scroller = Spawn;
}
if (Ok)
{
Ok = (NewVal > 255) ? false : ( (NewVal < 0 ) ? false : true );
}
else
NewVal = *CurVal;
if (!Ok)
{
Error("请输入一个介于0-255之间的有效数.");
Sender1->SetFocus();
}
else if (NewVal != *CurVal)
{
*CurVal = NewVal;
Scroller->Position=*CurVal;
}
return Ok;
}
//---------------------------------------------------------------------------
/*
棋子值对话框显示事件处理函数
初始化每个编辑框中的数值及滚动框的位置。
*/
void __fastcall TPieceValueDlg::FormShow(TObject *Sender)
{
Values[pvassist] = PieceValue[assist] / 16;
Values[pvbishop] = PieceValue[bishop] / 16;
Values[pvknight] = PieceValue[knight] / 16;
Values[pvrook] = PieceValue[rook] / 16;
Values[pvgunner] = PieceValue[gunner] / 16;
Values[pvpawn] = PieceValue[pawn] / 16;
Sassist->Position = Values[pvassist];
Eassist->Text = IntToStr(Values[pvassist]);
Sbishop->Position = Values[pvbishop];
Ebishop->Text = IntToStr(Values[pvbishop]);
Sknight->Position = BYTE(Values[pvknight]);
Eknight->Text = IntToStr(Values[pvknight]);
Srook->Position = Values[pvrook];
Erook->Text = IntToStr(Values[pvrook]);
Sgunner->Position = Values[pvgunner];
Egunner->Text = IntToStr(Values[pvgunner]);
Spawn->Position = Values[pvpawn];
Epawn->Text = IntToStr(Values[pvpawn]);
}
//---------------------------------------------------------------------------
/*
棋子值对话框确定按钮事件处理函数
设置好每个编辑框中的数值及滚动框的位置。
若编辑框中的数值不在0-255之间的话,则出现错误对话框。若正确的话,
不出现错误对话框。保存输入的数值,同时,关闭棋子值对话框。
*/
void __fastcall TPieceValueDlg::OKBtnClick(TObject *Sender)
{
if ( GetColorValue(Eassist) && GetColorValue(Ebishop)
&& GetColorValue(Eknight) && GetColorValue(Erook) &&
GetColorValue(Egunner) && GetColorValue(Epawn))
{
PieceValue[assist] = Values[pvassist] * 16;
PieceValue[bishop] = Values[pvbishop] * 16;
PieceValue[knight] = Values[pvknight] * 16;
PieceValue[rook] = Values[pvrook] * 16;
PieceValue[gunner] = Values[pvgunner] * 16;
PieceValue[pawn] = Values[pvpawn] * 16;
PieceValueDlg->Close();
}
}
//---------------------------------------------------------------------------
/*
棋子值对话框缺省按钮事件处理函数
输入缺省数值,并初始化每个编辑框中的缺省数值及滚动框的缺省位置。
*/
void __fastcall TPieceValueDlg::CmDefault(TObject *Sender)
{
memcpy(Values, DefaultValues, 6 * sizeof(int));
Eassist->Text = IntToStr(Values[pvassist]);
Ebishop->Text = IntToStr(Values[pvbishop]);
Eknight->Text = IntToStr(Values[pvknight]);
Erook->Text = IntToStr(Values[pvrook]);
Egunner->Text = IntToStr(Values[pvgunner]);
Epawn->Text = IntToStr(Values[pvpawn]);
Sassist->Position = Values[pvassist];
Sbishop->Position = Values[pvbishop];
Sknight->Position = Values[pvknight];
Srook->Position = Values[pvrook];
Sgunner->Position = Values[pvgunner];
Spawn->Position = Values[pvpawn];
}
//---------------------------------------------------------------------------
/*
棋子值对话框忽略按钮事件处理函数
关闭棋子值对话框。
*/
void __fastcall TPieceValueDlg::CancelBtnClick(TObject *Sender)
{
PieceValueDlg->Close();
}
//---------------------------------------------------------------------------
/*
棋子值对话框中的编辑框退出事件处理函数
若编辑框中的数值不在0-255之间的话,则出现错误对话框。若正确的话,
滚动框的位置随着编辑框中的数值改变而变化。
*/
void __fastcall TPieceValueDlg::EditExit(TObject *Sender)
{
if ( GetColorValue(Eassist) && GetColorValue(Ebishop)
&& GetColorValue(Eknight) && GetColorValue(Erook) &&
GetColorValue(Egunner) && GetColorValue(Epawn))
{
Sassist->Position = StrToInt(Eassist->Text);
Sbishop->Position = StrToInt(Ebishop->Text);
Sknight->Position = StrToInt(Eknight->Text);
Srook->Position = StrToInt(Erook->Text);
Sgunner->Position = StrToInt(Egunner->Text);
Spawn->Position = StrToInt(Epawn->Text);
}
}
//---------------------------------------------------------------------------
/*
棋子值对话框滚动事件处理函数
每个编辑框中的数值随着滚动框的位置改变而变化。
*/
void __fastcall TPieceValueDlg::ScrollBar_Change(TObject *Sender)
{
TEdit *Edit1 ;
TScrollBar *Sender1 = (TScrollBar *)Sender;
if (Sender1==Sassist)
{
Edit1 = Eassist;
Values[pvassist] = Sender1->Position;
}
else if (Sender1==Sbishop)
{
Edit1 = Ebishop;
Values[pvbishop] = Sender1->Position;
}
else if (Sender1==Sknight)
{
Edit1 = Eknight;
Values[pvknight] = Sender1->Position;
}
else if (Sender1==Srook)
{
Edit1 = Erook;
Values[pvrook] = Sender1->Position;
}
else if (Sender1==Sgunner)
{
Edit1 = Egunner;
Values[pvgunner] = Sender1->Position;
}
else if (Sender1==Spawn)
{
Edit1 = Epawn;
Values[pvpawn] = Sender1->Position;
}
Edit1->Text = IntToStr(Sender1->Position);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -