?? 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 + -