Files
winapp/SettingFormUnit.cpp
T
2026-06-12 22:37:02 +08:00

517 lines
17 KiB
C++

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "SettingFormUnit.h"
#include "GameUnit.h"
#include "GlobalUnit.h"
#include "UtilityUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TSettingForm *SettingForm = NULL;
//---------------------------------------------------------------------------
__fastcall TSettingForm::TSettingForm(TComponent* Owner)
: TForm(Owner)
{
//开始挂机
m_cbWaitNew->Checked = g_settings.bWaitNew;
m_cbInitClearTabLog->Checked = g_settings.bInitClearTabLog;
m_cbInitBetChipByStart->Checked = g_settings.bInitBetChipByStart;
m_cbInitTabProfitByStart->Checked = g_settings.bInitTabProfitByStart;
m_cbInitCurProfitByStart->Checked = g_settings.bInitCurProfitByStart;
//台桌新局
m_cbInitBetByGame->Checked = g_settings.bInitBetByGame;
m_cbInitChipByGame->Checked = g_settings.bInitChipByGame;
m_cbInitProfitByGame->Checked = g_settings.bInitProfitByGame;
m_cbInitLogByGame->Checked = g_settings.bInitLogByGame;
//模拟本金
m_aRelatedCB[0] = m_cbSimAcc;
m_aRelatedCtrl[0].push_back(m_edSimAcc);
m_aRelatedCtrl[0].push_back(m_cbNoBetLow);
m_aRelatedCtrl[0].push_back(m_cbStopLow);
m_aRelatedCtrl[0].push_back(m_cbSyncReal);
m_cbSimAcc->Checked = g_settings.bSimAccOn;
m_edSimAcc->Text = g_settings.fSimAcc;
m_cbNoBetLow->Checked = g_settings.bNoBetLow;
m_cbStopLow->Checked = g_settings.bStopLow;
m_cbSyncReal->Checked = g_settings.bSyncReal;
//总体止赢
m_aRelatedCB[1] = m_cbTotalStopWin;
m_aRelatedCtrl[1].push_back(m_edTotalStopWin);
m_aRelatedCtrl[1].push_back(m_edTotalWinPause);
m_aRelatedCtrl[1].push_back(m_rbTotalWin0);
m_aRelatedCtrl[1].push_back(m_rbTotalWin1);
m_aRelatedCtrl[1].push_back(m_rbTotalWin2);
m_aRelatedCtrl[1].push_back(m_lbTotalWin);
m_cbTotalStopWin->Checked = g_settings.bTotalStopWin;
m_edTotalStopWin->Text = g_settings.nTotalStopWin;
m_edTotalWinPause->Text = g_settings.nTotalWinPause;
m_aTotalWinRB[0] = m_rbTotalWin0;
m_aTotalWinRB[1] = m_rbTotalWin1;
m_aTotalWinRB[2] = m_rbTotalWin2;
m_aTotalWinRB[g_settings.iTotalWinOp]->Checked = true;
//总体止损
m_aRelatedCB[2] = m_cbTotalStopLos;
m_aRelatedCtrl[2].push_back(m_edTotalStopLos);
m_aRelatedCtrl[2].push_back(m_edTotalLosPause);
m_aRelatedCtrl[2].push_back(m_rbTotalLos0);
m_aRelatedCtrl[2].push_back(m_rbTotalLos1);
m_aRelatedCtrl[2].push_back(m_rbTotalLos2);
m_aRelatedCtrl[2].push_back(m_lbTotalLos);
m_cbTotalStopLos->Checked = g_settings.bTotalStopLos;
m_edTotalStopLos->Text = g_settings.nTotalStopLos;
m_edTotalLosPause->Text = g_settings.nTotalLosPause;
m_aTotalLosRB[0] = m_rbTotalLos0;
m_aTotalLosRB[1] = m_rbTotalLos1;
m_aTotalLosRB[2] = m_rbTotalLos2;
m_aTotalLosRB[g_settings.iTotalLosOp]->Checked = true;
//赢利回落
m_aRelatedCB[3] = m_cbU2DStop;
m_aRelatedCtrl[3].push_back(m_cbU2DPause);
m_aRelatedCtrl[3].push_back(m_cbU2DMinPeak);
m_aRelatedCtrl[3].push_back(m_edU2DStop);
m_aRelatedCtrl[3].push_back(m_edU2DPause);
m_aRelatedCtrl[3].push_back(m_edU2DMinPeak);
m_aRelatedCtrl[3].push_back(m_lbU2DStop);
m_aRelatedCtrl[3].push_back(m_lbU2DPause);
m_cbU2DStop->Checked = g_settings.bU2DStop;
m_cbU2DMinPeak->Checked = g_settings.bU2DMinPeak;
m_cbU2DPause->Checked = g_settings.bU2DPause;
m_edU2DStop->Text = g_settings.nU2DStop;
m_edU2DMinPeak->Text = g_settings.nU2DMinPeak;
m_edU2DPause->Text = g_settings.nU2DPause;
//账户止赢
m_aRelatedCB[4] = m_cbAccStopWin;
m_aRelatedCtrl[4].push_back(m_edAccStopWin);
m_aRelatedCtrl[4].push_back(m_lbAccStopWin);
m_cbAccStopWin->Checked = g_settings.bAccStopWin;
m_edAccStopWin->Text = g_settings.nAccStopWin;
//账户止损
m_aRelatedCB[5] = m_cbAccStopLos;
m_aRelatedCtrl[5].push_back(m_edAccStopLos);
m_aRelatedCtrl[5].push_back(m_lbAccStopLos);
m_cbAccStopLos->Checked = g_settings.bAccStopLos;
m_edAccStopLos->Text = g_settings.nAccStopLos;
//单桌止赢
m_aRelatedCB[6] = m_cbTableStopWin;
m_aRelatedCtrl[6].push_back(m_edTableStopWin);
m_aRelatedCtrl[6].push_back(m_edTableWinPause);
m_aRelatedCtrl[6].push_back(m_rbTableWin0);
m_aRelatedCtrl[6].push_back(m_rbTableWin1);
m_aRelatedCtrl[6].push_back(m_rbTableWin2);
m_aRelatedCtrl[6].push_back(m_lbTableWin);
m_cbTableStopWin->Checked = g_settings.bTableStopWin;
m_edTableStopWin->Text = g_settings.nTableStopWin;
m_edTableWinPause->Text = g_settings.nTableWinPause;
m_aTableWinRB[0] = m_rbTableWin0;
m_aTableWinRB[1] = m_rbTableWin1;
m_aTableWinRB[2] = m_rbTableWin2;
m_aTableWinRB[g_settings.iTableWinOp]->Checked = true;
//单桌止损
m_aRelatedCB[7] = m_cbTableStopLos;
m_aRelatedCtrl[7].push_back(m_edTableStopLos);
m_aRelatedCtrl[7].push_back(m_edTableLosPause);
m_aRelatedCtrl[7].push_back(m_rbTableLos0);
m_aRelatedCtrl[7].push_back(m_rbTableLos1);
m_aRelatedCtrl[7].push_back(m_rbTableLos2);
m_aRelatedCtrl[7].push_back(m_lbTableLos);
m_cbTableStopLos->Checked = g_settings.bTableStopLos;
m_edTableStopLos->Text = g_settings.nTableStopLos;
m_edTableLosPause->Text = g_settings.nTableLosPause;
m_aTableLosRB[0] = m_rbTableLos0;
m_aTableLosRB[1] = m_rbTableLos1;
m_aTableLosRB[2] = m_rbTableLos2;
m_aTableLosRB[g_settings.iTableLosOp]->Checked = true;
//模拟赢转实打
m_aRelatedCB[8] = m_cbS2RWin;
m_aRelatedCtrl[8].push_back(m_edS2RWin);
m_aRelatedCtrl[8].push_back(m_lbS2RWin);
m_cbS2RWin->Checked = g_settings.bS2RWin;
m_edS2RWin->Text = g_settings.nS2RWin;
//模拟输转实打
m_aRelatedCB[9] = m_cbS2RLos;
m_aRelatedCtrl[9].push_back(m_edS2RLos);
m_aRelatedCtrl[9].push_back(m_lbS2RLos);
m_cbS2RLos->Checked = g_settings.bS2RLos;
m_edS2RLos->Text = g_settings.nS2RLos;
//实打赢转模拟
m_aRelatedCB[10] = m_cbR2SWin;
m_aRelatedCtrl[10].push_back(m_edR2SWin);
m_aRelatedCtrl[10].push_back(m_lbR2SWin);
m_cbR2SWin->Checked = g_settings.bR2SWin;
m_edR2SWin->Text = g_settings.nR2SWin;
//实打输转模拟
m_aRelatedCB[11] = m_cbR2SLos;
m_aRelatedCtrl[11].push_back(m_edR2SLos);
m_aRelatedCtrl[11].push_back(m_lbR2SLos);
m_cbR2SLos->Checked = g_settings.bR2SLos;
m_edR2SLos->Text = g_settings.nR2SLos;
//游台
m_cbFloat->Hint = "勾选开启游台模式:每次只有一个台桌下注\n"
"开启游台时,至少勾选一种换台方式\n"
"只勾选一种换台方式,表示仅当该条件成立时才换台\n"
"若勾选了多种方式,则任意选中的条件成立时就换台";
m_aRelatedCB[12] = m_cbFloat;
m_aRelatedCtrl[12].push_back(m_cbFloatEach);
m_aRelatedCtrl[12].push_back(m_cbFloatShuffle);
m_aRelatedCtrl[12].push_back(m_cbFloatLos);
m_aRelatedCtrl[12].push_back(m_cbFloatWin);
m_aRelatedCtrl[12].push_back(m_cbFloatTie);
m_aFloatCB[0] = m_cbFloatEach;
m_aFloatCB[1] = m_cbFloatShuffle;
m_aFloatCB[2] = m_cbFloatLos;
m_aFloatCB[3] = m_cbFloatWin;
m_aFloatCB[4] = m_cbFloatTie;
if(g_settings.iFloatMode){
for(int i=0; i<5; i++){
m_aFloatCB[i]->Enabled = true;
m_aFloatCB[i]->OnClick = NULL;
m_aFloatCB[i]->Checked = g_settings.iFloatMode & (1<<i);
m_aFloatCB[i]->OnClick = OnFloatOpClick;
}
m_cbFloat->OnClick = NULL;
m_cbFloat->Checked = true;
m_cbFloat->OnClick = OnRelatedCBClick;
}
//牌局选项
m_aRelatedCB[13] = m_cbHoldBet;
m_aRelatedCtrl[13].push_back(m_edHoldBet);
m_aRelatedCtrl[13].push_back(m_lbHoldBet);
m_cbHoldBet->Checked = g_settings.bHoldBet;
m_edHoldBet->Text = g_settings.nHoldBet;
m_aRelatedCB[14] = m_cbHaltBet;
m_aRelatedCtrl[14].push_back(m_edHaltBet);
m_aRelatedCtrl[14].push_back(m_lbHaltBet);
m_cbHaltBet->Checked = g_settings.bHaltBet;
m_edHaltBet->Text = g_settings.nHaltBet;
m_cbBetsNoTie->Checked = g_settings.bBetsNoTie;
//页脚
m_cbStartShow->Checked = g_bShowSetting;
if(g_bGameOn){
m_btnOk->Enabled = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::OkClick(TObject *Sender)
{
g_settings.bWaitNew = m_cbWaitNew->Checked;
g_settings.bInitClearTabLog = m_cbInitClearTabLog->Checked;
g_settings.bInitBetChipByStart = m_cbInitBetChipByStart->Checked;
g_settings.bInitTabProfitByStart = m_cbInitTabProfitByStart->Checked;
g_settings.bInitCurProfitByStart = m_cbInitCurProfitByStart->Checked;
g_settings.bInitBetByGame = m_cbInitBetByGame->Checked;
g_settings.bInitChipByGame = m_cbInitChipByGame->Checked;
g_settings.bInitProfitByGame = m_cbInitProfitByGame->Checked;
g_settings.bInitLogByGame = m_cbInitLogByGame->Checked;
double fSimAcc = m_edSimAcc->Text.ToDouble();
if(m_cbSimAcc->Checked!=g_settings.bSimAccOn || fSimAcc!=g_settings.fSimAcc){
if(m_cbSimAcc->Checked && fSimAcc!=g_settings.fSimAcc){
g_settings.fSimAcc = fSimAcc;
PostMessage(Application->MainFormHandle, UM_CHART_UPDATE, 1, 1); //初始化图表
}
g_settings.bSimAccOn = m_cbSimAcc->Checked;
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_BALANCE, 1);
if(g_bTesting && m_cbSimAcc->Checked){
g_fBalance = fSimAcc;
PostMessage(Application->MainFormHandle, UM_CHART_UPDATE, 2, 1); //初始化图表
}
}
g_settings.bNoBetLow = m_cbNoBetLow->Checked;
g_settings.bStopLow = m_cbStopLow->Checked;
g_settings.bSyncReal = m_cbSyncReal->Checked;
g_settings.bTotalStopWin = m_cbTotalStopWin->Checked;
g_settings.bTotalStopLos = m_cbTotalStopLos->Checked;
g_settings.nTotalStopWin = m_edTotalStopWin->Text.ToInt();
g_settings.nTotalStopLos = m_edTotalStopLos->Text.ToInt();
g_settings.nTotalWinPause = m_edTotalWinPause->Text.ToInt();
g_settings.nTotalLosPause = m_edTotalLosPause->Text.ToInt();
for(int i=0; i<3; i++){
if(m_aTotalWinRB[i]->Checked){
g_settings.iTotalWinOp = i;
break;
}
}
for(int i=0; i<3; i++){
if(m_aTotalLosRB[i]->Checked){
g_settings.iTotalLosOp = i;
break;
}
}
g_settings.bTableStopWin = m_cbTableStopWin->Checked;
g_settings.bTableStopLos = m_cbTableStopLos->Checked;
g_settings.nTableStopWin = m_edTableStopWin->Text.ToInt();
g_settings.nTableStopLos = m_edTableStopLos->Text.ToInt();
g_settings.nTableWinPause = m_edTableWinPause->Text.ToInt();
g_settings.nTableLosPause = m_edTableLosPause->Text.ToInt();
for(int i=0; i<3; i++){
if(m_aTableWinRB[i]->Checked){
g_settings.iTableWinOp = i;
break;
}
}
for(int i=0; i<3; i++){
if(m_aTableLosRB[i]->Checked){
g_settings.iTableLosOp = i;
break;
}
}
g_settings.bU2DStop = m_cbU2DStop->Checked;
g_settings.bU2DPause = m_cbU2DPause->Checked;
g_settings.bU2DMinPeak = m_cbU2DMinPeak->Checked;
g_settings.nU2DStop = m_edU2DStop->Text.ToInt();
g_settings.nU2DPause = m_edU2DPause->Text.ToInt();
g_settings.nU2DMinPeak = m_edU2DMinPeak->Text.ToInt();
g_settings.bAccStopWin = m_cbAccStopWin->Checked;
g_settings.bAccStopLos = m_cbAccStopLos->Checked;
g_settings.nAccStopWin = m_edAccStopWin->Text.ToInt();
g_settings.nAccStopLos = m_edAccStopLos->Text.ToInt();
g_settings.bS2RWin = m_cbS2RWin->Checked;
g_settings.bS2RLos = m_cbS2RLos->Checked;
g_settings.bR2SWin = m_cbR2SWin->Checked;
g_settings.bR2SLos = m_cbR2SLos->Checked;
g_settings.nS2RWin = m_edS2RWin->Text.ToInt();
g_settings.nS2RLos = m_edS2RLos->Text.ToInt();
g_settings.nR2SWin = m_edR2SWin->Text.ToInt();
g_settings.nR2SLos = m_edR2SLos->Text.ToInt();
g_settings.bHoldBet = m_cbHoldBet->Checked;
g_settings.bHaltBet = m_cbHaltBet->Checked;
g_settings.nHoldBet = m_edHoldBet->Text.ToInt();
g_settings.nHaltBet = m_edHaltBet->Text.ToInt();
g_settings.iFloatMode = 0;
if(m_cbFloat->Checked){
for(int i=0; i<5; i++){
if(m_aFloatCB[i]->Checked)
g_settings.iFloatMode |= (1<<i);
}
}
g_settings.bBetsNoTie = m_cbBetsNoTie->Checked;
g_bShowSetting = m_cbStartShow->Checked;
ModalResult = mrOk;
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::TotalPauseExit(TObject *Sender)
{
TEdit* pE = (TEdit*)Sender;
int num = pE->Text.ToInt();
if(num<1 || num>30){
ShowMessage("请输入1-30的分钟数");
pE->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::PauseKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
if( Key==13 )
m_btnOk->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::TablePauseExit(TObject *Sender)
{
TEdit* pE = (TEdit*)Sender;
int num = pE->Text.ToInt();
if(num<0 || num>15){
ShowMessage("请输入0-15的分钟数");
pE->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::SimAccKeyPress(TObject *Sender, System::WideChar &Key)
{
if( Key>'9' || Key<'0' && Key!=0x8 && ( Key!='.' || ((TEdit*)Sender)->Text.Pos(".")))
Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::SimAccExit(TObject *Sender)
{
double fSimAcc;
if(!TryStrToFloat(m_edSimAcc->Text, fSimAcc) || fSimAcc<20 || fSimAcc>1000000){
ShowMessage("请输入 20-1000000 的模拟本金");
m_edSimAcc->Text = "10000";
m_edSimAcc->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::OnRelatedCBClick(TObject *Sender)
{
TCheckBox* pCB = (TCheckBox*)Sender;
int ind = pCB->Tag;
vector<TControl*>& vc = m_aRelatedCtrl[ind];
for(int i=0; i<vc.size(); i++)
vc[i]->Enabled = pCB->Checked;
if(pCB==m_cbFloat){ //单独处理游台
if(pCB->Checked){
m_aFloatCB[0]->OnClick = NULL;
m_aFloatCB[0]->Checked = true;
m_aFloatCB[0]->OnClick = OnFloatOpClick;
}
else{
for(int i=0; i<5; i++){
m_aFloatCB[i]->OnClick = NULL;
m_aFloatCB[i]->Checked = false;
m_aFloatCB[i]->OnClick = OnFloatOpClick;
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::OnFloatOpClick(TObject *Sender)
{
TCheckBox* pCB = (TCheckBox*)Sender;
if(!pCB->Checked){
bool bChk = false;
for(int i=0; i<5; i++){
if(m_aFloatCB[i]->Checked){
bChk = true;
break;
}
}
if(!bChk){
pCB->OnClick = NULL;
pCB->Checked = true;
pCB->OnClick = OnFloatOpClick;
ShowMessage("至少选择一种换台方式");
}
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::U2DPauseClick(TObject *Sender)
{
TCheckBox* pCB = (TCheckBox*)Sender;
m_lbU2DStop->Visible = !pCB->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::FormShow(TObject *Sender)
{
TPoint cPos = ScreenToClient(Mouse->CursorPos);
if(cPos.X>=0 && cPos.Y>=0 && cPos.X<=Width && cPos.Y<=Height){
m_bMouseOver = true;
MouseCapture = false;
}
else{
m_bMouseOver = false;
MouseCapture = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
if(Key==VK_ESCAPE)
ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(X < 0 || Y < 0 || X > Width || Y > Height)
ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
ResetIdle();
if(!m_bMouseOver && X>10 && X<Width-10 && Y>10 && Y<Height-10){
m_bMouseOver = true;
MouseCapture = false;
// DebugPrint("discaptured %d - %d", X, Y);
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::FormMouseEnter(TObject *Sender)
{
TPoint cPos = ScreenToClient(Mouse->CursorPos);
// DebugPrint("mouse enter %d - %d", cPos.X, cPos.Y);
if(cPos.X>=0 && cPos.Y>=0 && cPos.X<=Width && cPos.Y<=Height){
m_bMouseOver = true;
if(MouseCapture){
MouseCapture = false;
// DebugPrint("discaptured");
}
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::FormMouseLeave(TObject *Sender)
{
TPoint cPos = ScreenToClient(Mouse->CursorPos);
// DebugPrint("mouse leave %d - %d of %d - %d", cPos.X, cPos.Y);
if((cPos.X<=10 || cPos.Y<=10 || cPos.X>=Width-10 || cPos.Y>=Height-10)){
m_bMouseOver = false;
if(!MouseCapture){
MouseCapture = true;
// DebugPrint("captured");
}
}
}
//---------------------------------------------------------------------------
void __fastcall TSettingForm::WMKillFocus(TWMKillFocus &Message)
{
if(!m_bMouseOver)
ModalResult = mrCancel;
}
//---------------------------------------------------------------------------