Initial commit
This commit is contained in:
@@ -0,0 +1,115 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "ActCodeFormUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TActCodeForm *ActCodeForm = NULL;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TActCodeForm::TActCodeForm(TComponent* Owner, String code, int exp)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
m_sCode = code;
|
||||||
|
m_tExpire = exp;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TActCodeForm::FormCreate(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_leActCode->Text = m_sCode;
|
||||||
|
m_leActCode->OnChange = OnCodeChange;
|
||||||
|
|
||||||
|
if(m_sCode.Length()){
|
||||||
|
if(!m_tExpire)
|
||||||
|
m_lbTips->Caption = "授权验证失败,请重新验证";
|
||||||
|
else if(m_tExpire < time(NULL))
|
||||||
|
m_lbTips->Caption = "授权码已过期,请延期或更换";
|
||||||
|
else{
|
||||||
|
tm* dt = localtime((long*)&m_tExpire);
|
||||||
|
m_lbTips->Caption = Format(String("有效期至:%.4d-%.2d-%.2d %.2d:%.2d"),
|
||||||
|
ARRAYOFCONST((dt->tm_year+1900, dt->tm_mon+1, dt->tm_mday, dt->tm_hour, dt->tm_min)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_lbTips->Caption = "请输入授权码并验证";
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TActCodeForm::OnCodeChange(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_btnOk->Caption = "验证";
|
||||||
|
m_btnOk->Enabled = m_leActCode->Text.Length()>0;
|
||||||
|
|
||||||
|
if(m_tExpire>0){
|
||||||
|
m_tExpire = 0;
|
||||||
|
m_lbTips->Caption = "请输入授权码并验证";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TActCodeForm::OnCodeKeyPress(TObject *Sender, System::WideChar &Key)
|
||||||
|
{
|
||||||
|
if(Key==13)
|
||||||
|
OnOkClick(NULL);
|
||||||
|
else if(Key<0x1E)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if((Key>'9' || Key<'0') && (Key<'A' || Key>'F'))
|
||||||
|
Key = 0;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TActCodeForm::OnOkClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
if(m_btnOk->Caption=="关闭"){
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String code = m_leActCode->Text;
|
||||||
|
if(code.Length()<9 || code.Length()>10){
|
||||||
|
MessageBox(Handle, L"无效的授权码", L"验证", MB_ICONERROR | MB_OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=1; i<=code.Length(); i++){
|
||||||
|
char Key = code[i];
|
||||||
|
if((Key>'9' || Key<'0') && (Key<'A' || Key>'F')){
|
||||||
|
MessageBox(Handle, L"无效的授权码", L"验证", MB_ICONERROR | MB_OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_sCode = code;
|
||||||
|
Enabled = false;
|
||||||
|
Screen->Cursor = crHourGlass;
|
||||||
|
|
||||||
|
PostMessage(Application->MainFormHandle, UM_USERCONFIRM, UR_VERIFY, 0 );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TActCodeForm::UMUserConfirm(TMessage &msg)
|
||||||
|
{
|
||||||
|
Screen->Cursor = crDefault;
|
||||||
|
Enabled = true;
|
||||||
|
|
||||||
|
if(msg.WParam==102)
|
||||||
|
m_lbTips->Caption = "无效的授权码,请重新输入";
|
||||||
|
else if(msg.WParam==106)
|
||||||
|
m_lbTips->Caption = "该授权码正在其它设备上使用";
|
||||||
|
else if(msg.WParam>0)
|
||||||
|
m_lbTips->Caption = "授权验证异常,请稍后重试";
|
||||||
|
else{
|
||||||
|
m_tExpire = (int)msg.LParam;
|
||||||
|
|
||||||
|
if(m_tExpire < time(NULL))
|
||||||
|
m_lbTips->Caption = "授权码已过期,请延期或更换";
|
||||||
|
else{
|
||||||
|
tm* dt = localtime((long*)&m_tExpire);
|
||||||
|
m_lbTips->Caption = Format(String("有效期至:%.4d-%.2d-%.2d %.2d:%.2d"),
|
||||||
|
ARRAYOFCONST((dt->tm_year+1900, dt->tm_mon+1, dt->tm_mday, dt->tm_hour, dt->tm_min)));
|
||||||
|
m_btnOk->Caption = "关闭";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
object ActCodeForm: TActCodeForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderIcons = [biSystemMenu]
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = #25480#26435
|
||||||
|
ClientHeight = 126
|
||||||
|
ClientWidth = 299
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Position = poMainFormCenter
|
||||||
|
OnCreate = FormCreate
|
||||||
|
TextHeight = 15
|
||||||
|
object m_lbTips: TLabel
|
||||||
|
Left = 11
|
||||||
|
Top = 63
|
||||||
|
Width = 283
|
||||||
|
Height = 15
|
||||||
|
Alignment = taCenter
|
||||||
|
AutoSize = False
|
||||||
|
Caption = #35831#36755#20837#25480#26435#30721#24182#39564#35777
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clRed
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object m_leActCode: TLabeledEdit
|
||||||
|
Left = 96
|
||||||
|
Top = 27
|
||||||
|
Width = 153
|
||||||
|
Height = 23
|
||||||
|
AutoSize = False
|
||||||
|
EditLabel.Width = 45
|
||||||
|
EditLabel.Height = 23
|
||||||
|
EditLabel.Hint = #35831#36755#20837#25480#26435#30721
|
||||||
|
EditLabel.Caption = #25480#26435#30721' '
|
||||||
|
EditLabel.ParentShowHint = False
|
||||||
|
EditLabel.ShowAccelChar = False
|
||||||
|
EditLabel.ShowHint = False
|
||||||
|
LabelPosition = lpLeft
|
||||||
|
TabOrder = 0
|
||||||
|
Text = ''
|
||||||
|
OnKeyPress = OnCodeKeyPress
|
||||||
|
end
|
||||||
|
object m_btnOk: TButton
|
||||||
|
Left = 113
|
||||||
|
Top = 91
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = #39564#35777
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = OnOkClick
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef ActCodeFormUnitH
|
||||||
|
#define ActCodeFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Mask.hpp>
|
||||||
|
|
||||||
|
#define UR_VERIFY 0x00
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TActCodeForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TLabeledEdit *m_leActCode;
|
||||||
|
TButton *m_btnOk;
|
||||||
|
TLabel *m_lbTips;
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall OnCodeChange(TObject *Sender);
|
||||||
|
void __fastcall OnCodeKeyPress(TObject *Sender, System::WideChar &Key);
|
||||||
|
void __fastcall OnOkClick(TObject *Sender);
|
||||||
|
private: // User declarations
|
||||||
|
int m_tExpire;
|
||||||
|
|
||||||
|
MESSAGE void __fastcall UMUserConfirm(TMessage &msg);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(UM_USERCONFIRM, TMessage, UMUserConfirm)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
String m_sCode;
|
||||||
|
__fastcall TActCodeForm(TComponent* Owner, String code, int exp);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TActCodeForm *ActCodeForm;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
+352
@@ -0,0 +1,352 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <vcl.h>
|
||||||
|
#include <System.StrUtils.hpp>
|
||||||
|
#include <System.JSON.hpp>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "BacABThread.h"
|
||||||
|
#include "TableUnit.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
#include "HookJS.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TAutoBetThread
|
||||||
|
__fastcall TAutoBetThread::TAutoBetThread(int iG)
|
||||||
|
{
|
||||||
|
m_iGame = iG;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TAutoBetThread::Execute()
|
||||||
|
{
|
||||||
|
TGame *pGame = g_aGames.GetGame(m_iGame);
|
||||||
|
if(pGame){
|
||||||
|
for(int i=0; i<pGame->aManBets.size(); i++){ //优先处理手工下注
|
||||||
|
TManBet& rMB = pGame->aManBets[i];
|
||||||
|
if(rMB.state==ST_INIT){
|
||||||
|
rMB.state = ST_BETTING;
|
||||||
|
int ret = RealBet(pGame, rMB.chips);
|
||||||
|
if(!Terminated && ret!=0)
|
||||||
|
pGame->BetResp(ret, rMB.chips);
|
||||||
|
goto EXIT; //一个线程只处理一个下注
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pGame->iState==ST_BETSET){
|
||||||
|
pGame->iState = ST_BETTING;
|
||||||
|
if(pGame->nChip>0 && pGame->nChip<g_MinOnBet){
|
||||||
|
pGame->BetResp(10, NULL);
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
else if(pGame->nChip>g_MaxOnBet){
|
||||||
|
pGame->BetResp(11, NULL);
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tmMinDelay = pGame->timeout - (pGame->timeout>15 ? 12 : 9);
|
||||||
|
if( tmMinDelay>=0 ){
|
||||||
|
int tmMin = tmMinDelay >= 2 ? 2000 : tmMinDelay * 1000,
|
||||||
|
tmMax = (pGame->timeout - (pGame->timeout>15 ? 10 : 7))*1000,
|
||||||
|
tmHalt = tmMin + Random(tmMax - tmMin);
|
||||||
|
|
||||||
|
if( tmHalt>0 && !Halt(tmHalt) )
|
||||||
|
goto EXIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if( pGame->nChip>=0 && pGame->iState==ST_BETTING && pGame->CanBet() ){//再次确认下注状态
|
||||||
|
if(g_bSimulate){
|
||||||
|
pGame->bReal = false;
|
||||||
|
|
||||||
|
if(g_settings.bSimAccOn && g_settings.bNoBetLow && g_settings.fSimAcc < pGame->nChip)
|
||||||
|
pGame->BetResp(26, NULL);
|
||||||
|
else
|
||||||
|
pGame->BetResp(0, NULL);
|
||||||
|
}
|
||||||
|
else if(!g_bTesting && g_fBalance < pGame->nChip){
|
||||||
|
pGame->BetResp(26, NULL);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
pGame->bReal = true;
|
||||||
|
if(pGame->nChip==0){
|
||||||
|
pGame->BetResp(0, NULL);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int ret= RealBet(pGame, NULL);
|
||||||
|
if(!Terminated && ret!=0)
|
||||||
|
pGame->BetResp(ret, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EXIT:
|
||||||
|
if( !Terminated )
|
||||||
|
PostMessage( Application->MainFormHandle, UM_AUTOBETEND, 0, Handle );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
int __fastcall TAutoBetThread::RealBet(TGame* pG, int chips[])
|
||||||
|
{
|
||||||
|
_di_ICefFrame frame = GetCefFrame(MAIN_FRAME);
|
||||||
|
if( !frame ) return -1;
|
||||||
|
|
||||||
|
String strJS;
|
||||||
|
if( g_iPlatform==PF_PA ){
|
||||||
|
strJS = "{"
|
||||||
|
"if(VideoGameCore.LinkStoreFactory.instance){"
|
||||||
|
"const tab=VideoGameCore.LinkStoreFactory.instance.getBetTableStore('" + pG->vid + "');"
|
||||||
|
"if(tab && tab.betEnabled){";
|
||||||
|
// "console.log('======"+pG->vid+" is betEnable');";
|
||||||
|
if(chips){
|
||||||
|
for(int i=0; i<3; i++){
|
||||||
|
if(chips[i]>0){
|
||||||
|
strJS += "tab.addChipByPlayType(" + IntToStr(i+1) + "," + IntToStr(chips[i]) + ");";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
strJS += "tab.addChipByPlayType(" + IntToStr(pG->iBet) + "," + IntToStr(pG->nChip) + ");";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_bTesting){ //测试时模拟下注反馈
|
||||||
|
int chip[3] = {0};
|
||||||
|
if(chips)
|
||||||
|
memcpy(chip, chips, sizeof(chip));
|
||||||
|
else
|
||||||
|
chip[pG->iBet-1] = pG->nChip;
|
||||||
|
strJS += "tab.cancelBet();"
|
||||||
|
"setTimeout(function(){"
|
||||||
|
"const msg = '6|"+pG->vid+"|0|"+pG->gmcode;
|
||||||
|
for(int i=0; i<3; i++)
|
||||||
|
strJS += "|" + IntToStr(chip[i]);
|
||||||
|
strJS += "';"
|
||||||
|
"cefApp.OnJSMessage(msg);"
|
||||||
|
"},1000);";
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
strJS += "tab.confirmBet();";
|
||||||
|
}
|
||||||
|
|
||||||
|
strJS += "cefApp.ReturnJQValue('0');"
|
||||||
|
"}else if(!tab || tab.isGameMaintaining){"// VideoGameCore.isGameMaintain('"+pG->vid+"')){"
|
||||||
|
"cefApp.ReturnJQValue('2');";
|
||||||
|
if(g_bTesting)
|
||||||
|
strJS +=
|
||||||
|
"console.log('======"+pG->vid+" is maintaining');";
|
||||||
|
strJS +=
|
||||||
|
"}else{"
|
||||||
|
"const gms = tab.gameSnapshot ? tab.gameSnapshot.gmstatus : -1;"
|
||||||
|
"const sSkt = VideoGameCore.singleSocket;"
|
||||||
|
"const pSkt = VideoGameCore.PlazaSocket.instance;"
|
||||||
|
|
||||||
|
"cefApp.ReturnJQValue(gms>=2 && sSkt.connected ? '3' : '');";
|
||||||
|
if(g_bTesting)
|
||||||
|
strJS +=
|
||||||
|
"console.log('======"+pG->vid+" is not betEnable',"
|
||||||
|
"'gmstatus:', gms,"
|
||||||
|
"'sSkt:', sSkt.connected, sSkt.readyState,"
|
||||||
|
"'pSkt:', pSkt.connected, pSkt.readyState);";
|
||||||
|
strJS += "if(!sSkt.connected && sSkt.readyState>1){";
|
||||||
|
if(g_bTesting)
|
||||||
|
strJS += "console.log('singleSocket connect: ', sSkt.connected, sSkt.readyState);";
|
||||||
|
strJS += "sSkt.connect();"
|
||||||
|
"}"
|
||||||
|
"if(pSkt && !pSkt.connected && pSkt.readyState>1){";
|
||||||
|
if(g_bTesting)
|
||||||
|
strJS += "console.log('PlazaSocket connect: ', pSkt.connected, pSkt.readyState);";
|
||||||
|
strJS += "pSkt.connect();"
|
||||||
|
"}"
|
||||||
|
"}"
|
||||||
|
"}else{"
|
||||||
|
"cefApp.ReturnJQValue('');";
|
||||||
|
if(g_bTesting)
|
||||||
|
strJS +=
|
||||||
|
"console.log('======myGameLink closed');";
|
||||||
|
strJS +=
|
||||||
|
"}"
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
else if( g_iPlatform==PF_AB ){
|
||||||
|
strJS = "{"
|
||||||
|
"const tid = " + IntToStr(pG->iGame) + ";"
|
||||||
|
"const bts = [";
|
||||||
|
if(chips){
|
||||||
|
for(int i=0; i<3; i++){
|
||||||
|
if(chips[i]>0){
|
||||||
|
strJS += IntToStr(i+1001) + ",";// [1001|1002|1003];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
strJS += IntToStr(pG->iBet+1000); //[1001|1002|1003];
|
||||||
|
}
|
||||||
|
strJS += "];"
|
||||||
|
"const bas = [";
|
||||||
|
if(chips){
|
||||||
|
for(int i=0; i<3; i++){
|
||||||
|
if(chips[i]>0){
|
||||||
|
strJS += IntToStr(chips[i] * 100) + ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
strJS += IntToStr(pG->nChip * 100);
|
||||||
|
}
|
||||||
|
strJS += "];";
|
||||||
|
|
||||||
|
strJS += "const gh = Netbet.component.entity.gameHallDO.getInstance();"
|
||||||
|
"const td = gh ? gh.getTableDO(tid) : null;"
|
||||||
|
"const gst = td ? td.getCurGameStatusText(td.getGameRoundId()) : 'INVALID';"
|
||||||
|
"if(gst=='BETTING'){";
|
||||||
|
if(g_bTesting){ //测试时模拟下注反馈
|
||||||
|
int chip[3] = {0};
|
||||||
|
if(chips)
|
||||||
|
memcpy(chip, chips, sizeof(chip));
|
||||||
|
else
|
||||||
|
chip[pG->iBet-1] = pG->nChip;
|
||||||
|
strJS += "setTimeout(function(){"
|
||||||
|
"const msg = '6|" + IntToStr(pG->iGame) + "|0|" + pG->gmcode;
|
||||||
|
for(int i=0; i<3; i++)
|
||||||
|
strJS += "|" + IntToStr(chip[i]);
|
||||||
|
strJS += "';"
|
||||||
|
// "console.log(msg);"
|
||||||
|
"cefApp.OnJSMessage(msg);"
|
||||||
|
"},1000);";
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
strJS += "multiTableBet(tid, bts, bas);";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
strJS += "cefApp.ReturnJQValue('0');"
|
||||||
|
"}else{";
|
||||||
|
if(g_bTesting)
|
||||||
|
strJS +=
|
||||||
|
"console.log('==="+IntToStr(pG->iGame)+"==="+pG->vid+" status is '+gst);";
|
||||||
|
strJS +=
|
||||||
|
"cefApp.ReturnJQValue(gst=='NO_USE_STATUS'? '2' : '');"
|
||||||
|
"};"
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
else if( g_iPlatform==PF_DB ){
|
||||||
|
strJS =
|
||||||
|
"(async function(){"
|
||||||
|
"const multi = App.PresenterManager.presenterDic.dict.MultiplayPresenter;"
|
||||||
|
"if(multi && multi.model){"
|
||||||
|
"const g = multi.model.getGameTalbeInfo("+ IntToStr(pG->iGame) + ");"
|
||||||
|
"if(g){"
|
||||||
|
"if(g.gameStatus!=2){"
|
||||||
|
"cefApp.ReturnJQValue(3);"
|
||||||
|
"return;"
|
||||||
|
"}"
|
||||||
|
|
||||||
|
"let res = 0;";
|
||||||
|
|
||||||
|
if(!g_bTesting){// || g_fBalance>0){ //单独测试pushChip
|
||||||
|
if(chips){
|
||||||
|
for(int i=0; i<3; i++){
|
||||||
|
if(chips[i]>0){
|
||||||
|
strJS +=
|
||||||
|
"if(!res){"
|
||||||
|
"res = await pushChip(" + IntToStr(pG->iGame) + ","
|
||||||
|
+ IntToStr(i+1) + "," + IntToStr(chips[i]) + ");"
|
||||||
|
// "console.log('pushChip result:', res);"
|
||||||
|
"if(res){"
|
||||||
|
"cancelBet(" + IntToStr(pG->iGame) + ");"
|
||||||
|
"cefApp.ReturnJQValue(res);"
|
||||||
|
"return;"
|
||||||
|
"}"
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
strJS +=
|
||||||
|
"res = await pushChip(" + IntToStr(pG->iGame) + ","
|
||||||
|
+ IntToStr(pG->iBet) + "," + IntToStr(pG->nChip) + ");"
|
||||||
|
// "console.log('pushChip:', res);"
|
||||||
|
"if(res){"
|
||||||
|
"cefApp.ReturnJQValue(res);"
|
||||||
|
"return;"
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_bTesting){ //测试时模拟下注反馈
|
||||||
|
int chip[3] = {0};
|
||||||
|
if(chips)
|
||||||
|
memcpy(chip, chips, sizeof(chip));
|
||||||
|
else
|
||||||
|
chip[pG->iBet-1] = pG->nChip;
|
||||||
|
|
||||||
|
strJS +=//"cancelBet(" + IntToStr(pG->iGame) + ");"
|
||||||
|
"setTimeout(function(){"
|
||||||
|
"const msg = '6|" + IntToStr(pG->iGame) + "|0|" + pG->gmcode;
|
||||||
|
for(int i=0; i<3; i++)
|
||||||
|
strJS += "|" + IntToStr(chip[i]);
|
||||||
|
strJS += "';"
|
||||||
|
"cefApp.OnJSMessage(msg);"
|
||||||
|
"},1000);";
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
strJS +="sureBet(" + IntToStr(pG->iGame) + ");";
|
||||||
|
}
|
||||||
|
|
||||||
|
strJS += "cefApp.ReturnJQValue('0');"
|
||||||
|
"return;"
|
||||||
|
"}"
|
||||||
|
"}"
|
||||||
|
"cefApp.ReturnJQValue('');" //非正常状态返回
|
||||||
|
"})()";
|
||||||
|
}
|
||||||
|
|
||||||
|
// DebugPrint(((AnsiString)strJS).c_str());
|
||||||
|
|
||||||
|
int ret = -1;
|
||||||
|
while( !Terminated && pG->timeout>1 ){
|
||||||
|
String sMsg;
|
||||||
|
TStringList* strlst = GetJQValue( strJS, frame );
|
||||||
|
if( strlst ){
|
||||||
|
if(strlst->Count==1)
|
||||||
|
sMsg = (*strlst)[0];
|
||||||
|
|
||||||
|
delete strlst;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sMsg.Length()>0)
|
||||||
|
TryStrToInt(sMsg, ret);
|
||||||
|
else
|
||||||
|
DebugPrint("GetJQValue return: %s", strlst ? "''" : "null");
|
||||||
|
|
||||||
|
if( ret>=0 || !Halt(1000) ) //得到结果 或 用户cancel中途退出
|
||||||
|
break;
|
||||||
|
|
||||||
|
if(chips==NULL && g_bSimulate){ //改变了模式
|
||||||
|
if(g_settings.bSimAccOn && g_settings.bNoBetLow && g_settings.fSimAcc < pG->nChip){
|
||||||
|
pG->BetResp(26, NULL);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
pG->bReal = false;
|
||||||
|
pG->BetResp(0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if( !Terminated && ret<0 )
|
||||||
|
DebugPrint("%s 下注超时", ((AnsiString)pG->vid).c_str());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret<0 ? 25 : ret;
|
||||||
|
}
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef BacABThreadH
|
||||||
|
#define BacABThreadH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include "BaseThread.h"
|
||||||
|
#include "GameUnit.h"
|
||||||
|
using namespace std;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class TAutoBetThread : public TBaseThread
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int m_iGame;
|
||||||
|
int m_iOp; //0=bet, 1=gameon
|
||||||
|
|
||||||
|
int __fastcall RealBet(TGame* pG, int chips[]);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void __fastcall Execute();
|
||||||
|
|
||||||
|
public:
|
||||||
|
__fastcall TAutoBetThread(int iG);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
+495
@@ -0,0 +1,495 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <vcl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "BacDPThread.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
#include "TableUnit.h"
|
||||||
|
//#include "ActiveFormUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
|
||||||
|
//软件过期时间
|
||||||
|
#define TM_ABORT 125000
|
||||||
|
void __fastcall WriteData( char* msg )
|
||||||
|
{
|
||||||
|
SYSTEMTIME st;
|
||||||
|
GetLocalTime(&st);
|
||||||
|
|
||||||
|
char szDataFile[256];
|
||||||
|
sprintf( szDataFile, "%s/data/%04d%02d%02d.txt", g_AppPath, st.wYear, st.wMonth, st.wDay);
|
||||||
|
|
||||||
|
// FILE* fp = NULL;
|
||||||
|
// if(!FileExists(szDataFile)){
|
||||||
|
// fp = fopen(szDataFile, "w");
|
||||||
|
// if(fp)
|
||||||
|
// fprintf( fp, "时间,台桌,手数,结果\n" );
|
||||||
|
// }
|
||||||
|
// else{
|
||||||
|
// fp = fopen(szDataFile, "a");
|
||||||
|
// }
|
||||||
|
FILE* fp = fopen(szDataFile, "r+");
|
||||||
|
if(!fp){
|
||||||
|
fp = fopen(szDataFile, "w");
|
||||||
|
if(fp)
|
||||||
|
fprintf( fp, "时间,台桌,手数,结果\n" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fseek(fp, 0, SEEK_END);
|
||||||
|
|
||||||
|
if( fp ){
|
||||||
|
fprintf( fp, "%02d:%02d:%02d,%s\n", st.wHour, st.wMinute, st.wSecond, msg );
|
||||||
|
fclose( fp );
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
g_bBacData = false;
|
||||||
|
ShowMessage("导出数据失败! errno=" + IntToStr((int)GetLastError()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TBetWayThread
|
||||||
|
__fastcall TDataParseThread::TDataParseThread()
|
||||||
|
{
|
||||||
|
m_hDataEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
|
||||||
|
|
||||||
|
// m_tmGST = 0;
|
||||||
|
// m_tmExpire = GetCompileTime() + 30 * 86400; //编译时间后30天过期
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
__fastcall TDataParseThread::~TDataParseThread()
|
||||||
|
{
|
||||||
|
CloseHandle( m_hDataEvent );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TDataParseThread::Reset()
|
||||||
|
{
|
||||||
|
WaitForSingleObject(m_hDataEvent, 5000);
|
||||||
|
m_aData.clear();
|
||||||
|
SetEvent(m_hDataEvent);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TDataParseThread::ParseData(String sData)
|
||||||
|
{
|
||||||
|
WaitForSingleObject(m_hDataEvent, 5000);
|
||||||
|
m_aData.push_back(sData);
|
||||||
|
SetEvent(m_hDataEvent);
|
||||||
|
|
||||||
|
Suspended = false;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TDataParseThread::Execute()
|
||||||
|
{
|
||||||
|
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED); //关闭系统休眠
|
||||||
|
|
||||||
|
while( !Terminated ){
|
||||||
|
while(m_aData.size()>0){
|
||||||
|
String sData = m_aData[0];
|
||||||
|
// if(sData.Length()<3){
|
||||||
|
// WaitForSingleObject(m_hDataEvent, 5000);
|
||||||
|
// m_aData.erase(m_aData.begin());
|
||||||
|
// SetEvent(m_hDataEvent);
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// DebugPrint(((AnsiString)sData).c_str());
|
||||||
|
|
||||||
|
TStringDynArray arr = SplitString( sData, "|" );
|
||||||
|
if(arr.Length<2){
|
||||||
|
WaitForSingleObject(m_hDataEvent, 5000);
|
||||||
|
m_aData.erase(m_aData.begin());
|
||||||
|
SetEvent(m_hDataEvent);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int iType = arr[0].ToInt();
|
||||||
|
if( iType==0 ){ //连接异常断开
|
||||||
|
DebugPrint("连接异常断开");
|
||||||
|
int reason = arr[1].ToInt();
|
||||||
|
PostMessage( Application->MainFormHandle, UM_WEBDEAD, reason, 0 );
|
||||||
|
}
|
||||||
|
else if( iType==1 ){ //初始化所有台桌
|
||||||
|
DebugPrint("!!! init all tables");
|
||||||
|
g_aGames.Init(arr[1]);
|
||||||
|
PostMessage( Application->MainFormHandle, UM_ADDTABLE, 0, 0 );
|
||||||
|
}
|
||||||
|
else if( iType==2 ){ //台桌Roadmap
|
||||||
|
if(!g_aGames.empty() && arr[1].Length()){
|
||||||
|
int iG = Vid2Gid(arr[1]);
|
||||||
|
TGame* pGame = NULL;
|
||||||
|
int ind = g_aGames.FindGame(iG, pGame);
|
||||||
|
|
||||||
|
if(!pGame && iG>0){
|
||||||
|
pGame = g_aGames.NewGame(iG, arr[g_iPlatform==PF_PA ? 1 : 2], ind);
|
||||||
|
PostMessage( Application->MainFormHandle, UM_ADDTABLE, ind, (long)pGame );
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pGame){
|
||||||
|
int oldSize = pGame->aRes.size(),
|
||||||
|
newSize = arr[3].Length();
|
||||||
|
|
||||||
|
if(oldSize!=newSize && oldSize!=newSize+1){
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(newSize && oldSize && (oldSize>newSize || oldSize<newSize-1)){
|
||||||
|
char res[128];
|
||||||
|
for(int i=0; i<oldSize; i++){
|
||||||
|
res[i] = pGame->aRes[i] + '0';
|
||||||
|
}
|
||||||
|
res[oldSize] = 0;
|
||||||
|
|
||||||
|
DebugPrint("!!! %s road size %d -> %d with map: %s -> %s",
|
||||||
|
((AnsiString)pGame->vid).c_str(),
|
||||||
|
// ((AnsiString)arr[1]).c_str(),
|
||||||
|
oldSize, newSize, res,
|
||||||
|
((AnsiString)arr[3]).c_str());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(g_bGameOn && pGame->bRun)
|
||||||
|
pGame->AutoBetOff();
|
||||||
|
|
||||||
|
if(newSize==oldSize+1){
|
||||||
|
int wt = arr[3][newSize]-'0';
|
||||||
|
if(wt==0) wt = 3;
|
||||||
|
|
||||||
|
pGame->aRes.push_back(wt);
|
||||||
|
pGame->winCount[wt-1]++;
|
||||||
|
pGame->BuildRoadmap(wt);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
pGame->ClearResults();
|
||||||
|
|
||||||
|
for(int i=1; i<=newSize; i++){
|
||||||
|
int wt = arr[3][i]-'0';
|
||||||
|
if(wt==0) wt = 3;
|
||||||
|
|
||||||
|
pGame->aRes.push_back(wt);
|
||||||
|
pGame->winCount[wt-1]++;
|
||||||
|
pGame->BuildRoadmap(wt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool bUpdateRoad = true;
|
||||||
|
if(pGame->gmstatus==12){ //维护台桌
|
||||||
|
if(oldSize && !newSize) //新局
|
||||||
|
pGame->AutoBetOn(); //台桌维护中无法正常处理shuffle状态,调用该接口显示和处理新局
|
||||||
|
}
|
||||||
|
else{ //正常台桌
|
||||||
|
pGame->gmstatus = 0; //设置结算状态,避免重复计算
|
||||||
|
// pGame->gmcode = "";
|
||||||
|
|
||||||
|
if(oldSize<newSize){
|
||||||
|
pGame->HandleResult(oldSize+1==newSize ? 0 : 1); //0=正常处理 1=异常处理
|
||||||
|
bUpdateRoad = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bUpdateRoad && pGame->hTable)
|
||||||
|
PostMessage(pGame->hTable, UM_TAB_UPDATE, UPDATE_ROAD, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( iType==3 ){ //台桌状态
|
||||||
|
// 3 | vid | gmcode | wintype(timeout)
|
||||||
|
if(!g_aGames.empty() && arr.Length>=4){
|
||||||
|
int iG = Vid2Gid(arr[1]);
|
||||||
|
TGame* pGame = NULL;
|
||||||
|
int ind = g_aGames.FindGame(iG, pGame);
|
||||||
|
|
||||||
|
if(!pGame && iG>0){
|
||||||
|
pGame = g_aGames.NewGame(iG, arr[g_iPlatform==PF_PA ? 1 : 2], ind);
|
||||||
|
PostMessage( Application->MainFormHandle, UM_ADDTABLE, ind, (long)pGame );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( pGame ){
|
||||||
|
String gmcode = arr[3];
|
||||||
|
int status = arr[4].ToInt();
|
||||||
|
bool bNewStatus = pGame->gmstatus != status,
|
||||||
|
bNewCode = pGame->gmcode != gmcode;
|
||||||
|
|
||||||
|
if(!bNewCode && bNewStatus || bNewCode && (g_iPlatform!=PF_PA
|
||||||
|
|| gmcode=="" || gmcode > pGame->gmcode)){
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if( bNewCode && status!=1 && status<11 && (g_iPlatform!=PF_AB || status!=0) && pGame->gmcode.Length()){
|
||||||
|
DebugPrint("!!! %s gmcode %s -> %s with status: %d",
|
||||||
|
((AnsiString)pGame->vid).c_str(),
|
||||||
|
// ((AnsiString)arr[1]).c_str(),
|
||||||
|
((AnsiString)pGame->gmcode).c_str(),
|
||||||
|
((AnsiString)gmcode).c_str(),
|
||||||
|
status);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if(bNewCode)
|
||||||
|
pGame->gmcode = gmcode;
|
||||||
|
|
||||||
|
// pGame->timeout = 0;
|
||||||
|
|
||||||
|
if(bNewStatus && pGame->gmstatus==1){
|
||||||
|
pGame->ManualBetOff();
|
||||||
|
|
||||||
|
if(g_bGameOn && pGame->bRun)
|
||||||
|
pGame->AutoBetOff();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(status==0 && !bNewCode){ //结算
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(pGame->gmstatus!=2 && (g_iPlatform!=PF_AB || pGame->gmstatus!=11))
|
||||||
|
DebugPrint("!!! %s status %d -> %d",
|
||||||
|
((AnsiString)pGame->vid).c_str(),
|
||||||
|
// ((AnsiString)arr[1]).c_str(),
|
||||||
|
pGame->gmstatus, status);
|
||||||
|
#endif
|
||||||
|
pGame->gmstatus = status;
|
||||||
|
|
||||||
|
if(arr.Length>=8){ //DB特殊处理
|
||||||
|
if(arr[6].Length()){
|
||||||
|
pGame->bcard = UnifyCard(arr[6]);
|
||||||
|
pGame->pcard = UnifyCard(arr[7]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pGame->bcard = pGame->pcard = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
int wt = 0;
|
||||||
|
if(arr.Length>=6 && arr[5].Length()){
|
||||||
|
wt = arr[5][1]-'0';
|
||||||
|
if(wt==0) wt = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(wt>0){
|
||||||
|
pGame->aRes.push_back(wt);
|
||||||
|
pGame->winCount[wt-1]++;
|
||||||
|
pGame->BuildRoadmap(wt);
|
||||||
|
pGame->HandleResult();
|
||||||
|
|
||||||
|
if(g_bBacData){
|
||||||
|
char data[128];
|
||||||
|
sprintf(data, "%s,%d,%s",
|
||||||
|
((AnsiString)arr[g_iPlatform==PF_PA ? 1 : 2]).c_str(),
|
||||||
|
pGame->aRes.size(), wt==1 ? "庄" : wt==2 ? "闲" : "和");
|
||||||
|
WriteData( data );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(status==1 && bNewStatus){// && pGame->gmstatus!=2){ //开始下注
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(pGame->gmstatus!=0 && pGame->gmstatus<11)
|
||||||
|
DebugPrint("!!! %s status %d -> %d",
|
||||||
|
((AnsiString)pGame->vid).c_str(),
|
||||||
|
// ((AnsiString)arr[1]).c_str(),
|
||||||
|
pGame->gmstatus, status);
|
||||||
|
#endif
|
||||||
|
if(bNewStatus && bNewCode && pGame->iState==ST_BETTED){
|
||||||
|
DebugPrint("!!! %s status %d -> %d with betted",
|
||||||
|
((AnsiString)pGame->vid).c_str(),
|
||||||
|
// ((AnsiString)arr[1]).c_str(),
|
||||||
|
pGame->gmstatus, status);
|
||||||
|
pGame->HandleResult(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
pGame->gmstatus = status;
|
||||||
|
|
||||||
|
pGame->timeout = g_iPlatform==PF_AB ? pGame->countdown
|
||||||
|
: g_iPlatform==PF_DB ? arr[5].ToInt() / 1000
|
||||||
|
: arr[5].ToInt();
|
||||||
|
pGame->AutoBetOn();
|
||||||
|
}
|
||||||
|
else if(status==2 && !bNewCode){// && pGame->gmstatus==1 ){ //开牌中
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(pGame->gmstatus!=1)
|
||||||
|
DebugPrint("!!! %s status %d -> %d",
|
||||||
|
((AnsiString)pGame->vid).c_str(),
|
||||||
|
// ((AnsiString)arr[1]).c_str(),
|
||||||
|
pGame->gmstatus, status);
|
||||||
|
#endif
|
||||||
|
pGame->gmstatus = status;
|
||||||
|
|
||||||
|
if(pGame->iState==ST_BETTED)
|
||||||
|
pGame->timeout = -1; //开始计算超时
|
||||||
|
|
||||||
|
pGame->bcard = pGame->pcard = "";
|
||||||
|
}
|
||||||
|
else if((status==11 || status==12) && bNewStatus){ //洗牌/维护
|
||||||
|
if(pGame->iState==ST_BETTED || pGame->iState==ST_EXPIRED){ //超时
|
||||||
|
DebugPrint("!!! %s status %d -> %d with betted",
|
||||||
|
((AnsiString)pGame->vid).c_str(),
|
||||||
|
// ((AnsiString)arr[1]).c_str(),
|
||||||
|
pGame->gmstatus, status);
|
||||||
|
|
||||||
|
pGame->HandleResult(status==12 ? 3 : 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
pGame->gmstatus = status;
|
||||||
|
|
||||||
|
if(status==11){
|
||||||
|
pGame->Shuffle();
|
||||||
|
|
||||||
|
if(g_bBacData){
|
||||||
|
char data[128];
|
||||||
|
sprintf(data, "%s,,%s",
|
||||||
|
((AnsiString)arr[g_iPlatform==PF_PA ? 1 : 2]).c_str(),
|
||||||
|
"洗牌");
|
||||||
|
WriteData( data );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
pGame->iState = ST_INIT;
|
||||||
|
#ifdef _DEBUG
|
||||||
|
DebugPrint("!!! %s 台桌维护中", ((AnsiString)pGame->vid).c_str());//, ((AnsiString)arr[1]).c_str());
|
||||||
|
SendMessage( Application->MainFormHandle, UM_RESTORE, 0, 0 );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pGame->hTable)
|
||||||
|
PostMessage(pGame->hTable, UM_TAB_UPDATE, UPDATE_STATUS, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(iType==4){ //多台状态
|
||||||
|
//4 | e.payload.vid
|
||||||
|
DebugPrint("Enter HALL: %s", ((AnsiString)arr[1]).c_str());
|
||||||
|
|
||||||
|
int tab = 2;
|
||||||
|
|
||||||
|
if(g_iPlatform==PF_PA){
|
||||||
|
tab = arr[1]=="LINK" ? 1 : arr[1]=="LOBB" ? 0 : 2;
|
||||||
|
}
|
||||||
|
else if(g_iPlatform==PF_AB){
|
||||||
|
int hId = arr[1].ToInt();
|
||||||
|
tab = hId==102 ? 1 : hId==100 ? 0 : 2;
|
||||||
|
}
|
||||||
|
else if(g_iPlatform==PF_DB){
|
||||||
|
int hId = arr[1].ToInt();
|
||||||
|
tab = hId==2 ? 1 : hId==0 ? 0 : 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
PostMessage(Application->MainFormHandle, UM_ENTER_TABLE, tab, 0);
|
||||||
|
}
|
||||||
|
else if(iType==5){ //账户余额
|
||||||
|
//5 | e.val
|
||||||
|
double amo;
|
||||||
|
if(TryStrToFloat(arr[1], amo)){
|
||||||
|
if(!(g_bTesting && g_settings.bSimAccOn)){
|
||||||
|
g_fBalance = amo;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_BALANCE, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(iType==6){ //下注反馈
|
||||||
|
//6 | vid | retCode | gmcode | 庄 | 闲 | 平
|
||||||
|
if(!g_aGames.empty() && arr[1].Length()){
|
||||||
|
int iG = Vid2Gid(arr[1]);
|
||||||
|
TGame* pGame = NULL;
|
||||||
|
int ind = g_aGames.FindGame(iG, pGame);
|
||||||
|
|
||||||
|
if(pGame && pGame->gmcode==arr[3]){
|
||||||
|
int chips[3] = {0};
|
||||||
|
chips[0] = arr[4].ToInt();
|
||||||
|
chips[1] = arr[5].ToInt();
|
||||||
|
chips[2] = arr[6].ToInt();
|
||||||
|
|
||||||
|
int retCode = arr[2].ToInt();
|
||||||
|
|
||||||
|
if(retCode!=0){
|
||||||
|
if(g_iPlatform==PF_AB) //欧博错误码转换
|
||||||
|
retCode = retCode==101 ? 10 //限红低
|
||||||
|
: retCode==102 ? 11 //限红高
|
||||||
|
: retCode==103 || retCode==100015 || retCode==6044 ? 25 //超时
|
||||||
|
: retCode==10101 || retCode==6035 || retCode==6042 ? 26 //余额不足
|
||||||
|
: -1;
|
||||||
|
else if(g_iPlatform==PF_DB) //多宝错误码转换
|
||||||
|
retCode = retCode==210010 ? 10 //限红低
|
||||||
|
: retCode==220030 ? 11 //限红高
|
||||||
|
: retCode==220004 || retCode==220006 || retCode==110041 ? 25 //超时
|
||||||
|
: retCode==10469 || retCode==20126 ? 26 //余额不足
|
||||||
|
: retCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
pGame->BetResp(retCode, chips);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(iType==7){ //限额
|
||||||
|
//7 | min | max
|
||||||
|
int minBet, maxBet;
|
||||||
|
if(TryStrToInt(arr[1], minBet) && TryStrToInt(arr[2], maxBet)){
|
||||||
|
if(minBet!=g_MinOnBet || maxBet!=g_MaxOnBet){
|
||||||
|
g_MinOnBet = minBet;
|
||||||
|
g_MaxOnBet = maxBet;
|
||||||
|
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_LIMIT, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(iType==8){ //倒计时
|
||||||
|
//8 | countdownList ABG专用
|
||||||
|
if(!g_aGames.empty() && arr[1].Length()){
|
||||||
|
g_aGames.SetCountDown(arr[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(iType==9){ //翻牌
|
||||||
|
//9 | gid | gmcode | bcard | pcard
|
||||||
|
if(!g_aGames.empty() && !arr[1].IsEmpty() && (!arr[3].IsEmpty() || !arr[4].IsEmpty())){
|
||||||
|
int iG = Vid2Gid(arr[1]);
|
||||||
|
TGame* pGame = NULL;
|
||||||
|
int ind = g_aGames.FindGame(iG, pGame);
|
||||||
|
|
||||||
|
if(pGame && pGame->gmstatus==2 && pGame->gmcode==arr[2]){
|
||||||
|
pGame->bcard = UnifyCard(arr[3]);
|
||||||
|
pGame->pcard = UnifyCard(arr[4]);
|
||||||
|
|
||||||
|
if(pGame->hTable)
|
||||||
|
PostMessage(pGame->hTable, UM_TAB_UPDATE, UPDATE_STATUS, 0);
|
||||||
|
|
||||||
|
if(pGame->iState==ST_BETTED)
|
||||||
|
pGame->timeout = -1; //重新计算超时
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else if(iType==10){ //撤销注单
|
||||||
|
// //10 | gid | gmcode
|
||||||
|
// if(!g_aGames.empty() && arr[1].Length()){
|
||||||
|
// int iG = Vid2Gid(arr[1]);
|
||||||
|
// TGame* pGame = NULL;
|
||||||
|
// int ind = g_aGames.FindGame(iG, pGame);
|
||||||
|
//
|
||||||
|
// if(pGame && pGame->gmcode==arr[2]){
|
||||||
|
// DebugPrint("!!! %s 撤销注单 with status: %d",
|
||||||
|
// ((AnsiString)pGame->vid).c_str(),
|
||||||
|
//// ((AnsiString)arr[1]).c_str(),
|
||||||
|
// pGame->gmstatus);
|
||||||
|
// pGame->gmstatus = 0;
|
||||||
|
// pGame->HandleResult(3);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
m_aData[0] = "";
|
||||||
|
|
||||||
|
if( Terminated )
|
||||||
|
break;
|
||||||
|
|
||||||
|
WaitForSingleObject(m_hDataEvent, 5000);
|
||||||
|
m_aData.erase(m_aData.begin());
|
||||||
|
SetEvent(m_hDataEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 等待数据
|
||||||
|
if( !Terminated )
|
||||||
|
Suspended = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
SetThreadExecutionState( ES_CONTINUOUS );//打开系统休眠
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#ifndef BacDPThreadH
|
||||||
|
#define BacDPThreadH
|
||||||
|
|
||||||
|
//#include <System.JSON.hpp>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "BaseThread.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class TDataParseThread : public TBaseThread
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
HANDLE m_hDataEvent; // Êý¾Ý´¦Àí»¥³â±äÁ¿
|
||||||
|
vector<String> m_aData;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void __fastcall Execute();
|
||||||
|
|
||||||
|
public:
|
||||||
|
__fastcall TDataParseThread();
|
||||||
|
__fastcall ~TDataParseThread();
|
||||||
|
|
||||||
|
void __fastcall ParseData(String sData);
|
||||||
|
void __fastcall Reset();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
+162
@@ -0,0 +1,162 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "BacJSThread.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "GameUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// TAutoBetThread
|
||||||
|
|
||||||
|
__fastcall TJSHandleThread::TJSHandleThread(int iOp)
|
||||||
|
{
|
||||||
|
m_op = iOp;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TJSHandleThread::Execute()
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if( m_op==JS_OP_CHECKCEF )
|
||||||
|
ret = CheckCEF();
|
||||||
|
// else if( m_op==JS_OP_GETIPADDR )
|
||||||
|
// ret = GetIPAddr();
|
||||||
|
else if( m_op>=JS_OP_WSHANDLE0 && m_op<=JS_OP_WSHANDLE3 )
|
||||||
|
ret = GetWSHandle();
|
||||||
|
else if( m_op==JS_OP_GAMEON )
|
||||||
|
ret = GameOn();
|
||||||
|
|
||||||
|
if( !Terminated )
|
||||||
|
PostMessage( Application->MainFormHandle, UM_JSHANDLED, m_op, ret );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int __fastcall TJSHandleThread::CheckCEF()
|
||||||
|
{
|
||||||
|
int iRet = -1;
|
||||||
|
|
||||||
|
for( int i=0; i<10; i++ ){
|
||||||
|
if( GlobalCEFApp && GlobalCEFApp->GlobalContextInitialized ){
|
||||||
|
iRet = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !Halt(500) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iRet;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int __fastcall TJSHandleThread::GetWSHandle()
|
||||||
|
{
|
||||||
|
int iRet = -1;
|
||||||
|
|
||||||
|
_di_ICefFrame frame = GetCefFrame(MAIN_FRAME);
|
||||||
|
if( frame ){
|
||||||
|
String sQuery;
|
||||||
|
if( g_iPlatform==PF_PA ){
|
||||||
|
sQuery = "{"
|
||||||
|
"let iRet = -1;"
|
||||||
|
"if(Core.LoginStore.instance && VideoGameCore.PlazaSocket.instance){"
|
||||||
|
"if(Core.LoginStore.instance.loginDone)"
|
||||||
|
"iRet = VideoGameCore.PlazaSocket.instance.readyState;"
|
||||||
|
"else "
|
||||||
|
"iRet = -3;"
|
||||||
|
"}"
|
||||||
|
"if(!iRet) iRet = -1;"
|
||||||
|
"cefApp.ReturnJQValue(iRet);"
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
else if( g_iPlatform==PF_AB ){
|
||||||
|
sQuery = "{"
|
||||||
|
"let iRet = -1;"
|
||||||
|
"if(Netbet && Netbet.component && Netbet.component.entity"
|
||||||
|
"&& Netbet.component.entity.manager && Netbet.component.entity.manager.ServiceManager){"
|
||||||
|
"const instSM = Netbet.component.entity.manager.ServiceManager.getInstance();"
|
||||||
|
"if(instSM && instSM.isConnected()){"
|
||||||
|
"const instUD = Netbet.component.entity.UserDO.getInstance();"
|
||||||
|
"if(instUD && instUD.getLoginSuccessTime()) iRet = 1;"
|
||||||
|
"else console.log('not login');"
|
||||||
|
"}"
|
||||||
|
"else console.log('not connect to Server');"
|
||||||
|
"}"
|
||||||
|
"else console.log(!Netbet ? 'no Netbet' : !Netbet.component ? 'no component'"
|
||||||
|
": !Netbet.component.entity ? 'no entity'"
|
||||||
|
": !Netbet.component.entity.manager ? 'no manager' : 'no service');"
|
||||||
|
|
||||||
|
"cefApp.ReturnJQValue(iRet);"
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
else if( g_iPlatform==PF_DB ){
|
||||||
|
sQuery = "{"
|
||||||
|
"let iRet = -1;"
|
||||||
|
"if(typeof App!='undefined' && App.Socket){"
|
||||||
|
"const status = App.Socket.status;"
|
||||||
|
"console.log('App.Socket.status=', status);"
|
||||||
|
|
||||||
|
"if(status==2 && App.user && App.gameManager && App.setting) "
|
||||||
|
"iRet = 1;"
|
||||||
|
"else if(status==3){"
|
||||||
|
"const reason = App.Socket._reConnectReason;"
|
||||||
|
"console.log('App.Socket._reConnectReason=', reason);"
|
||||||
|
|
||||||
|
"iRet = 3;"
|
||||||
|
|
||||||
|
"}"
|
||||||
|
"};"
|
||||||
|
"cefApp.ReturnJQValue(iRet);"
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int i=0; i<60 && !Terminated; i++ ){
|
||||||
|
DebugPrint( "Try to steal websocket data step %d", m_op );
|
||||||
|
String sRet;
|
||||||
|
|
||||||
|
TStringList* strlst = GetJQValue( sQuery, frame );
|
||||||
|
if( strlst ){
|
||||||
|
if(strlst->Count==1)
|
||||||
|
sRet = (*strlst)[0];
|
||||||
|
delete strlst;
|
||||||
|
}
|
||||||
|
|
||||||
|
DebugPrint("GetJQValue return: %s", strlst ? "sRet" : "null");
|
||||||
|
if(!sRet.IsEmpty() )
|
||||||
|
TryStrToInt(sRet, iRet);
|
||||||
|
|
||||||
|
if( iRet>0 || !Halt(g_iPlatform==PF_AB ? 800 : 500) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(iRet==3) iRet = -3;
|
||||||
|
|
||||||
|
return iRet;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int __fastcall TJSHandleThread::GameOn()
|
||||||
|
{
|
||||||
|
if( !Halt(100) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for( int i=0; i<g_aGames.size() && !Terminated && g_bGameOn; i++ ){
|
||||||
|
TGame* pG = g_aGames[i];
|
||||||
|
if(pG->bRun){
|
||||||
|
pG->GameOn();
|
||||||
|
|
||||||
|
if( !Halt(10) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef BacJSThreadH
|
||||||
|
#define BacJSThreadH
|
||||||
|
|
||||||
|
#include "BaseThread.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// Êý¾Ý´¦ÀíÏß³Ì
|
||||||
|
|
||||||
|
#define JS_OP_CHECKCEF 0
|
||||||
|
#define JS_OP_WSHANDLE0 1
|
||||||
|
#define JS_OP_WSHANDLE1 2
|
||||||
|
#define JS_OP_WSHANDLE2 3
|
||||||
|
#define JS_OP_WSHANDLE3 4
|
||||||
|
#define JS_OP_GAMEON 5
|
||||||
|
|
||||||
|
//#define JS_OP_TOMULTI 3
|
||||||
|
|
||||||
|
class TJSHandleThread : public TBaseThread
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int __fastcall CheckCEF();
|
||||||
|
int __fastcall GetWSHandle();
|
||||||
|
int __fastcall GameOn();
|
||||||
|
|
||||||
|
public:
|
||||||
|
int m_op;
|
||||||
|
String m_sRet;
|
||||||
|
|
||||||
|
__fastcall TJSHandleThread(int iOp);
|
||||||
|
// __fastcall ~TJSHandleThread();
|
||||||
|
|
||||||
|
void __fastcall Execute();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "Bet02FrameUnit.h"
|
||||||
|
#include "PolicyUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TBet02Frame *Bet02Frame = NULL;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TBet02Frame::TBet02Frame(TComponent* Owner)
|
||||||
|
: TFrame(Owner)
|
||||||
|
{
|
||||||
|
m_rgs[0] = m_rgB3R;
|
||||||
|
m_rgs[1] = m_rgP3R;
|
||||||
|
|
||||||
|
for(int i=0; i<2; i++)
|
||||||
|
m_rgs[i]->ItemIndex = g_BPAskBet.bet[i];
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
object Bet02Frame: TBet02Frame
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 384
|
||||||
|
Height = 310
|
||||||
|
TabOrder = 0
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 40
|
||||||
|
Top = 24
|
||||||
|
Width = 117
|
||||||
|
Height = 15
|
||||||
|
Caption = #20869#32622#25171#27861#65306#24196#38386#38382#36335
|
||||||
|
end
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 55
|
||||||
|
Top = 92
|
||||||
|
Width = 96
|
||||||
|
Height = 20
|
||||||
|
Caption = #24196#38382#36335#20840#32418#65306
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clRed
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 55
|
||||||
|
Top = 144
|
||||||
|
Width = 96
|
||||||
|
Height = 20
|
||||||
|
Caption = #38386#38382#36335#20840#32418#65306
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clRed
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object m_rgB3R: TRadioGroup
|
||||||
|
Left = 151
|
||||||
|
Top = 74
|
||||||
|
Width = 210
|
||||||
|
Height = 40
|
||||||
|
Columns = 3
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Items.Strings = (
|
||||||
|
#19981#25171
|
||||||
|
#25171#24196
|
||||||
|
#25171#38386)
|
||||||
|
ParentFont = False
|
||||||
|
ShowFrame = False
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object m_rgP3R: TRadioGroup
|
||||||
|
Tag = 1
|
||||||
|
Left = 151
|
||||||
|
Top = 126
|
||||||
|
Width = 210
|
||||||
|
Height = 40
|
||||||
|
Columns = 3
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Items.Strings = (
|
||||||
|
#19981#25171
|
||||||
|
#25171#24196
|
||||||
|
#25171#38386)
|
||||||
|
ParentFont = False
|
||||||
|
ShowFrame = False
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef Bet02FrameUnitH
|
||||||
|
#define Bet02FrameUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TBet02Frame : public TFrame
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TLabel *Label1;
|
||||||
|
TLabel *Label2;
|
||||||
|
TLabel *Label3;
|
||||||
|
TRadioGroup *m_rgB3R;
|
||||||
|
TRadioGroup *m_rgP3R;
|
||||||
|
private: // User declarations
|
||||||
|
public: // User declarations
|
||||||
|
TRadioGroup *m_rgs[2];
|
||||||
|
__fastcall TBet02Frame(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TBet02Frame *Bet02Frame;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "Bet03FrameUnit.h"
|
||||||
|
#include "PolicyUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TBet03Frame *Bet03Frame = NULL;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TBet03Frame::TBet03Frame(TComponent* Owner)
|
||||||
|
: TFrame(Owner)
|
||||||
|
{
|
||||||
|
m_leBlP->Text = g_BPDiffBet.diff[0];
|
||||||
|
m_lePlB->Text = g_BPDiffBet.diff[1];
|
||||||
|
|
||||||
|
// m_rgBlP->ItemIndex = g_BPDiffBet.bet[0] - 1;
|
||||||
|
// m_rgPlB->ItemIndex = g_BPDiffBet.bet[1] - 1;
|
||||||
|
m_edBlP->Text = g_BPDiffBet.bets[0];
|
||||||
|
m_edPlB->Text = g_BPDiffBet.bets[1];
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBet03Frame::DiffEditExit(TObject *Sender)
|
||||||
|
{
|
||||||
|
TEdit* pE = (TEdit*)Sender;
|
||||||
|
|
||||||
|
int num = 0;
|
||||||
|
if(!TryStrToInt(pE->Text, num) || num<=0 || num>=30 ){
|
||||||
|
ShowMessage("请输入 1 - 30 之间的差值");
|
||||||
|
pE->Text = "5";
|
||||||
|
pE->SetFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBet03Frame::BetEditKeyPress(TObject *Sender, System::WideChar &Key)
|
||||||
|
{
|
||||||
|
if(Key<0x1E)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(Key!='a' && Key!='s' && Key!='d' && Key!='x' && Key!='z')
|
||||||
|
Key = 0;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBet03Frame::BetEditExit(TObject *Sender)
|
||||||
|
{
|
||||||
|
TEdit* pE = (TEdit*)Sender;
|
||||||
|
String txt = pE->Text;
|
||||||
|
if(txt.Length()==0 || txt.Length()>15){
|
||||||
|
ShowMessage("请输入 1 - 15 个下注项");
|
||||||
|
pE->Text = pE==m_edBlP ? g_BPDiffBet.bets[0] : g_BPDiffBet.bets[1];
|
||||||
|
pE->SetFocus();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
for(int i=1; i<=txt.Length(); i++){
|
||||||
|
char Key = txt[i];
|
||||||
|
if(Key!='a' && Key!='s' && Key!='d' && Key!='x' && Key!='z'){
|
||||||
|
ShowMessage("请按说明输入合法下注项");
|
||||||
|
pE->SetFocus();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
object Bet03Frame: TBet03Frame
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 384
|
||||||
|
Height = 310
|
||||||
|
TabOrder = 0
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 40
|
||||||
|
Top = 24
|
||||||
|
Width = 104
|
||||||
|
Height = 15
|
||||||
|
Caption = #20869#32622#25171#27861#65306#24196#38386#24046
|
||||||
|
end
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 152
|
||||||
|
Top = 91
|
||||||
|
Width = 101
|
||||||
|
Height = 20
|
||||||
|
AutoSize = False
|
||||||
|
Caption = #20010#21450#20197#19978#19979#27880
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clRed
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 152
|
||||||
|
Top = 155
|
||||||
|
Width = 101
|
||||||
|
Height = 20
|
||||||
|
AutoSize = False
|
||||||
|
Caption = #20010#21450#20197#19978#19979#27880
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clBlue
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
end
|
||||||
|
object m_leBlP: TLabeledEdit
|
||||||
|
Left = 109
|
||||||
|
Top = 88
|
||||||
|
Width = 39
|
||||||
|
Height = 28
|
||||||
|
Hint = '1 - 30 '#20043#38388#30340#24046#20540
|
||||||
|
Alignment = taCenter
|
||||||
|
EditLabel.Width = 64
|
||||||
|
EditLabel.Height = 28
|
||||||
|
EditLabel.Caption = #24196#27604#38386#22810
|
||||||
|
EditLabel.Font.Charset = DEFAULT_CHARSET
|
||||||
|
EditLabel.Font.Color = clRed
|
||||||
|
EditLabel.Font.Height = -15
|
||||||
|
EditLabel.Font.Name = 'Segoe UI'
|
||||||
|
EditLabel.Font.Style = []
|
||||||
|
EditLabel.ParentFont = False
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clRed
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
LabelPosition = lpLeft
|
||||||
|
MaxLength = 2
|
||||||
|
NumbersOnly = True
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 0
|
||||||
|
Text = '5'
|
||||||
|
OnExit = DiffEditExit
|
||||||
|
end
|
||||||
|
object m_lePlB: TLabeledEdit
|
||||||
|
Left = 109
|
||||||
|
Top = 152
|
||||||
|
Width = 39
|
||||||
|
Height = 28
|
||||||
|
Hint = '1 - 30 '#20043#38388#30340#24046#20540
|
||||||
|
Alignment = taCenter
|
||||||
|
EditLabel.Width = 64
|
||||||
|
EditLabel.Height = 28
|
||||||
|
EditLabel.Caption = #38386#27604#24196#22810
|
||||||
|
EditLabel.Font.Charset = DEFAULT_CHARSET
|
||||||
|
EditLabel.Font.Color = clBlue
|
||||||
|
EditLabel.Font.Height = -15
|
||||||
|
EditLabel.Font.Name = 'Segoe UI'
|
||||||
|
EditLabel.Font.Style = []
|
||||||
|
EditLabel.ParentFont = False
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clBlue
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
LabelPosition = lpLeft
|
||||||
|
MaxLength = 2
|
||||||
|
NumbersOnly = True
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 1
|
||||||
|
Text = '5'
|
||||||
|
OnExit = DiffEditExit
|
||||||
|
end
|
||||||
|
object m_edBlP: TEdit
|
||||||
|
Left = 257
|
||||||
|
Top = 88
|
||||||
|
Width = 88
|
||||||
|
Height = 28
|
||||||
|
Hint = #28165#36755#20837'1-15'#20010#19979#27880#39033
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 2
|
||||||
|
Text = 'a'
|
||||||
|
OnExit = BetEditExit
|
||||||
|
OnKeyPress = BetEditKeyPress
|
||||||
|
end
|
||||||
|
object m_edPlB: TEdit
|
||||||
|
Left = 257
|
||||||
|
Top = 152
|
||||||
|
Width = 88
|
||||||
|
Height = 28
|
||||||
|
Hint = #28165#36755#20837'1-15'#20010#19979#27880#39033
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 3
|
||||||
|
Text = 's'
|
||||||
|
OnExit = BetEditExit
|
||||||
|
OnKeyPress = BetEditKeyPress
|
||||||
|
end
|
||||||
|
object StaticText1: TStaticText
|
||||||
|
Left = 46
|
||||||
|
Top = 223
|
||||||
|
Width = 238
|
||||||
|
Height = 19
|
||||||
|
Caption = #35828#26126#65306#19979#27880#39033#20026#19968#20010#25110#22810#20010#20197#19979#26377#25928#23383#27597
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 4
|
||||||
|
end
|
||||||
|
object StaticText2: TStaticText
|
||||||
|
Left = 46
|
||||||
|
Top = 249
|
||||||
|
Width = 299
|
||||||
|
Height = 19
|
||||||
|
Caption = #65288' a='#24196#65292's='#38386#65292'd='#21644#65292'x='#26412#25163#19981#19979#65292'z='#26412#23616#32467#26463' '#65289
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 5
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef Bet03FrameUnitH
|
||||||
|
#define Bet03FrameUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Mask.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TBet03Frame : public TFrame
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TLabel *Label1;
|
||||||
|
TLabeledEdit *m_leBlP;
|
||||||
|
TLabel *Label2;
|
||||||
|
TLabeledEdit *m_lePlB;
|
||||||
|
TLabel *Label3;
|
||||||
|
TEdit *m_edBlP;
|
||||||
|
TEdit *m_edPlB;
|
||||||
|
TStaticText *StaticText1;
|
||||||
|
TStaticText *StaticText2;
|
||||||
|
void __fastcall DiffEditExit(TObject *Sender);
|
||||||
|
void __fastcall BetEditKeyPress(TObject *Sender, System::WideChar &Key);
|
||||||
|
void __fastcall BetEditExit(TObject *Sender);
|
||||||
|
private: // User declarations
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TBet03Frame(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TBet03Frame *Bet03Frame;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,447 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#include <DateUtils.hpp>
|
||||||
|
#include "BetLogFormUnit.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TBetLogForm *BetLogForm = NULL;
|
||||||
|
|
||||||
|
vector<TBetLog*> g_aBetLogs; //挂机日志
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TBetLogForm::TBetLogForm(TComponent* Owner)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
m_nShowRows = 0;
|
||||||
|
m_bAutoScroll = true;
|
||||||
|
m_bSearch = false;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::FormCreate(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_dg->ColWidths[0] = DPIX(120);
|
||||||
|
m_dg->ColWidths[1] = m_dg->ClientWidth - m_dg->ColWidths[0];
|
||||||
|
|
||||||
|
m_dg->Canvas->Font = m_dg->Font;
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////
|
||||||
|
// test
|
||||||
|
// int ts = DateTimeToUnix(Now(), false);
|
||||||
|
// for(int i=0; i<200; i++){
|
||||||
|
// TBetLog* pLog = new TBetLog;
|
||||||
|
// pLog->ts = ts++;
|
||||||
|
// pLog->ev = LOGEVT_START;
|
||||||
|
// g_aBetLogs.push_back(pLog);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::FormResize(TObject *Sender)
|
||||||
|
{
|
||||||
|
int nRows = m_dg->ClientHeight / m_dg->DefaultRowHeight;
|
||||||
|
|
||||||
|
if(nRows!=m_nShowRows){
|
||||||
|
m_nShowRows = nRows;
|
||||||
|
|
||||||
|
m_bAutoScroll = (m_dg->TopRow + m_nShowRows) >= m_dg->RowCount;
|
||||||
|
ShowLogs();
|
||||||
|
}
|
||||||
|
|
||||||
|
int nBlank = m_dg->ClientHeight % m_dg->DefaultRowHeight;
|
||||||
|
if(nBlank)
|
||||||
|
ClientHeight -= nBlank;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
||||||
|
{
|
||||||
|
ResetIdle();
|
||||||
|
|
||||||
|
if(m_sbSearch->Focused()){
|
||||||
|
if(Key=='A' && Shift.Contains( ssCtrl )){
|
||||||
|
SearchSelAll();
|
||||||
|
}
|
||||||
|
else if(Key==VK_ESCAPE){
|
||||||
|
m_dg->SetFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(m_dg->ScrollBars==ssVertical){
|
||||||
|
if(Key==VK_UP){
|
||||||
|
m_dg->Perform(WM_VSCROLL,SB_LINEUP,0);
|
||||||
|
}
|
||||||
|
else if(Key==VK_DOWN){
|
||||||
|
m_dg->Perform(WM_VSCROLL,SB_LINEDOWN,0);
|
||||||
|
}
|
||||||
|
else if(Key==VK_HOME){
|
||||||
|
m_dg->Perform(WM_VSCROLL,SB_TOP,0);
|
||||||
|
}
|
||||||
|
else if(Key==VK_END){
|
||||||
|
m_dg->Perform(WM_VSCROLL,SB_BOTTOM,0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::ShowLogs()
|
||||||
|
{
|
||||||
|
LockWindowUpdate( m_dg->Handle );
|
||||||
|
|
||||||
|
vector<TBetLog*>& aLogs = m_bSearch ? m_aSearchLogs : g_aBetLogs;
|
||||||
|
|
||||||
|
if( aLogs.size()+1 < m_nShowRows ){
|
||||||
|
if(m_dg->RowCount!=m_nShowRows){
|
||||||
|
m_dg->RowCount = m_nShowRows;
|
||||||
|
m_dg->ScrollBars = ssNone;
|
||||||
|
|
||||||
|
m_bAutoScroll = true;
|
||||||
|
|
||||||
|
if(m_dg->TopRow>0){
|
||||||
|
m_dg->OnTopLeftChanged = NULL;
|
||||||
|
m_dg->TopRow = 0;
|
||||||
|
m_dg->OnTopLeftChanged = LogsTopChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_dg->Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_dg->RowCount = aLogs.size() + 1;
|
||||||
|
if(m_dg->ScrollBars==ssNone)
|
||||||
|
m_dg->ScrollBars = ssVertical;
|
||||||
|
|
||||||
|
if(m_bAutoScroll){
|
||||||
|
m_dg->OnTopLeftChanged = NULL;
|
||||||
|
m_dg->TopRow = m_dg->RowCount - m_nShowRows;
|
||||||
|
m_dg->OnTopLeftChanged = LogsTopChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LockWindowUpdate( NULL );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::FormClose(TObject *Sender, TCloseAction &Action)
|
||||||
|
{
|
||||||
|
BetLogForm->Hide();
|
||||||
|
delete BetLogForm;
|
||||||
|
BetLogForm = NULL;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::LogsMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled)
|
||||||
|
{
|
||||||
|
m_dg->Perform(WM_VSCROLL,SB_LINEDOWN,0);
|
||||||
|
Handled = true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::LogsMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled)
|
||||||
|
{
|
||||||
|
m_dg->Perform(WM_VSCROLL,SB_LINEUP,0);
|
||||||
|
Handled = true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::UMLogUpdate(TMessage &msg)
|
||||||
|
{
|
||||||
|
if(m_bSearch){
|
||||||
|
String sT = m_sSearch.UpperCase();
|
||||||
|
for(int i=m_iSearchEnd; i<g_aBetLogs.size(); i++){
|
||||||
|
TBetLog* pLog = g_aBetLogs[i];
|
||||||
|
|
||||||
|
String txt = GetLogText(pLog, 0xFF);
|
||||||
|
if(txt.Pos(sT)>0)
|
||||||
|
m_aSearchLogs.push_back(pLog);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_iSearchEnd = g_aBetLogs.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowLogs();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::ClearClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_sbSearch->Text = "";
|
||||||
|
m_sbSearch->Modified = false;
|
||||||
|
m_aSearchLogs.clear();
|
||||||
|
m_bSearch = false;
|
||||||
|
|
||||||
|
for(int i=0; i<g_aBetLogs.size(); i++)
|
||||||
|
delete g_aBetLogs[i];
|
||||||
|
g_aBetLogs.clear();
|
||||||
|
|
||||||
|
ShowLogs();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::SaveClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
TSaveDialog *pDlg = new TSaveDialog(this);
|
||||||
|
pDlg->Filter = "文本文件(*.txt)|*.txt;";
|
||||||
|
|
||||||
|
if(pDlg->Execute(Application->MainFormHandle)){
|
||||||
|
try{
|
||||||
|
String name = pDlg->FileName;
|
||||||
|
if(ExtractFileExt(name)!='.txt')
|
||||||
|
name = ChangeFileExt(name, ".txt");
|
||||||
|
|
||||||
|
FILE* fp = fopen( ((AnsiString)name).c_str(), "w" );
|
||||||
|
if(fp){
|
||||||
|
vector<TBetLog*>& aLogs = m_bSearch ? m_aSearchLogs : g_aBetLogs;
|
||||||
|
for(int i=0; i<aLogs.size(); i++){
|
||||||
|
TBetLog* pLog = aLogs[i];
|
||||||
|
String txt = GetLogText(pLog, 0xFF);
|
||||||
|
fprintf(fp, "%s\n", ((AnsiString)txt).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageBox(Application->MainFormHandle, L"文件保存成功", L"保存",
|
||||||
|
MB_ICONINFORMATION | MB_OK);
|
||||||
|
}
|
||||||
|
catch(Exception &exception){
|
||||||
|
String str = "文件保存失败!\n"+exception.Message;
|
||||||
|
MessageBox(Application->MainFormHandle, str.c_str(), L"保存",
|
||||||
|
MB_ICONERROR | MB_OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete pDlg;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
String __fastcall TBetLogForm::GetLogText(TBetLog* pLog, int iCol)
|
||||||
|
{
|
||||||
|
String txt;
|
||||||
|
if(pLog){
|
||||||
|
if(iCol==0 || iCol==0xFF){
|
||||||
|
TDateTime dt = UnixToDateTime(pLog->ts,false);
|
||||||
|
txt = dt.FormatString("mm-dd hh:nn:ss ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(iCol==1 || iCol==0xFF){
|
||||||
|
txt += pLog->tno;
|
||||||
|
|
||||||
|
if(pLog->ev==LOGEVT_START){
|
||||||
|
txt += "开始挂机 ";
|
||||||
|
txt += g_bSimulate ? "模拟" : "实打";
|
||||||
|
|
||||||
|
if(g_settings.bWaitNew)
|
||||||
|
txt += " 新局";
|
||||||
|
if(g_settings.bInitBetChipByStart)
|
||||||
|
txt += " 重置";
|
||||||
|
if(g_settings.iFloatMode>0)
|
||||||
|
txt += " 游台";
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_END){
|
||||||
|
if(pLog->op==1)
|
||||||
|
txt += "总体止赢 ";
|
||||||
|
else if(pLog->op==2)
|
||||||
|
txt += "总体止损 ";
|
||||||
|
else if(pLog->op==3)
|
||||||
|
txt += "本金不足 ";
|
||||||
|
else if(pLog->op==4)
|
||||||
|
txt += "游台爆缆 ";
|
||||||
|
else if(pLog->op==5)
|
||||||
|
txt += "账户止赢 ";
|
||||||
|
else if(pLog->op==6)
|
||||||
|
txt += "账户止损 ";
|
||||||
|
else if(pLog->op==7)
|
||||||
|
txt += "动态止损 ";
|
||||||
|
else if(pLog->op==8)
|
||||||
|
txt += "总体阶梯爆缆 ";
|
||||||
|
|
||||||
|
if(pLog->op==4 || pLog->op==8)
|
||||||
|
txt += "台桌停止";
|
||||||
|
else
|
||||||
|
txt += "停止挂机";
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_RESET){
|
||||||
|
if(pLog->op==-1){
|
||||||
|
txt += "恢复";
|
||||||
|
}
|
||||||
|
else if(pLog->op==0){
|
||||||
|
txt += "重置当期赢利";
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(pLog->op==1)
|
||||||
|
txt += "总体止赢 ";
|
||||||
|
else if(pLog->op==2)
|
||||||
|
txt += "总体止损 ";
|
||||||
|
else if(pLog->op==7)
|
||||||
|
txt += "动态止损 ";
|
||||||
|
|
||||||
|
if(pLog->num)
|
||||||
|
txt += "新局重启";
|
||||||
|
else{
|
||||||
|
int nPause = pLog->op==7 ? g_settings.nU2DPause
|
||||||
|
: pLog->op==1 ? g_settings.nTotalWinPause
|
||||||
|
: g_settings.nTotalLosPause;
|
||||||
|
txt += "暂停" + IntToStr(nPause) + "分钟";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_ROUND){
|
||||||
|
txt += " 新局 ";
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_BET){
|
||||||
|
if(pLog->op==0)
|
||||||
|
txt += " 本手不下";
|
||||||
|
else if(pLog->op==4)
|
||||||
|
txt += " 本局停止";
|
||||||
|
else{
|
||||||
|
txt += " 下注 ";
|
||||||
|
txt += pLog->op==1 ? "庄 " : pLog->op==2 ? "闲 " : "和 ";
|
||||||
|
txt += IntToStr(pLog->num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_RES){
|
||||||
|
txt += " 结算 ";
|
||||||
|
txt += pLog->op==1 ? "赢 " : pLog->op==2 ? "输 " : "和 ";
|
||||||
|
txt += IntToStr(pLog->num);
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_DEAD || pLog->ev==LOGEVT_STOPWIN || pLog->ev==LOGEVT_STOPLOS){
|
||||||
|
if(pLog->ev==LOGEVT_DEAD)
|
||||||
|
txt += " 爆缆 ";
|
||||||
|
else if(pLog->ev==LOGEVT_STOPWIN)
|
||||||
|
txt += " 止赢 ";
|
||||||
|
else
|
||||||
|
txt += " 止损 ";
|
||||||
|
|
||||||
|
if(pLog->op==2){
|
||||||
|
if(pLog->num)
|
||||||
|
txt += "暂停" + IntToStr(pLog->num) + "分钟";
|
||||||
|
else
|
||||||
|
txt += "立即重启";
|
||||||
|
}
|
||||||
|
else if(pLog->op==1)
|
||||||
|
txt += "新局重启";
|
||||||
|
else
|
||||||
|
txt += "本桌停止";
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_SWITCH){
|
||||||
|
if(pLog->op)
|
||||||
|
txt += "实打转模拟";
|
||||||
|
else
|
||||||
|
txt += "模拟转实打";
|
||||||
|
}
|
||||||
|
else if(pLog->ev==LOGEVT_QUASH){
|
||||||
|
txt += " 注单撤销";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return txt;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::LogsDrawCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, TRect &Rect, TGridDrawState State)
|
||||||
|
{
|
||||||
|
m_dg->Canvas->Brush-> Color = Graphics::clNone;
|
||||||
|
m_dg->Canvas->FillRect(Rect);
|
||||||
|
|
||||||
|
vector<TBetLog*>& aLogs = m_bSearch ? m_aSearchLogs : g_aBetLogs;
|
||||||
|
|
||||||
|
if(ARow<aLogs.size()){
|
||||||
|
TBetLog* pLog = aLogs[ARow];
|
||||||
|
|
||||||
|
TColor clr = pLog->ev==LOGEVT_ROUND ? clLime
|
||||||
|
: pLog->ev==LOGEVT_BET ? clAqua
|
||||||
|
: (pLog->ev==LOGEVT_RES || pLog->ev==LOGEVT_QUASH) ? clWebPink
|
||||||
|
: pLog->ev==LOGEVT_DEAD || pLog->ev==LOGEVT_STOPWIN || pLog->ev==LOGEVT_STOPLOS ? clRed
|
||||||
|
: clYellow;
|
||||||
|
m_dg->Canvas->Font->Color = clr;
|
||||||
|
|
||||||
|
String txt = GetLogText(pLog, ACol);
|
||||||
|
TSize szTxt = m_dg->Canvas->TextExtent(txt);
|
||||||
|
|
||||||
|
int x = Rect.left + 2,
|
||||||
|
y = Rect.top;
|
||||||
|
y += (Rect.Height() - szTxt.cy) / 2;// -- 垂直居中
|
||||||
|
m_dg->Canvas->TextOut(x,y,txt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::LogsTopChanged(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_bAutoScroll = (m_dg->TopRow + m_nShowRows) >= m_dg->RowCount;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::LogsSelectCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, bool &CanSelect)
|
||||||
|
{
|
||||||
|
CanSelect = false;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::SearchInvokeSearch(TObject *Sender)
|
||||||
|
{
|
||||||
|
if(m_sbSearch->Modified){
|
||||||
|
m_sbSearch->Modified = false;
|
||||||
|
m_aSearchLogs.clear();
|
||||||
|
|
||||||
|
m_sSearch = m_sbSearch->Text;
|
||||||
|
if(m_sSearch.Length()){
|
||||||
|
String sT = m_sSearch.UpperCase();
|
||||||
|
for(int i=0; i<g_aBetLogs.size(); i++){
|
||||||
|
TBetLog* pLog = g_aBetLogs[i];
|
||||||
|
|
||||||
|
String txt = GetLogText(pLog, 0xFF);
|
||||||
|
if(txt.Pos(sT)>0)
|
||||||
|
m_aSearchLogs.push_back(pLog);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_iSearchEnd = g_aBetLogs.size();
|
||||||
|
m_bSearch = true;
|
||||||
|
m_bAutoScroll = false;
|
||||||
|
m_dg->TopRow = 0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_bSearch = false;
|
||||||
|
m_bAutoScroll = true;
|
||||||
|
m_dg->SetFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowLogs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::SearchExit(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_sbSearch->Text = m_sSearch;
|
||||||
|
m_sbSearch->Color = clWhite;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::SearchEnter(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_sbSearch->Color = clWebCornSilk;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::SearchDblClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
SearchSelAll();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::SearchSelAll()
|
||||||
|
{
|
||||||
|
if(m_sbSearch->Text.Length()){
|
||||||
|
m_sbSearch->SelStart = 0;
|
||||||
|
m_sbSearch->SelLength = m_sbSearch->Text.Length();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::FormDeactivate(TObject *Sender)
|
||||||
|
{
|
||||||
|
if(Showing && m_sbSearch->Color!=clWhite)
|
||||||
|
SearchExit(NULL);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::FormActivate(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_dg->SetFocus();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TBetLogForm::LogsMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
|
||||||
|
{
|
||||||
|
ResetIdle();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
object BetLogForm: TBetLogForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderIcons = [biSystemMenu]
|
||||||
|
Caption = #25346#26426#26085#24535
|
||||||
|
ClientHeight = 475
|
||||||
|
ClientWidth = 354
|
||||||
|
Color = clBtnFace
|
||||||
|
CustomTitleBar.Control = m_tbp
|
||||||
|
CustomTitleBar.Enabled = True
|
||||||
|
CustomTitleBar.Height = 31
|
||||||
|
CustomTitleBar.BackgroundColor = clWhite
|
||||||
|
CustomTitleBar.ForegroundColor = 65793
|
||||||
|
CustomTitleBar.InactiveBackgroundColor = clWhite
|
||||||
|
CustomTitleBar.InactiveForegroundColor = 10066329
|
||||||
|
CustomTitleBar.ButtonForegroundColor = 65793
|
||||||
|
CustomTitleBar.ButtonBackgroundColor = clWhite
|
||||||
|
CustomTitleBar.ButtonHoverForegroundColor = 65793
|
||||||
|
CustomTitleBar.ButtonHoverBackgroundColor = 16053492
|
||||||
|
CustomTitleBar.ButtonPressedForegroundColor = 65793
|
||||||
|
CustomTitleBar.ButtonPressedBackgroundColor = 15395562
|
||||||
|
CustomTitleBar.ButtonInactiveForegroundColor = 10066329
|
||||||
|
CustomTitleBar.ButtonInactiveBackgroundColor = clWhite
|
||||||
|
Constraints.MaxWidth = 370
|
||||||
|
Constraints.MinWidth = 370
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
GlassFrame.Enabled = True
|
||||||
|
GlassFrame.Top = 31
|
||||||
|
KeyPreview = True
|
||||||
|
Position = poDesigned
|
||||||
|
StyleElements = [seFont, seClient]
|
||||||
|
StyleName = 'Windows'
|
||||||
|
OnActivate = FormActivate
|
||||||
|
OnClose = FormClose
|
||||||
|
OnCreate = FormCreate
|
||||||
|
OnDeactivate = FormDeactivate
|
||||||
|
OnKeyDown = FormKeyDown
|
||||||
|
OnResize = FormResize
|
||||||
|
TextHeight = 15
|
||||||
|
object m_dg: TDrawGrid
|
||||||
|
Left = 0
|
||||||
|
Top = 30
|
||||||
|
Width = 354
|
||||||
|
Height = 445
|
||||||
|
Align = alClient
|
||||||
|
Color = clNone
|
||||||
|
ColCount = 2
|
||||||
|
DefaultRowHeight = 27
|
||||||
|
DefaultDrawing = False
|
||||||
|
DoubleBuffered = True
|
||||||
|
FixedCols = 0
|
||||||
|
RowCount = 16
|
||||||
|
FixedRows = 0
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -16
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Options = [goThumbTracking]
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
ParentFont = False
|
||||||
|
PopupMenu = m_pm
|
||||||
|
ScrollBars = ssNone
|
||||||
|
TabOrder = 0
|
||||||
|
OnDrawCell = LogsDrawCell
|
||||||
|
OnMouseMove = LogsMouseMove
|
||||||
|
OnMouseWheelDown = LogsMouseWheelDown
|
||||||
|
OnMouseWheelUp = LogsMouseWheelUp
|
||||||
|
OnSelectCell = LogsSelectCell
|
||||||
|
OnTopLeftChanged = LogsTopChanged
|
||||||
|
end
|
||||||
|
object m_tbp: TTitleBarPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 354
|
||||||
|
Height = 30
|
||||||
|
ParentCustomHint = False
|
||||||
|
CustomButtons = <>
|
||||||
|
object m_sbSearch: TSearchBox
|
||||||
|
Left = 181
|
||||||
|
Top = 5
|
||||||
|
Width = 132
|
||||||
|
Height = 23
|
||||||
|
ParentCustomHint = False
|
||||||
|
TabStop = False
|
||||||
|
AutoSelect = False
|
||||||
|
AutoSize = False
|
||||||
|
BevelInner = bvSpace
|
||||||
|
BevelKind = bkTile
|
||||||
|
BevelOuter = bvSpace
|
||||||
|
BiDiMode = bdLeftToRight
|
||||||
|
Color = clWhite
|
||||||
|
Ctl3D = False
|
||||||
|
DoubleBuffered = True
|
||||||
|
ParentBiDiMode = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = False
|
||||||
|
TabOrder = 0
|
||||||
|
OnDblClick = SearchDblClick
|
||||||
|
OnEnter = SearchEnter
|
||||||
|
OnExit = SearchExit
|
||||||
|
OnInvokeSearch = SearchInvokeSearch
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object m_pm: TPopupMenu
|
||||||
|
AutoHotkeys = maManual
|
||||||
|
Left = 120
|
||||||
|
Top = 64
|
||||||
|
object save: TMenuItem
|
||||||
|
AutoHotkeys = maManual
|
||||||
|
Caption = #20445#23384#20026'...'
|
||||||
|
OnClick = SaveClick
|
||||||
|
end
|
||||||
|
object N1: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
|
object clear: TMenuItem
|
||||||
|
AutoHotkeys = maManual
|
||||||
|
Caption = #28165#31354#20869#23481
|
||||||
|
OnClick = ClearClick
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef BetLogFormUnitH
|
||||||
|
#define BetLogFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ComCtrls.hpp>
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include <Vcl.Menus.hpp>
|
||||||
|
#include <Vcl.Grids.hpp>
|
||||||
|
#include <Vcl.WinXCtrls.hpp>
|
||||||
|
#include <Vcl.Buttons.hpp>
|
||||||
|
#include <Vcl.TitleBarCtrls.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TBetLogForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TPopupMenu *m_pm;
|
||||||
|
TMenuItem *clear;
|
||||||
|
TMenuItem *save;
|
||||||
|
TMenuItem *N1;
|
||||||
|
TDrawGrid *m_dg;
|
||||||
|
TSearchBox *m_sbSearch;
|
||||||
|
TTitleBarPanel *m_tbp;
|
||||||
|
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
|
||||||
|
void __fastcall LogsMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall LogsMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall ClearClick(TObject *Sender);
|
||||||
|
void __fastcall SaveClick(TObject *Sender);
|
||||||
|
void __fastcall LogsDrawCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, TRect &Rect, TGridDrawState State);
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall FormResize(TObject *Sender);
|
||||||
|
void __fastcall LogsTopChanged(TObject *Sender);
|
||||||
|
void __fastcall LogsSelectCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, bool &CanSelect);
|
||||||
|
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall SearchInvokeSearch(TObject *Sender);
|
||||||
|
void __fastcall SearchExit(TObject *Sender);
|
||||||
|
void __fastcall SearchEnter(TObject *Sender);
|
||||||
|
void __fastcall SearchDblClick(TObject *Sender);
|
||||||
|
void __fastcall FormDeactivate(TObject *Sender);
|
||||||
|
void __fastcall FormActivate(TObject *Sender);
|
||||||
|
void __fastcall LogsMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
private: // User declarations
|
||||||
|
int m_nShowRows;
|
||||||
|
bool m_bAutoScroll;
|
||||||
|
|
||||||
|
vector<TBetLog*> m_aSearchLogs;
|
||||||
|
int m_iSearchEnd;
|
||||||
|
String m_sSearch;
|
||||||
|
bool m_bSearch;
|
||||||
|
|
||||||
|
void __fastcall ShowLogs();
|
||||||
|
String __fastcall GetLogText(TBetLog* pLog, int iCol);
|
||||||
|
void __fastcall SearchSelAll();
|
||||||
|
|
||||||
|
MESSAGE void __fastcall UMLogUpdate(TMessage &msg);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(UM_LOG_UPDATE, TMessage, UMLogUpdate)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TBetLogForm(TComponent* Owner);
|
||||||
|
|
||||||
|
void __fastcall Init(vector<TBetLog*>& aLogs);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TBetLogForm *BetLogForm;
|
||||||
|
extern vector<TBetLog*> g_aBetLogs; //¹Ò»úÈÕÖ¾
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include "ChartFormUnit.h"
|
||||||
|
#include "ContentPanel.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TChartForm *ChartForm = NULL;
|
||||||
|
|
||||||
|
//char * u_sTimeUnit[] = {"5秒", "10秒", "20秒", "30秒", "1分",
|
||||||
|
// "2分", "5分", "10分", "30分", "1小时"};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TChartForm::TChartForm(TComponent* Owner)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
// m_lblTimeUnit->Caption = String(u_sTimeUnit[0]);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::FormClose(TObject *Sender, TCloseAction &Action)
|
||||||
|
{
|
||||||
|
ChartForm->Hide();
|
||||||
|
delete ChartForm;
|
||||||
|
ChartForm = NULL;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::FormCreate(TObject *Sender)
|
||||||
|
{
|
||||||
|
/////////////////////////////////////
|
||||||
|
//test
|
||||||
|
// TDot dot;
|
||||||
|
// for(int i=0; i<4; i++){
|
||||||
|
// g_aDots[i].clear();
|
||||||
|
// g_aDots[i].push_back(dot);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// int counts[2] = {0};
|
||||||
|
// int profile = 0;
|
||||||
|
// int tm = time(NULL);
|
||||||
|
// for(int i=0; i<2000; i++){
|
||||||
|
// profile += Random(2000) - 1000;
|
||||||
|
// dot.val = profile;
|
||||||
|
// dot.ts = tm++;
|
||||||
|
// g_aDots[0].push_back(dot);
|
||||||
|
//
|
||||||
|
// counts[Random(2)]++;
|
||||||
|
// dot.val = counts[0] - counts[1];
|
||||||
|
// dot.ts = tm++;
|
||||||
|
// g_aDots[3].push_back(dot);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
///////////////////////////////////////
|
||||||
|
|
||||||
|
m_panChart = new TContentPanel(this);
|
||||||
|
m_panChart->Parent = this;
|
||||||
|
m_panChart->Align = alClient;
|
||||||
|
m_panChart->Show();
|
||||||
|
|
||||||
|
ShowRunTime();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::UMChartUpdate(TMessage &msg)
|
||||||
|
{
|
||||||
|
int mod = msg.WParam,
|
||||||
|
op = msg.LParam;
|
||||||
|
((TContentPanel*)m_panChart)->UpdateView(mod, op);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::UMRunTime(TMessage &msg)
|
||||||
|
{
|
||||||
|
ShowRunTime();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::ShowRunTime()
|
||||||
|
{
|
||||||
|
int d = g_aGames.runTime / 86400,
|
||||||
|
r = g_aGames.runTime - d * 86400,
|
||||||
|
h, m, s;
|
||||||
|
h = r / 3600, r -= h * 3600;
|
||||||
|
m = r / 60, r -= m * 60;
|
||||||
|
s = r;
|
||||||
|
|
||||||
|
m_lblRunTime->Caption = Format(String("%d天 %.2d:%.2d:%.2d"), ARRAYOFCONST((d, h, m, s)));
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::TopDrawTab(TObject *Sender, TCanvas *TabCanvas, TRect &R, int Index, bool Selected)
|
||||||
|
{
|
||||||
|
TTabSet* pTS = (TTabSet*)Sender;
|
||||||
|
|
||||||
|
int w = TabCanvas->TextWidth((*pTS->Tabs)[Index]),
|
||||||
|
l = ( R.Width() - w ) / 2,
|
||||||
|
h = TabCanvas->TextHeight((*pTS->Tabs)[Index]),
|
||||||
|
t = ( R.Height() - h ) /2;
|
||||||
|
|
||||||
|
if( Index==0 )
|
||||||
|
TabCanvas->Font->Color = clBlue;
|
||||||
|
else if( Index==1 )
|
||||||
|
TabCanvas->Font->Color = clGreen;
|
||||||
|
else if( Index==2 )
|
||||||
|
TabCanvas->Font->Color = clRed;
|
||||||
|
else
|
||||||
|
TabCanvas->Font->Color = clWebRoyalBlue;
|
||||||
|
|
||||||
|
TabCanvas->TextOut(R.Left + l, R.Top + t, (*pTS->Tabs)[Index]);
|
||||||
|
|
||||||
|
TabCanvas->Font->Color = clBlack;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::TopMeasureTab(TObject *Sender, int Index, int &TabWidth)
|
||||||
|
{
|
||||||
|
TabWidth = DPIX(80);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::FormResize(TObject *Sender)
|
||||||
|
{
|
||||||
|
int l = DPIX(150) + (ClientWidth - m_panTU->Width) / 2;
|
||||||
|
int lB = DPIX(420);
|
||||||
|
if(l<lB) l = lB;
|
||||||
|
m_panTU->Left = l;
|
||||||
|
|
||||||
|
// if(WindowState==wsMaximized)
|
||||||
|
// FormStyle = fsNormal;
|
||||||
|
// else if(Application->MainForm->WindowState==wsMaximized)
|
||||||
|
// FormStyle = fsStayOnTop;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChartForm::TopChange(TObject *Sender, int NewTab, bool &AllowChange)
|
||||||
|
{
|
||||||
|
((TContentPanel*)m_panChart)->SetView(NewTab);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TChartForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
||||||
|
{
|
||||||
|
ResetIdle();
|
||||||
|
|
||||||
|
if(Key==37 || Key==39){
|
||||||
|
((TContentPanel*)m_panChart)->PanKeyDown(Key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
object ChartForm: TChartForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
ParentCustomHint = False
|
||||||
|
HorzScrollBar.Tracking = True
|
||||||
|
HorzScrollBar.Visible = False
|
||||||
|
VertScrollBar.Tracking = True
|
||||||
|
VertScrollBar.Visible = False
|
||||||
|
BiDiMode = bdLeftToRight
|
||||||
|
Caption = #25968#25454#22270#34920
|
||||||
|
ClientHeight = 461
|
||||||
|
ClientWidth = 850
|
||||||
|
Color = clBtnFace
|
||||||
|
Constraints.MaxHeight = 500
|
||||||
|
Constraints.MinHeight = 500
|
||||||
|
Constraints.MinWidth = 680
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = []
|
||||||
|
ParentBiDiMode = False
|
||||||
|
Position = poDesigned
|
||||||
|
StyleElements = []
|
||||||
|
StyleName = 'Windows'
|
||||||
|
OnClose = FormClose
|
||||||
|
OnCreate = FormCreate
|
||||||
|
OnKeyDown = FormKeyDown
|
||||||
|
OnResize = FormResize
|
||||||
|
TextHeight = 14
|
||||||
|
object m_tsTop: TTabSet
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 850
|
||||||
|
Height = 25
|
||||||
|
ParentCustomHint = False
|
||||||
|
Align = alTop
|
||||||
|
AutoScroll = False
|
||||||
|
DoubleBuffered = False
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = False
|
||||||
|
SelectedColor = clWhite
|
||||||
|
Style = tsOwnerDraw
|
||||||
|
TabHeight = 25
|
||||||
|
Tabs.Strings = (
|
||||||
|
#24635#36194#21033
|
||||||
|
#27169#25311#26412#37329
|
||||||
|
#36134#25143#20313#39069
|
||||||
|
#36194#36755#27425#24046)
|
||||||
|
TabIndex = 0
|
||||||
|
TabPosition = tpTop
|
||||||
|
OnChange = TopChange
|
||||||
|
OnDrawTab = TopDrawTab
|
||||||
|
OnMeasureTab = TopMeasureTab
|
||||||
|
end
|
||||||
|
object m_panTU: TPanel
|
||||||
|
Left = 350
|
||||||
|
Top = 0
|
||||||
|
Width = 163
|
||||||
|
Height = 23
|
||||||
|
ParentCustomHint = False
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Color = clInactiveBorder
|
||||||
|
Ctl3D = False
|
||||||
|
DoubleBuffered = False
|
||||||
|
ParentBackground = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowCaption = False
|
||||||
|
ShowHint = False
|
||||||
|
TabOrder = 1
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 64
|
||||||
|
Height = 23
|
||||||
|
Align = alLeft
|
||||||
|
AutoSize = False
|
||||||
|
Caption = #25346#26426#26102#38271#65306
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
Layout = tlCenter
|
||||||
|
ExplicitLeft = 3
|
||||||
|
ExplicitTop = 5
|
||||||
|
ExplicitHeight = 15
|
||||||
|
end
|
||||||
|
object m_lblRunTime: TLabel
|
||||||
|
Left = 64
|
||||||
|
Top = 0
|
||||||
|
Width = 99
|
||||||
|
Height = 23
|
||||||
|
Align = alRight
|
||||||
|
Alignment = taCenter
|
||||||
|
AutoSize = False
|
||||||
|
Caption = '0'#22825' 00:00:00'
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Arial'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef ChartFormUnitH
|
||||||
|
#define ChartFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.TitleBarCtrls.hpp>
|
||||||
|
|
||||||
|
#include "ContentPanel.h"
|
||||||
|
#include <Vcl.Tabs.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TChartForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TTabSet *m_tsTop;
|
||||||
|
TLabel *Label1;
|
||||||
|
TPanel *m_panTU;
|
||||||
|
TLabel *m_lblRunTime;
|
||||||
|
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall TopDrawTab(TObject *Sender, TCanvas *TabCanvas, TRect &R, int Index, bool Selected);
|
||||||
|
void __fastcall TopMeasureTab(TObject *Sender, int Index, int &TabWidth);
|
||||||
|
void __fastcall FormResize(TObject *Sender);
|
||||||
|
void __fastcall TopChange(TObject *Sender, int NewTab, bool &AllowChange);
|
||||||
|
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
private: // User declarations
|
||||||
|
TPanel* m_panChart;
|
||||||
|
|
||||||
|
void __fastcall ShowRunTime();
|
||||||
|
MESSAGE void __fastcall UMRunTime(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMChartUpdate(TMessage &msg);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(UM_RUN_TIME, TMessage, UMRunTime)
|
||||||
|
MESSAGE_HANDLER(UM_CHART_UPDATE, TMessage, UMChartUpdate)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TChartForm(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TChartForm *ChartForm;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "Chip02FrameUnit.h"
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include "PolicyUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TChip02Frame *Chip02Frame = NULL;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TChip02Frame::TChip02Frame(TComponent* Owner)
|
||||||
|
: TFrame(Owner)
|
||||||
|
{
|
||||||
|
m_leMinChip->Text = g_RandomChip.minChip;
|
||||||
|
m_leMaxChip->Text = g_RandomChip.maxChip;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChip02Frame::EditChipExit(TObject *Sender)
|
||||||
|
{
|
||||||
|
TEdit* pE = (TEdit*)Sender;
|
||||||
|
|
||||||
|
int num;
|
||||||
|
if(!TryStrToInt(pE->Text, num) || num<g_MinOnBet || num>g_MaxOnBet ){
|
||||||
|
ShowMessage("×¢Âë½ð¶î²»Äܳ¬¹ýÏÞºì");
|
||||||
|
pE->Text = pE==m_leMinChip ? "20" : "100";
|
||||||
|
pE->SetFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
object Chip02Frame: TChip02Frame
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 384
|
||||||
|
Height = 310
|
||||||
|
Ctl3D = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
TabOrder = 0
|
||||||
|
Visible = False
|
||||||
|
object Label1: TLabel
|
||||||
|
Left = 40
|
||||||
|
Top = 24
|
||||||
|
Width = 117
|
||||||
|
Height = 15
|
||||||
|
Caption = #20869#32622#27880#30721#65306#38543#26426#27880#30721
|
||||||
|
end
|
||||||
|
object m_leMinChip: TLabeledEdit
|
||||||
|
Left = 145
|
||||||
|
Top = 88
|
||||||
|
Width = 70
|
||||||
|
Height = 26
|
||||||
|
Hint = #38543#26426#27880#30721#26368#23567#20540
|
||||||
|
Alignment = taCenter
|
||||||
|
EditLabel.Width = 80
|
||||||
|
EditLabel.Height = 26
|
||||||
|
EditLabel.Caption = #19979#27880#33539#22260#65306
|
||||||
|
EditLabel.Font.Charset = DEFAULT_CHARSET
|
||||||
|
EditLabel.Font.Color = clWindowText
|
||||||
|
EditLabel.Font.Height = -15
|
||||||
|
EditLabel.Font.Name = 'Segoe UI'
|
||||||
|
EditLabel.Font.Style = []
|
||||||
|
EditLabel.ParentFont = False
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
LabelPosition = lpLeft
|
||||||
|
MaxLength = 5
|
||||||
|
NumbersOnly = True
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 0
|
||||||
|
Text = '20'
|
||||||
|
OnExit = EditChipExit
|
||||||
|
end
|
||||||
|
object m_leMaxChip: TLabeledEdit
|
||||||
|
Left = 259
|
||||||
|
Top = 88
|
||||||
|
Width = 70
|
||||||
|
Height = 26
|
||||||
|
Hint = #38543#26426#27880#30721#26368#22823#20540
|
||||||
|
Alignment = taCenter
|
||||||
|
EditLabel.Width = 31
|
||||||
|
EditLabel.Height = 26
|
||||||
|
EditLabel.Caption = ' '#8212' '
|
||||||
|
EditLabel.Font.Charset = DEFAULT_CHARSET
|
||||||
|
EditLabel.Font.Color = clWindowText
|
||||||
|
EditLabel.Font.Height = -15
|
||||||
|
EditLabel.Font.Name = 'Segoe UI'
|
||||||
|
EditLabel.Font.Style = []
|
||||||
|
EditLabel.ParentFont = False
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -15
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
LabelPosition = lpLeft
|
||||||
|
MaxLength = 5
|
||||||
|
NumbersOnly = True
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 1
|
||||||
|
Text = '100'
|
||||||
|
OnExit = EditChipExit
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef Chip02FrameUnitH
|
||||||
|
#define Chip02FrameUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Mask.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TChip02Frame : public TFrame
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TLabeledEdit *m_leMinChip;
|
||||||
|
TLabeledEdit *m_leMaxChip;
|
||||||
|
TLabel *Label1;
|
||||||
|
void __fastcall EditChipExit(TObject *Sender);
|
||||||
|
private: // User declarations
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TChip02Frame(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TChip02Frame *Chip02Frame;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "ChipsFormUnit.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma link "PNGButton"
|
||||||
|
#pragma link "PNGButton"
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TChipsForm *ChipsForm = NULL;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TChipsForm::TChipsForm(TComponent* Owner)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
m_aChips[0] = m_btnChip1;
|
||||||
|
m_aChips[1] = m_btnChip5;
|
||||||
|
m_aChips[2] = m_btnChip10;
|
||||||
|
m_aChips[3] = m_btnChip20;
|
||||||
|
m_aChips[4] = m_btnChip50;
|
||||||
|
m_aChips[5] = m_btnChip100;
|
||||||
|
m_aChips[6] = m_btnChip500;
|
||||||
|
m_aChips[7] = m_btnChip1k;
|
||||||
|
m_aChips[8] = m_btnChip5k;
|
||||||
|
m_aChips[9] = m_btnChip10k;
|
||||||
|
|
||||||
|
m_aValues[0] = 1;
|
||||||
|
m_aValues[1] = 5;
|
||||||
|
m_aValues[2] = 10;
|
||||||
|
m_aValues[3] = 20;
|
||||||
|
m_aValues[4] = 50;
|
||||||
|
m_aValues[5] = 100;
|
||||||
|
m_aValues[6] = 500;
|
||||||
|
m_aValues[7] = 1000;
|
||||||
|
m_aValues[8] = 5000;
|
||||||
|
m_aValues[9] = 10000;
|
||||||
|
|
||||||
|
m_iSelChip = 3;
|
||||||
|
m_nSelChip = 20;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TChipsForm::ChipClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
TPNGButton* pBtn = (TPNGButton*)Sender;
|
||||||
|
if(!pBtn->Down){
|
||||||
|
m_aChips[m_iSelChip]->Down = false;
|
||||||
|
pBtn->Down = true;
|
||||||
|
|
||||||
|
m_iSelChip = pBtn->Tag;
|
||||||
|
m_nSelChip = m_aValues[m_iSelChip];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TChipsForm::FormResize(TObject *Sender)
|
||||||
|
{
|
||||||
|
int dx = m_btnChip1->Width,
|
||||||
|
dy = m_btnChip1->Height;
|
||||||
|
int col = ClientWidth / dx,
|
||||||
|
row = ClientHeight / dy;
|
||||||
|
|
||||||
|
int y = 0, ind = 0;
|
||||||
|
for(int i=0; i<row && ind<10; i++,y+=dy){
|
||||||
|
int x = 0;
|
||||||
|
for(int j=0; j<col && ind<10; j++, x+=dx, ind++){
|
||||||
|
TPNGButton* pB = m_aChips[ind];
|
||||||
|
pB->Top = y;
|
||||||
|
pB->Left = x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TChipsForm::FormCanResize(TObject *Sender, int &NewWidth, int &NewHeight, bool &Resize)
|
||||||
|
{
|
||||||
|
int dx = m_btnChip1->Width,
|
||||||
|
dy = m_btnChip1->Height,
|
||||||
|
cx = Width - ClientWidth,
|
||||||
|
cy = Height - ClientHeight;
|
||||||
|
int col, row;
|
||||||
|
if(Width!=NewWidth){
|
||||||
|
col = (NewWidth - cx) / dx;
|
||||||
|
row = 10 / col;
|
||||||
|
if(10%col) row++;
|
||||||
|
}
|
||||||
|
else if(Height!=NewHeight){
|
||||||
|
row = (NewHeight-cy) / dy;
|
||||||
|
col = 10 / row;
|
||||||
|
if(10%row) col++;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
NewWidth = col * dx + cx;
|
||||||
|
NewHeight = row * dy + cy;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
+3094
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef ChipsFormUnitH
|
||||||
|
#define ChipsFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.Buttons.hpp>
|
||||||
|
#include "PNGButton.hpp"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TChipsForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TPNGButton *m_btnChip1;
|
||||||
|
TPNGButton *m_btnChip5;
|
||||||
|
TPNGButton *m_btnChip10;
|
||||||
|
TPNGButton *m_btnChip20;
|
||||||
|
TPNGButton *m_btnChip50;
|
||||||
|
TPNGButton *m_btnChip100;
|
||||||
|
TPNGButton *m_btnChip500;
|
||||||
|
TPNGButton *m_btnChip1k;
|
||||||
|
TPNGButton *m_btnChip5k;
|
||||||
|
TPNGButton *m_btnChip10k;
|
||||||
|
void __fastcall ChipClick(TObject *Sender);
|
||||||
|
void __fastcall FormResize(TObject *Sender);
|
||||||
|
void __fastcall FormCanResize(TObject *Sender, int &NewWidth, int &NewHeight, bool &Resize);
|
||||||
|
private: // User declarations
|
||||||
|
TPNGButton* m_aChips[10];
|
||||||
|
int m_aValues[10];
|
||||||
|
int m_iSelChip;
|
||||||
|
public: // User declarations
|
||||||
|
int m_nSelChip;
|
||||||
|
|
||||||
|
__fastcall TChipsForm(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TChipsForm *ChipsForm;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,646 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <vcl.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include "ContentPanel.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
|
||||||
|
TColor clrAxis = TColor(RGB(3,5,7)), //XY轴及边框
|
||||||
|
clrLineTen = TColor(RGB(215,215,215)), //十倍横线
|
||||||
|
clrLineNor = TColor(0x00EDEDED),// TColor(RGB(250,250,250)), //普通线
|
||||||
|
clrHeadFont = TColor(RGB(83,109,165)), //头文字
|
||||||
|
clrSelect = TColor(RGB(150, 155, 159));
|
||||||
|
TColor u_clrLink[] = {clBlue, clWebLimeGreen, clRed, clWebRoyalBlue};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
__fastcall TContentPanel::TContentPanel(TComponent* AOwner)
|
||||||
|
: Vcl::Extctrls::TPanel(AOwner)
|
||||||
|
{
|
||||||
|
Visible = false;
|
||||||
|
DoubleBuffered = true;
|
||||||
|
Ctl3D = false;
|
||||||
|
Color = clBtnHighlight;//clWhite;
|
||||||
|
BorderStyle = bsSingle;
|
||||||
|
OnMouseMove = PanMouseMove;
|
||||||
|
|
||||||
|
m_nTopGap = m_nLeftBound = m_nTopBound = 0;
|
||||||
|
m_nRows = 50;
|
||||||
|
m_xScaleGap = m_nGap = DPIX(8);
|
||||||
|
m_yZero = 0;
|
||||||
|
m_yScaleGap = m_nGap * 5;
|
||||||
|
m_nRightBound = m_nLeftBound + m_nGap * m_nCols;
|
||||||
|
m_nBottomBound = m_nTopBound + m_nGap * m_nRows;
|
||||||
|
|
||||||
|
m_nAmoUnit = 100;
|
||||||
|
m_nAmoMax = m_nAmoMin = m_nRowMax = m_nRowMin = 0;
|
||||||
|
m_iType = m_nOriDots = 0;
|
||||||
|
m_iSample = 1;
|
||||||
|
m_iMask = 0;
|
||||||
|
m_iPeakU = m_iPeakL = -1;
|
||||||
|
|
||||||
|
m_xHalfGap = m_xScaleGap>>1;
|
||||||
|
m_iHint = m_xMaxHint = 0;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TContentPanel::CreateWnd(void)
|
||||||
|
{
|
||||||
|
Vcl::Extctrls::TPanel::CreateWnd();
|
||||||
|
|
||||||
|
for(int i=0; i<2; i++){
|
||||||
|
m_lblHint[i] = new TLabel(NULL);
|
||||||
|
m_lblHint[i]->Visible = false;
|
||||||
|
m_lblHint[i]->Parent = this;
|
||||||
|
m_lblHint[i]->Font->Color = clrHeadFont;
|
||||||
|
// m_lblHint[i]->AutoSize = false;
|
||||||
|
// m_lblHint[i]->Width = 52;
|
||||||
|
// m_lblHint[i]->Height = 16;
|
||||||
|
// m_lblHint[i]->Alignment = taCenter;
|
||||||
|
// m_lblHint[i]->Layout = tlCenter;
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateView(0, true);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
__fastcall TContentPanel::~TContentPanel()
|
||||||
|
{
|
||||||
|
for(int i=0; i<2; i++)
|
||||||
|
delete m_lblHint[i];
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TContentPanel::SetView(int iType)
|
||||||
|
{
|
||||||
|
if(iType!=m_iType){
|
||||||
|
m_iType = iType;
|
||||||
|
m_nAmoUnit = iType==3 ? 10 : 100;
|
||||||
|
UpdateView(iType, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TContentPanel::WMSize(TWMSize &msg)
|
||||||
|
{
|
||||||
|
m_nCols = (msg.Width - m_nLeftBound - DPIX(4)) / m_nGap;
|
||||||
|
m_nRightBound = m_nLeftBound + m_nGap * m_nCols;
|
||||||
|
m_xScaleGap = m_nGap;
|
||||||
|
m_xHalfGap = m_xScaleGap>>1;
|
||||||
|
m_aDots.clear();
|
||||||
|
m_nOriDots = 0;
|
||||||
|
m_iSample = 1;
|
||||||
|
m_iMask = 0;
|
||||||
|
if(!CalcXUnit())
|
||||||
|
InvalidateRect(Handle, NULL, TRUE);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TContentPanel::Paint()
|
||||||
|
{
|
||||||
|
TRect rtInvalid = Canvas->ClipRect;
|
||||||
|
bool bPeakU = m_iPeakU>=0, bPeakL = m_iPeakL>=0;
|
||||||
|
vector<TDot>& aDots = m_aDots.empty() ? g_aDots[m_iType] : m_aDots;
|
||||||
|
|
||||||
|
//绘制选中线
|
||||||
|
if(m_iHint>0){
|
||||||
|
int x = m_xZero + m_iHint * m_xScaleGap;
|
||||||
|
Canvas->Pen->Color = clrSelect;
|
||||||
|
Canvas->Pen->Width = 1;
|
||||||
|
Canvas->Pen->Style = psDot;
|
||||||
|
Canvas->MoveTo(x, m_nTopBound+1);
|
||||||
|
Canvas->LineTo(x, m_nBottomBound-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int x0 = m_xZero,
|
||||||
|
y0 = m_nTopBound,
|
||||||
|
x1 = x0,
|
||||||
|
l = ( rtInvalid.left - 1 - x0 ) / m_xScaleGap,
|
||||||
|
r = ( rtInvalid.right + 1 - x0 ) / m_xScaleGap + 1,
|
||||||
|
total = aDots.size();
|
||||||
|
|
||||||
|
if(total>0)
|
||||||
|
y0 += (int)((m_nRowMax - aDots[0].val) * m_yScale + 0.5);
|
||||||
|
|
||||||
|
Canvas->Pen->Color = u_clrLink[m_iType];
|
||||||
|
Canvas->Pen->Width = 2;
|
||||||
|
Canvas->MoveTo( x0, y0 );
|
||||||
|
|
||||||
|
for( int i=1; i<total; i++ ){
|
||||||
|
x1 += m_xScaleGap;
|
||||||
|
|
||||||
|
int c = (m_nRowMax - aDots[i].val) * m_yScale + 0.5;
|
||||||
|
int y1 = m_nTopBound + c;
|
||||||
|
|
||||||
|
if(l <= i && r >= i){
|
||||||
|
//绘制连接线
|
||||||
|
Canvas->LineTo( x1, y1 );
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Canvas->MoveTo( x1, y1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TContentPanel::WMEraseBkgnd(TWMEraseBkgnd &Message)
|
||||||
|
{
|
||||||
|
TCanvas* tempCanvas = new TCanvas;
|
||||||
|
tempCanvas->Handle = Message.DC;
|
||||||
|
|
||||||
|
//背景色
|
||||||
|
TRect rect( 0, 0, ClientWidth, ClientHeight );
|
||||||
|
tempCanvas->Brush->Color = clBtnFace;//clWhite;
|
||||||
|
tempCanvas->FillRect( rect );
|
||||||
|
|
||||||
|
//外边框
|
||||||
|
rect.left = m_nLeftBound;
|
||||||
|
rect.right = m_nRightBound + 1;
|
||||||
|
rect.top = m_nTopBound;
|
||||||
|
rect.bottom = m_nBottomBound + 1;
|
||||||
|
tempCanvas->Brush->Color = clrAxis;
|
||||||
|
tempCanvas->FrameRect( rect );
|
||||||
|
|
||||||
|
//纵线
|
||||||
|
int x = m_xZero,
|
||||||
|
t = rect.top+1,
|
||||||
|
b = rect.bottom-1;
|
||||||
|
tempCanvas->Pen->Color = clrLineNor;
|
||||||
|
for( int i=1; i<m_nCols; i++ ){
|
||||||
|
x += m_nGap;
|
||||||
|
tempCanvas->MoveTo( x, t );
|
||||||
|
tempCanvas->LineTo( x, b );
|
||||||
|
}
|
||||||
|
|
||||||
|
//刻度
|
||||||
|
tempCanvas->Font->Color = clrHeadFont;
|
||||||
|
tempCanvas->Brush->Style = bsClear;
|
||||||
|
int y = m_nTopGap,//, iY0 = 0,
|
||||||
|
num = m_nRowMax;
|
||||||
|
for( int i=0; i<=10; i++ ){
|
||||||
|
String sTxt = IntToStr(num);
|
||||||
|
TSize szTxt = tempCanvas->TextExtent( sTxt );
|
||||||
|
x = m_nLeftBound - szTxt.cx - 1;
|
||||||
|
tempCanvas->TextOut( x, y, sTxt );
|
||||||
|
|
||||||
|
num -= m_iAmoUnit;
|
||||||
|
y += m_yScaleGap;
|
||||||
|
}
|
||||||
|
|
||||||
|
//横线
|
||||||
|
tempCanvas->Brush->Style = bsSolid;
|
||||||
|
y = m_nTopBound;
|
||||||
|
int l = m_xZero+1,
|
||||||
|
r = rect.right-1;
|
||||||
|
for( int i=1; i<m_nRows; i++ ){
|
||||||
|
y += m_nGap;
|
||||||
|
tempCanvas->Pen->Color = i==m_yZero ? clrAxis
|
||||||
|
: i % 5 ? clrLineNor
|
||||||
|
: clrLineTen;
|
||||||
|
tempCanvas->MoveTo( l, y );
|
||||||
|
tempCanvas->LineTo( r, y );
|
||||||
|
}
|
||||||
|
|
||||||
|
delete tempCanvas;
|
||||||
|
Message.Result = true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TContentPanel::UpdateView(int iType, bool bInit)
|
||||||
|
{
|
||||||
|
if(m_iType!=iType)
|
||||||
|
return;
|
||||||
|
|
||||||
|
vector<TDot>& dots = g_aDots[m_iType];
|
||||||
|
int nTotal = dots.size();
|
||||||
|
|
||||||
|
if(bInit){
|
||||||
|
int nMax(0), nMin(0);
|
||||||
|
if(nTotal>0){
|
||||||
|
nMax = nMin = dots[0].val;
|
||||||
|
for(int i=1; i<nTotal; i++){
|
||||||
|
int p = dots[i].val;
|
||||||
|
if(p>nMax){
|
||||||
|
nMax = p;
|
||||||
|
m_iPeakU = i;
|
||||||
|
}
|
||||||
|
else if(p<nMin){
|
||||||
|
nMin = p;
|
||||||
|
m_iPeakL = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nAmoMax = nMax;
|
||||||
|
m_nAmoMin = nMin;
|
||||||
|
m_xScaleGap = m_nGap;
|
||||||
|
m_xHalfGap = m_xScaleGap>>1;
|
||||||
|
m_aDots.clear();
|
||||||
|
m_nOriDots = 0;
|
||||||
|
m_iSample = 1;
|
||||||
|
m_iMask = 0;
|
||||||
|
CalcYUnit(nMax, nMin, true);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!nTotal || m_nOriDots==nTotal)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int nOriCount = m_nOriDots,
|
||||||
|
nLocCount = m_aDots.size();
|
||||||
|
bool bYChange = false;
|
||||||
|
for(int i=m_nOriDots; i<nTotal; i++){
|
||||||
|
int p = dots[i].val;
|
||||||
|
if(!m_aDots.empty()){
|
||||||
|
m_aDots.push_back(dots[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(p > m_nAmoMax){
|
||||||
|
m_nAmoMax = p;
|
||||||
|
bYChange = true;
|
||||||
|
|
||||||
|
if(p > m_nRowMax) m_iPeakU = nTotal - 1;
|
||||||
|
}
|
||||||
|
else if(p < m_nAmoMin){
|
||||||
|
m_nAmoMin = p;
|
||||||
|
bYChange = true;
|
||||||
|
|
||||||
|
if(p < m_nRowMin) m_iPeakL = nTotal -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nOriDots = nTotal;
|
||||||
|
|
||||||
|
if(bYChange && CalcYUnit(m_nAmoMax, m_nAmoMin))
|
||||||
|
return;
|
||||||
|
else if(CalcXUnit())
|
||||||
|
return;
|
||||||
|
|
||||||
|
TRect rectDraw;
|
||||||
|
rectDraw.top = m_nTopBound - 1;
|
||||||
|
rectDraw.bottom = m_nBottomBound + 1;
|
||||||
|
|
||||||
|
if(m_aDots.empty()){
|
||||||
|
rectDraw.left = m_xZero + (nOriCount-1) * m_xScaleGap;
|
||||||
|
rectDraw.right = rectDraw.Left + (nTotal-nOriCount) * m_xScaleGap + 2;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
rectDraw.left = m_xZero + (nLocCount-1) * m_xScaleGap;
|
||||||
|
rectDraw.right = rectDraw.Left + (m_aDots.size()-nLocCount) * m_xScaleGap + 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
InvalidateRect( Handle, &rectDraw, false );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TContentPanel::Resample()
|
||||||
|
{
|
||||||
|
vector<TDot>& dots = g_aDots[m_iType];
|
||||||
|
|
||||||
|
m_aDots.clear();
|
||||||
|
m_aDots.push_back(dots[0]);
|
||||||
|
|
||||||
|
int total = dots.size(),
|
||||||
|
num = total-20; //保留最少20个点
|
||||||
|
|
||||||
|
bool bNoSample = m_iSample==1,
|
||||||
|
bMask = m_iMask>m_iSample;
|
||||||
|
int iS = 0,
|
||||||
|
iM = !bMask,
|
||||||
|
iMask = m_iMask + 1;
|
||||||
|
TDot dtMax = dots[0],
|
||||||
|
dtMin = dots[0];
|
||||||
|
for(int i=1; i<num; i++){
|
||||||
|
if(bNoSample || ++iS==m_iSample){
|
||||||
|
iS = 0;
|
||||||
|
if(bMask && ++iM==iMask)
|
||||||
|
iM = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(dots[i].val>dtMax.val)
|
||||||
|
dtMax = dots[i];
|
||||||
|
else if(dots[i].val<dtMin.val)
|
||||||
|
dtMin = dots[i];
|
||||||
|
|
||||||
|
if(iM && !iS){
|
||||||
|
bool bPushMax = true;
|
||||||
|
|
||||||
|
int nTmp = m_aDots.back().val;
|
||||||
|
if(dtMin.val>=nTmp || dtMax.val==m_nAmoMax)
|
||||||
|
bPushMax = true;
|
||||||
|
else if(dtMax.val<=nTmp || dtMin.val==m_nAmoMin)
|
||||||
|
bPushMax = false;
|
||||||
|
else if(m_aDots.size()>1){
|
||||||
|
int nSec = m_aDots[m_aDots.size()-2].val;
|
||||||
|
if(nTmp<nSec)
|
||||||
|
bPushMax = false;
|
||||||
|
// else
|
||||||
|
// bPushMax = true;
|
||||||
|
}
|
||||||
|
else if(dtMax.val-nTmp < nTmp-dtMin.val)
|
||||||
|
bPushMax = false;
|
||||||
|
// else
|
||||||
|
// bPushMax = true;
|
||||||
|
|
||||||
|
if(bPushMax && dtMax.ts)
|
||||||
|
m_aDots.push_back(dtMax);
|
||||||
|
else if(!bPushMax && dtMin.ts)
|
||||||
|
m_aDots.push_back(dtMin);
|
||||||
|
|
||||||
|
dtMax = dtMin = dots[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=num; i<total; i++)
|
||||||
|
m_aDots.push_back(dots[i]);
|
||||||
|
|
||||||
|
m_xMaxHint = m_nLeftBound + m_aDots.size() * m_xScaleGap - m_xHalfGap;
|
||||||
|
|
||||||
|
m_nOriDots = total;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
bool __fastcall TContentPanel::CalcXUnit()
|
||||||
|
{
|
||||||
|
int nWidth = ClientWidth - m_nLeftBound - DPIX(4) - 1;
|
||||||
|
vector<TDot>& aDots = m_aDots.empty() ? g_aDots[m_iType] : m_aDots;
|
||||||
|
int total = aDots.size();
|
||||||
|
int xGap = m_xScaleGap;
|
||||||
|
int xMinGap = 3;
|
||||||
|
|
||||||
|
if(total * xGap < nWidth){
|
||||||
|
m_xMaxHint = m_nLeftBound + total * m_xScaleGap - m_xHalfGap;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
total = g_aDots[m_iType].size();
|
||||||
|
while(xGap>xMinGap && total * xGap >= nWidth){
|
||||||
|
xGap--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xGap!=m_xScaleGap){
|
||||||
|
m_xScaleGap = xGap;
|
||||||
|
m_xHalfGap = m_xScaleGap>>1;
|
||||||
|
if(total * xGap < nWidth){
|
||||||
|
// DebugPrint("Change xGap: %d", xGap);
|
||||||
|
|
||||||
|
m_xMaxHint = m_nLeftBound + total * xGap - m_xHalfGap;
|
||||||
|
if(m_iHint>0){
|
||||||
|
m_iHint = 0;
|
||||||
|
m_lblHint[0]->Visible = false;
|
||||||
|
m_lblHint[1]->Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
InvalidateRect( Handle, NULL, true );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int nCol = nWidth / xGap;
|
||||||
|
int iSample = m_iSample,
|
||||||
|
iMask = m_iMask;
|
||||||
|
|
||||||
|
while((total-20) / iSample + 20 + 10 > nCol){
|
||||||
|
if(iMask<=iSample)
|
||||||
|
iMask = iSample + 10;
|
||||||
|
|
||||||
|
while(iMask>iSample && (total-20) * iMask / ((iMask+1)*iSample) + 20 + 10 > nCol){
|
||||||
|
iMask--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(iMask>iSample)
|
||||||
|
break;
|
||||||
|
|
||||||
|
iSample++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(iSample!=m_iSample || iMask!=m_iMask){
|
||||||
|
m_iMask = iMask;
|
||||||
|
m_iSample = iSample;
|
||||||
|
// DebugPrint("Change sample: %d mask: %d", iSample, iMask);
|
||||||
|
}
|
||||||
|
|
||||||
|
Resample();
|
||||||
|
if(m_iHint>0){
|
||||||
|
m_iHint = 0;
|
||||||
|
m_lblHint[0]->Visible = false;
|
||||||
|
m_lblHint[1]->Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
InvalidateRect( Handle, NULL, true );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
bool __fastcall TContentPanel::CalcYUnit(int nMax, int nMin, bool bInit)
|
||||||
|
{
|
||||||
|
if(bInit || nMax > m_nRowMax || nMin < m_nRowMin ){ //初始化||范围变动
|
||||||
|
int scale = 100 / m_nAmoUnit;
|
||||||
|
if(nMax==nMin){
|
||||||
|
m_nRowMax = (nMax / m_nAmoUnit + 1) * m_nAmoUnit;
|
||||||
|
m_nRowMin = m_nRowMax - 2 * m_nAmoUnit;
|
||||||
|
if(m_nRowMax>0 && m_nRowMin<0)
|
||||||
|
m_yZero = 25;
|
||||||
|
else
|
||||||
|
m_yZero = 0;
|
||||||
|
}
|
||||||
|
else if(nMax>0 && nMin<0){
|
||||||
|
nMax = (nMax / m_nAmoUnit + ((nMax % m_nAmoUnit) ? 1 : 0)) * m_nAmoUnit;
|
||||||
|
nMin = (nMin / m_nAmoUnit - ((nMin % m_nAmoUnit) ? 1 : 0)) * m_nAmoUnit;
|
||||||
|
|
||||||
|
//找可整除的0轴
|
||||||
|
int m = (nMax - nMin) * scale / 50;
|
||||||
|
if(0 == (nMin * scale) % m){
|
||||||
|
m_nRowMax = nMax;
|
||||||
|
m_nRowMin = nMin;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int rMax = nMax,
|
||||||
|
rMin = nMin,
|
||||||
|
tmpMin = nMin,
|
||||||
|
rm = m_iType==3 ? 10000 : 10000000;
|
||||||
|
|
||||||
|
//寻找最佳方案
|
||||||
|
bool bUp = g_aDots[m_iType].back().val > 0;
|
||||||
|
for(int m1=m; m1 < (bUp ? rm : rm+1); m1+=2){ //最后的数据为负,优先扩下半区,或者尽量上下同扩
|
||||||
|
if(m1>m && 0 == tmpMin % m1){
|
||||||
|
rMax = nMax;
|
||||||
|
rMin = tmpMin;
|
||||||
|
rm = m1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tmpMax = nMax;
|
||||||
|
for(int m2=m1+2; -tmpMin>=m2 && m2 < (bUp ? rm+1: rm); m2+=2){ //最后的数据为正,优先扩上半区
|
||||||
|
tmpMax += m_nAmoUnit;
|
||||||
|
if(0==tmpMin % m2){
|
||||||
|
rMax = tmpMax;
|
||||||
|
rMin = tmpMin;
|
||||||
|
rm = m2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpMin -= m_nAmoUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_nRowMax = rMax;
|
||||||
|
m_nRowMin = rMin;
|
||||||
|
m = rm;
|
||||||
|
}
|
||||||
|
|
||||||
|
int n = - m_nRowMin * scale / m;
|
||||||
|
if(n<1) n = 1;
|
||||||
|
else if(n>49) n = 49;
|
||||||
|
m_yZero = 50 - n;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_nRowMax = nMax / m_nAmoUnit * m_nAmoUnit;
|
||||||
|
if(nMax > 0 && nMax % m_nAmoUnit) m_nRowMax += m_nAmoUnit;
|
||||||
|
|
||||||
|
m_nRowMin = nMin / m_nAmoUnit * m_nAmoUnit;
|
||||||
|
if(nMin < 0 && nMin % m_nAmoUnit) m_nRowMin -= m_nAmoUnit;
|
||||||
|
|
||||||
|
m_yZero = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TSize szTxt1 = Canvas->TextExtent(IntToStr(m_nRowMax)),
|
||||||
|
szTxt2 = Canvas->TextExtent(IntToStr(m_nRowMin));
|
||||||
|
// int hhTxt = szTxt1.cy / 2;
|
||||||
|
// if(hhTxt<16){
|
||||||
|
// m_nTopGap = 16 - hhTxt;
|
||||||
|
// m_nTopBound = 16;
|
||||||
|
// }
|
||||||
|
// else{
|
||||||
|
// m_nTopGap = 0;
|
||||||
|
// m_nTopBound = hhTxt;
|
||||||
|
// }
|
||||||
|
m_nTopBound = szTxt1.cy;
|
||||||
|
m_nTopGap = szTxt1.cy / 2;
|
||||||
|
m_nBottomBound = m_nTopBound + m_nGap * m_nRows;
|
||||||
|
m_nLeftBound = max(szTxt1.cx, szTxt2.cx) + 2;
|
||||||
|
m_xZero = m_nLeftBound;
|
||||||
|
m_iAmoUnit = (m_nRowMax - m_nRowMin) / 10;
|
||||||
|
m_yScale = 5.0 * m_nGap / m_iAmoUnit;
|
||||||
|
|
||||||
|
m_nCols = (ClientWidth - m_nLeftBound - DPIX(4)) / m_nGap;
|
||||||
|
m_nRightBound = m_nLeftBound + m_nGap * m_nCols;
|
||||||
|
CalcXUnit();
|
||||||
|
|
||||||
|
InvalidateRect( Handle, NULL, true );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TContentPanel::PanMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
|
||||||
|
{
|
||||||
|
ResetIdle();
|
||||||
|
|
||||||
|
int iHit = HitTest(X, Y);
|
||||||
|
|
||||||
|
if(m_iHint!=iHit)
|
||||||
|
ShowTimeHint(iHit);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TContentPanel::PanKeyDown(WORD Key)
|
||||||
|
{
|
||||||
|
if(Key==37){
|
||||||
|
if(!m_iHint){
|
||||||
|
vector<TDot>& aDots = m_aDots.empty() ? g_aDots[m_iType] : m_aDots;
|
||||||
|
if(aDots.size()>1)
|
||||||
|
ShowTimeHint(aDots.size()-1);
|
||||||
|
}
|
||||||
|
else if(m_iHint>1){
|
||||||
|
ShowTimeHint(m_iHint-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(Key==39){
|
||||||
|
vector<TDot>& aDots = m_aDots.empty() ? g_aDots[m_iType] : m_aDots;
|
||||||
|
if(m_iHint>0){
|
||||||
|
if(m_iHint<aDots.size()-1)
|
||||||
|
ShowTimeHint(m_iHint+1);
|
||||||
|
}
|
||||||
|
else if(aDots.size()>1){
|
||||||
|
ShowTimeHint(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
int __fastcall TContentPanel::HitTest(int x, int y)
|
||||||
|
{
|
||||||
|
int iHit = 0;
|
||||||
|
|
||||||
|
if(y>m_nTopBound && y<m_nBottomBound && x>m_nLeftBound && x<m_xMaxHint){
|
||||||
|
int dx = x - m_xZero,
|
||||||
|
p = dx % m_xScaleGap;
|
||||||
|
if(p <= m_xHalfGap)
|
||||||
|
iHit = dx / m_xScaleGap;
|
||||||
|
else
|
||||||
|
iHit = dx / m_xScaleGap + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iHit;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TContentPanel::ShowTimeHint(int iHint)
|
||||||
|
{
|
||||||
|
TRect rectDraw;
|
||||||
|
rectDraw.top = m_nTopBound + 1;
|
||||||
|
rectDraw.bottom = m_nBottomBound - 1;
|
||||||
|
|
||||||
|
if(m_iHint>0){
|
||||||
|
int x = m_xZero + m_iHint * m_xScaleGap;
|
||||||
|
rectDraw.left = x - 1;
|
||||||
|
rectDraw.right = x + 1;
|
||||||
|
|
||||||
|
InvalidateRect( Handle, &rectDraw, false );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_iHint = iHint;
|
||||||
|
|
||||||
|
if(iHint>0){
|
||||||
|
int x = m_xZero + iHint * m_xScaleGap;
|
||||||
|
rectDraw.left = x - 1;
|
||||||
|
rectDraw.right = x + 1;
|
||||||
|
|
||||||
|
InvalidateRect( Handle, &rectDraw, false );
|
||||||
|
|
||||||
|
vector<TDot>& aDots = m_aDots.empty() ? g_aDots[m_iType] : m_aDots;
|
||||||
|
int ts = aDots[iHint].ts - 57600,
|
||||||
|
r = ts % 86400,
|
||||||
|
h, m, s;
|
||||||
|
h = r / 3600, r -= h * 3600;
|
||||||
|
m = r / 60, r -= m * 60;
|
||||||
|
s = r;
|
||||||
|
|
||||||
|
m_lblHint[0]->Top = m_nTopBound - m_lblHint[0]->Height;
|
||||||
|
m_lblHint[0]->Caption = IntToStr(aDots[iHint].val);
|
||||||
|
m_lblHint[1]->Top = m_nBottomBound + 1;
|
||||||
|
m_lblHint[1]->Caption = Format(String("%.2d:%.2d:%.2d"), ARRAYOFCONST((h, m, s)));
|
||||||
|
|
||||||
|
int xMin = m_xZero-1, xMax = m_nRightBound+2;
|
||||||
|
for(int i=0; i<2; i++){
|
||||||
|
int l = x - (m_lblHint[i]->Width>>1);
|
||||||
|
if(l<xMin)
|
||||||
|
l = xMin;
|
||||||
|
else if(l > xMax - m_lblHint[i]->Width)
|
||||||
|
l = xMax - m_lblHint[i]->Width;
|
||||||
|
|
||||||
|
m_lblHint[i]->Left = l;
|
||||||
|
m_lblHint[i]->Visible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_lblHint[0]->Visible = false;
|
||||||
|
m_lblHint[1]->Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef ContentPanelH
|
||||||
|
#define ContentPanelH
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class TContentPanel : public Extctrls::TPanel
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
//显示相关
|
||||||
|
int m_nTopGap,
|
||||||
|
m_nLeftBound,
|
||||||
|
m_nRightBound,
|
||||||
|
m_nTopBound,
|
||||||
|
m_nBottomBound,
|
||||||
|
m_nGap,
|
||||||
|
m_nCols,
|
||||||
|
m_nRows,
|
||||||
|
m_xZero,
|
||||||
|
m_yZero,
|
||||||
|
m_xScaleGap,
|
||||||
|
m_yScaleGap;
|
||||||
|
|
||||||
|
//刻度相关
|
||||||
|
int m_nAmoMax, m_nAmoMin, m_iAmoUnit, m_nRowMax, m_nRowMin, m_nAmoUnit;
|
||||||
|
double m_yScale;
|
||||||
|
//峰值
|
||||||
|
int m_iPeakU, m_iPeakL;
|
||||||
|
//点显示与压缩
|
||||||
|
vector<TDot> m_aDots;
|
||||||
|
int m_nOriDots, m_iType, m_iSample, m_iMask;
|
||||||
|
|
||||||
|
//显示时间
|
||||||
|
int m_iHint, m_xHalfGap, m_xMaxHint;
|
||||||
|
|
||||||
|
TLabel * m_lblHint[2];
|
||||||
|
|
||||||
|
bool __fastcall CalcXUnit();
|
||||||
|
bool __fastcall CalcYUnit(int nMax, int nMin, bool bInit=false);
|
||||||
|
void __fastcall Resample();
|
||||||
|
int __fastcall HitTest(int x, int y);
|
||||||
|
void __fastcall ShowTimeHint(int iHint);
|
||||||
|
|
||||||
|
void __fastcall PanMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
|
||||||
|
MESSAGE void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Message);
|
||||||
|
MESSAGE void __fastcall WMSize(TWMSize &Message);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
|
||||||
|
MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize)
|
||||||
|
END_MESSAGE_MAP(Vcl::Extctrls::TPanel)
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void __fastcall CreateWnd();
|
||||||
|
virtual void __fastcall Paint(void);
|
||||||
|
|
||||||
|
public:
|
||||||
|
__fastcall virtual TContentPanel(System::Classes::TComponent* AOwner);
|
||||||
|
__fastcall ~TContentPanel();
|
||||||
|
|
||||||
|
void __fastcall SetView(int iType);
|
||||||
|
void __fastcall UpdateView(int iType, bool bInit);
|
||||||
|
void __fastcall PanKeyDown(WORD Key);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include "GameSettings.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void TSettings::FromVersionD(TSettingsD& d)
|
||||||
|
{
|
||||||
|
//开始挂机
|
||||||
|
bWaitNew = d.bWaitNew;
|
||||||
|
bInitCurProfitByStart = d.bInitCurProfitByStart;
|
||||||
|
bInitTabProfitByStart = d.bInitTabProfitByStart;
|
||||||
|
bInitBetChipByStart = d.bInitBetChipByStart;
|
||||||
|
bInitClearTabLog = d.bInitClearTabLog;
|
||||||
|
|
||||||
|
//新局
|
||||||
|
bInitBetByGame = d.bInitBetByGame;
|
||||||
|
bInitChipByGame = d.bInitChipByGame;
|
||||||
|
bInitProfitByGame = d.bInitProfitByGame;
|
||||||
|
bInitLogByGame = d.bInitLogByGame;
|
||||||
|
|
||||||
|
//模拟本金
|
||||||
|
fSimAcc = d.fSimAcc;
|
||||||
|
bSimAccOn = d.bSimAccOn;
|
||||||
|
bNoBetLow = d.bNoBetLow;
|
||||||
|
bStopLow = d.bStopLow;
|
||||||
|
bSyncReal = d.bSyncReal;
|
||||||
|
|
||||||
|
//止赢止损
|
||||||
|
bTotalStopLos = d.bTotalStopLos;
|
||||||
|
bTotalStopWin = d.bTotalStopWin;
|
||||||
|
bTableStopLos = d.bTableStopLos;
|
||||||
|
bTableStopWin = d.bTableStopWin;
|
||||||
|
bAccStopWin = d.bAccStopWin;
|
||||||
|
bAccStopLos = d.bAccStopLos;
|
||||||
|
bU2DStop = d.bU2DStop;
|
||||||
|
bU2DMinPeak = d.bU2DMinPeak;
|
||||||
|
bU2DPause = d.bU2DPause;
|
||||||
|
nTotalStopLos = d.nTotalStopLos;
|
||||||
|
nTotalStopWin = d.nTotalStopWin;
|
||||||
|
nTableStopLos = d.nTableStopLos;
|
||||||
|
nTableStopWin = d.nTableStopWin;
|
||||||
|
nAccStopWin = d.nAccStopWin;
|
||||||
|
nAccStopLos = d.nAccStopLos;
|
||||||
|
nTotalWinPause = d.nTotalWinPause;
|
||||||
|
nTotalLosPause = d.nTotalLosPause;
|
||||||
|
nTableWinPause = d.nTableWinPause;
|
||||||
|
nTableLosPause = d.nTableLosPause;
|
||||||
|
nU2DStop = d.nU2DStop;
|
||||||
|
nU2DMinPeak = d.nU2DMinPeak;
|
||||||
|
nU2DPause = d.nU2DPause;
|
||||||
|
iTotalWinOp = d.iTotalWinOp;
|
||||||
|
iTotalLosOp = d.iTotalLosOp;
|
||||||
|
iTableWinOp = d.iTableWinOp;
|
||||||
|
iTableLosOp = d.iTableLosOp;
|
||||||
|
|
||||||
|
//模实转换
|
||||||
|
bR2SLos = d.bR2SLos;
|
||||||
|
bR2SWin = d.bR2SWin;
|
||||||
|
bS2RLos = d.bS2RLos;
|
||||||
|
bS2RWin = d.bS2RWin;
|
||||||
|
nR2SLos = d.nR2SLos;
|
||||||
|
nR2SWin = d.nR2SWin;
|
||||||
|
nS2RLos = d.nS2RLos;
|
||||||
|
nS2RWin = d.nS2RWin;
|
||||||
|
|
||||||
|
//游台
|
||||||
|
iFloatMode = d.iFloatMode;
|
||||||
|
|
||||||
|
//牌局选项
|
||||||
|
bHoldBet = d.bHoldBet;
|
||||||
|
bHaltBet = d.bHaltBet;
|
||||||
|
nHoldBet = d.nHoldBet;
|
||||||
|
nHaltBet = d.nHaltBet;
|
||||||
|
// bBetsNoTie = d.bBetsNoTie;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
+186
@@ -0,0 +1,186 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef GameSettingsH
|
||||||
|
#define GameSettingsH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//兼容USER_GAME_FILE VERSION 0x0D
|
||||||
|
class TSettingsD{
|
||||||
|
public:
|
||||||
|
//开始挂机
|
||||||
|
bool bWaitNew, //开始挂机等待新局
|
||||||
|
bInitCurProfitByStart, //开始挂机重置当期赢利
|
||||||
|
bInitTabProfitByStart, //开始挂机重置台桌赢利
|
||||||
|
bInitBetChipByStart; //开始挂机重置打法注码
|
||||||
|
|
||||||
|
//新局
|
||||||
|
bool bInitBetByGame, //新局初始化打法
|
||||||
|
bInitChipByGame, //新局初始化注码
|
||||||
|
bInitProfitByGame, //新局初始化赢利
|
||||||
|
bInitLogByGame; //新局清空台桌日志
|
||||||
|
|
||||||
|
//模拟本金
|
||||||
|
double fSimAcc; //模拟账户余额
|
||||||
|
bool bSimAccOn, //启用模拟本金
|
||||||
|
bNoBetLow, //模拟余额少于注码时不下注
|
||||||
|
bStopLow, //模拟余额低于限红时停止挂机
|
||||||
|
bSyncReal; //实打时同步增减模拟余额
|
||||||
|
|
||||||
|
//止赢止损
|
||||||
|
bool bTotalStopLos, //总体止损
|
||||||
|
bTotalStopWin, //总体止赢
|
||||||
|
bTableStopLos, //单桌止损
|
||||||
|
bTableStopWin, //单桌止赢
|
||||||
|
bAccStopWin, //账户止赢
|
||||||
|
bAccStopLos, //账户止损
|
||||||
|
bU2DStop, //回落止损
|
||||||
|
bU2DMinPeak, //回落止损有最小峰值
|
||||||
|
bU2DPause; //回落止损暂停重启
|
||||||
|
int nTotalStopLos, //总体止损金额
|
||||||
|
nTotalStopWin, //总体止赢金额
|
||||||
|
nTableStopLos, //单桌止损金额
|
||||||
|
nTableStopWin, //单桌止赢金额
|
||||||
|
nAccStopWin, //账户止赢金额
|
||||||
|
nAccStopLos, //账户止损金额
|
||||||
|
nTotalWinPause, //总体止赢暂停分钟数
|
||||||
|
nTotalLosPause, //总体止损暂停分钟数
|
||||||
|
nTableWinPause, //单桌止赢暂停分钟数
|
||||||
|
nTableLosPause, //单桌止损暂停分钟数
|
||||||
|
nU2DStop, //回落止损金额
|
||||||
|
nU2DMinPeak, //回落止损最小峰值
|
||||||
|
nU2DPause; //回落止损暂停分钟数
|
||||||
|
int iTotalWinOp, //总体止赢后操作
|
||||||
|
iTotalLosOp, //总体止损后操作
|
||||||
|
iTableWinOp, //单桌止赢后操作
|
||||||
|
iTableLosOp; //单桌止损后操作
|
||||||
|
|
||||||
|
//模实转换
|
||||||
|
bool bR2SLos, //实打亏损转模拟
|
||||||
|
bR2SWin, //实打赢利转模拟
|
||||||
|
bS2RLos, //模拟亏损转实打
|
||||||
|
bS2RWin; //模拟赢利转实打
|
||||||
|
int nR2SLos, //实打转模拟亏损金额
|
||||||
|
nR2SWin, //实打转模拟赢利金额
|
||||||
|
nS2RLos, //模拟转实打亏损金额
|
||||||
|
nS2RWin; //模拟转实打赢利金额
|
||||||
|
|
||||||
|
//游台
|
||||||
|
bool bFloat; //是否开启游台
|
||||||
|
int iFloatMode; //游台模式:0=不开启游台 1=每项换台 2=洗牌换台 4=输换台 8=赢换台 16=和换台
|
||||||
|
|
||||||
|
//开始挂机
|
||||||
|
bool bInitClearTabLog; //清空台桌下注记录
|
||||||
|
|
||||||
|
//牌局选项
|
||||||
|
bool bHoldBet, //开局X手后开始下注
|
||||||
|
bHaltBet; //开局X手后停止下注
|
||||||
|
int nHoldBet, //开局开始下注手数
|
||||||
|
nHaltBet; //开局停止下注手数
|
||||||
|
|
||||||
|
TSettingsD() {
|
||||||
|
memset( this, 0, sizeof(TSettingsD) );
|
||||||
|
bInitBetChipByStart = bInitTabProfitByStart = bNoBetLow = nTotalWinPause = nTotalLosPause = 1;
|
||||||
|
nTotalStopLos = nTotalStopWin = nTableStopLos = nTableStopWin
|
||||||
|
= nR2SLos = nR2SWin = nS2RLos = nS2RWin = 1000;
|
||||||
|
fSimAcc = 10000;
|
||||||
|
nU2DStop = nU2DMinPeak = nAccStopWin = 2000;
|
||||||
|
nAccStopLos = 500;
|
||||||
|
nU2DPause = 3;
|
||||||
|
|
||||||
|
bInitClearTabLog = 1;
|
||||||
|
bHoldBet = bHaltBet = false;
|
||||||
|
nHoldBet = 5, nHaltBet = 50;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
//当前设置
|
||||||
|
class TSettings{
|
||||||
|
public:
|
||||||
|
//开始挂机
|
||||||
|
bool bWaitNew, //开始挂机等待新局
|
||||||
|
bInitCurProfitByStart, //开始挂机重置当期赢利
|
||||||
|
bInitTabProfitByStart, //开始挂机重置台桌赢利
|
||||||
|
bInitBetChipByStart, //开始挂机重置打法注码
|
||||||
|
bInitClearTabLog; //清空台桌下注记录
|
||||||
|
|
||||||
|
//新局
|
||||||
|
bool bInitBetByGame, //新局初始化打法
|
||||||
|
bInitChipByGame, //新局初始化注码
|
||||||
|
bInitProfitByGame, //新局初始化赢利
|
||||||
|
bInitLogByGame; //新局清空台桌日志
|
||||||
|
|
||||||
|
//模拟本金
|
||||||
|
double fSimAcc; //模拟账户余额
|
||||||
|
bool bSimAccOn, //启用模拟本金
|
||||||
|
bNoBetLow, //模拟余额少于注码时不下注
|
||||||
|
bStopLow, //模拟余额低于限红时停止挂机
|
||||||
|
bSyncReal; //实打时同步增减模拟余额
|
||||||
|
|
||||||
|
//止赢止损
|
||||||
|
bool bTotalStopLos, //总体止损
|
||||||
|
bTotalStopWin, //总体止赢
|
||||||
|
bTableStopLos, //单桌止损
|
||||||
|
bTableStopWin, //单桌止赢
|
||||||
|
bAccStopWin, //账户止赢
|
||||||
|
bAccStopLos, //账户止损
|
||||||
|
bU2DStop, //回落止损
|
||||||
|
bU2DMinPeak, //回落止损有最小峰值
|
||||||
|
bU2DPause; //回落止损暂停重启
|
||||||
|
int nTotalStopLos, //总体止损金额
|
||||||
|
nTotalStopWin, //总体止赢金额
|
||||||
|
nTableStopLos, //单桌止损金额
|
||||||
|
nTableStopWin, //单桌止赢金额
|
||||||
|
nAccStopWin, //账户止赢金额
|
||||||
|
nAccStopLos, //账户止损金额
|
||||||
|
nTotalWinPause, //总体止赢暂停分钟数
|
||||||
|
nTotalLosPause, //总体止损暂停分钟数
|
||||||
|
nTableWinPause, //单桌止赢暂停分钟数
|
||||||
|
nTableLosPause, //单桌止损暂停分钟数
|
||||||
|
nU2DStop, //回落止损金额
|
||||||
|
nU2DMinPeak, //回落止损最小峰值
|
||||||
|
nU2DPause; //回落止损暂停分钟数
|
||||||
|
int iTotalWinOp, //总体止赢后操作
|
||||||
|
iTotalLosOp, //总体止损后操作
|
||||||
|
iTableWinOp, //单桌止赢后操作
|
||||||
|
iTableLosOp; //单桌止损后操作
|
||||||
|
|
||||||
|
//模实转换
|
||||||
|
bool bR2SLos, //实打亏损转模拟
|
||||||
|
bR2SWin, //实打赢利转模拟
|
||||||
|
bS2RLos, //模拟亏损转实打
|
||||||
|
bS2RWin; //模拟赢利转实打
|
||||||
|
int nR2SLos, //实打转模拟亏损金额
|
||||||
|
nR2SWin, //实打转模拟赢利金额
|
||||||
|
nS2RLos, //模拟转实打亏损金额
|
||||||
|
nS2RWin; //模拟转实打赢利金额
|
||||||
|
|
||||||
|
//游台
|
||||||
|
int iFloatMode; //游台模式:0=不开启游台 1=每项换台 2=洗牌换台 4=输换台 8=赢换台 16=和换台
|
||||||
|
|
||||||
|
//牌局选项
|
||||||
|
bool bHoldBet, //开局X手后开始下注
|
||||||
|
bHaltBet; //开局X手后停止下注
|
||||||
|
int nHoldBet, //开局开始下注手数
|
||||||
|
nHaltBet; //开局停止下注手数
|
||||||
|
bool bBetsNoTie; //连续下注忽略和
|
||||||
|
|
||||||
|
TSettings() {
|
||||||
|
memset( this, 0, sizeof(TSettings) );
|
||||||
|
bInitBetChipByStart = bInitTabProfitByStart = bNoBetLow = nTotalWinPause = nTotalLosPause = 1;
|
||||||
|
nTotalStopLos = nTotalStopWin = nTableStopLos = nTableStopWin
|
||||||
|
= nR2SLos = nR2SWin = nS2RLos = nS2RWin = 1000;
|
||||||
|
fSimAcc = 10000;
|
||||||
|
nU2DStop = nU2DMinPeak = nAccStopWin = 2000;
|
||||||
|
nAccStopLos = 500;
|
||||||
|
nU2DPause = 3;
|
||||||
|
|
||||||
|
bInitClearTabLog = 1;
|
||||||
|
bHoldBet = bHaltBet = false;
|
||||||
|
nHoldBet = 5, nHaltBet = 50;
|
||||||
|
};
|
||||||
|
|
||||||
|
void FromVersionD(TSettingsD& d);
|
||||||
|
};
|
||||||
|
|
||||||
+2065
File diff suppressed because it is too large
Load Diff
+401
@@ -0,0 +1,401 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef GameUnitH
|
||||||
|
#define GameUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <system.hpp>
|
||||||
|
#include <vector>
|
||||||
|
#include "PolicyUnit.h"
|
||||||
|
#include "SimpleMutex.h"
|
||||||
|
#include "GameSettings.h"
|
||||||
|
|
||||||
|
#define EXCODE_SERVERWAIT 0x01
|
||||||
|
#define EXCODE_OPCOMPLETE 0x010
|
||||||
|
#define EXCODE_USERCANCEL 0x1000
|
||||||
|
#define EXCODE_INSUFFICIENT 0x1001
|
||||||
|
#define EXCODE_REACHWINLIMIT 0x1003
|
||||||
|
#define EXCODE_REACHLOSLIMIT 0x1004
|
||||||
|
#define EXCODE_WEBSITEERROR 0x1005
|
||||||
|
#define EXCODE_GAMEOVER 0x1006
|
||||||
|
#define EXCODE_USERINVALID 0x1007
|
||||||
|
#define EXCODE_USEREXPIRE 0x1008
|
||||||
|
#define EXCODE_USERLOGOUT 0x1009
|
||||||
|
#define EXCODE_NOBETWAY 0x100A
|
||||||
|
#define EXCODE_REACHLIMIT 0x100B
|
||||||
|
#define EXCODE_SERVERDOWN 0x100C
|
||||||
|
#define EXCODE_RESPONSEERR 0x100D
|
||||||
|
#define EXCODE_CANTSETPAGE 0x100E
|
||||||
|
#define EXCODE_UNKNOWN 0x1100
|
||||||
|
|
||||||
|
#define UM_TAB_UPDATE WM_USER+0x2000
|
||||||
|
#define UM_LOG_UPDATE WM_USER+0x2001
|
||||||
|
#define UM_CHART_UPDATE WM_USER+0x2002
|
||||||
|
#define UM_RUN_TIME WM_USER+0x2003
|
||||||
|
#define UM_STATE_UPDATE WM_USER+0x2004
|
||||||
|
#define UM_CHANGE_ROAD WM_USER+0x2005
|
||||||
|
#define UM_MANUAL_SET WM_USER+0x2006
|
||||||
|
#define UM_ENTER_TABLE WM_USER+0x2007
|
||||||
|
#define UM_FLOAT_BET WM_USER+0x2008
|
||||||
|
#define UM_FLOAT_DEAD WM_USER+0x2009
|
||||||
|
#define UM_GLOBAL_BET WM_USER+0x200A
|
||||||
|
#define UM_GLOBAL_DEAD WM_USER+0x200B
|
||||||
|
|
||||||
|
#define UPDATE_ROAD 0
|
||||||
|
#define UPDATE_STATUS 1
|
||||||
|
#define UPDATE_TIME 2
|
||||||
|
#define UPDATE_MANBET 3
|
||||||
|
#define UPDATE_MANRES 4
|
||||||
|
#define UPDATE_RESET 5 //重置数据
|
||||||
|
#define UPDATE_IP 6 //重置独立策略
|
||||||
|
|
||||||
|
#define STATE_AMOUNT 0
|
||||||
|
#define STATE_BET_R 1
|
||||||
|
#define STATE_PEAK 2
|
||||||
|
#define STATE_COUNT 3
|
||||||
|
#define STATE_MISC 4
|
||||||
|
#define STATE_MAN 5
|
||||||
|
#define STATE_REAL 6
|
||||||
|
#define STATE_BALANCE 7
|
||||||
|
#define STATE_LIMIT 8
|
||||||
|
#define STATE_ALL 0x10
|
||||||
|
|
||||||
|
#define LOGEVT_START 0
|
||||||
|
#define LOGEVT_BET 1
|
||||||
|
#define LOGEVT_RES 2
|
||||||
|
#define LOGEVT_ROUND 3
|
||||||
|
#define LOGEVT_DEAD 4
|
||||||
|
#define LOGEVT_STOPWIN 5
|
||||||
|
#define LOGEVT_STOPLOS 6
|
||||||
|
#define LOGEVT_END 7
|
||||||
|
#define LOGEVT_RESET 8
|
||||||
|
#define LOGEVT_SWITCH 9
|
||||||
|
#define LOGEVT_QUASH 10
|
||||||
|
|
||||||
|
#define ST_INIT 0
|
||||||
|
#define ST_NOBET 1
|
||||||
|
#define ST_BETSET 2
|
||||||
|
#define ST_BETTING 3
|
||||||
|
#define ST_BETTED 4
|
||||||
|
#define ST_EXPIRED 5
|
||||||
|
#define ST_PAID 6
|
||||||
|
#define ST_CANCELED 7
|
||||||
|
#define ST_FAILED 8
|
||||||
|
#define ST_QUASH 9 //注单撤销
|
||||||
|
#define ST_ROUND 10
|
||||||
|
#define ST_SHUFFLE 11
|
||||||
|
|
||||||
|
#define TAB_WAIT -1
|
||||||
|
#define TAB_NOWAY -2
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//图表数据
|
||||||
|
typedef struct tagDot{
|
||||||
|
int val; //数值
|
||||||
|
int ts; //时间
|
||||||
|
|
||||||
|
tagDot(){ memset( this, 0, sizeof(tagDot)); };
|
||||||
|
tagDot(int v, int t){ val=v,ts=t; };
|
||||||
|
}TDot;
|
||||||
|
|
||||||
|
//挂机日志
|
||||||
|
typedef struct tagBetLog{
|
||||||
|
int ts; //时间
|
||||||
|
int num; //数值
|
||||||
|
char tno[14];//台桌名
|
||||||
|
char ev; //事件
|
||||||
|
char op; //选项
|
||||||
|
|
||||||
|
tagBetLog(){memset( this, 0, sizeof(tagBetLog));};
|
||||||
|
}TBetLog;
|
||||||
|
|
||||||
|
// 挂机数据
|
||||||
|
typedef struct tagBetData{
|
||||||
|
double profits[8]; //总赢利/总赢利峰值/总赢利谷值/当期赢利/实打总赢利/手工总赢利/当期模拟赢利/当期实打赢利
|
||||||
|
int amounts[3], //总流水/实打流水/手工流水
|
||||||
|
counts[4], //赢计数/输计数/最大连赢/连输计数
|
||||||
|
maxChip, //最大注额
|
||||||
|
dead; //爆缆次数
|
||||||
|
|
||||||
|
tagBetData(){Reset();};
|
||||||
|
void Reset(){memset( this, 0, sizeof(tagBetData));};
|
||||||
|
}TBetData;
|
||||||
|
|
||||||
|
//手工下注
|
||||||
|
typedef struct tagManBet{
|
||||||
|
int chips[3]; //注码 0=庄 1=闲 2=平
|
||||||
|
int state; //状态 ST_INIT/ST_BETTING/ST_BETTED
|
||||||
|
|
||||||
|
tagManBet(){memset( this, 0, sizeof(tagManBet));};
|
||||||
|
}TManBet;
|
||||||
|
|
||||||
|
//阶梯注码
|
||||||
|
class TRankChip{
|
||||||
|
protected:
|
||||||
|
int iType, //注码类型
|
||||||
|
iRank, //注码层数
|
||||||
|
nRnkChip; //当层注码
|
||||||
|
bool bWait; //等待结算
|
||||||
|
TChipPolicy* pPolicy; //注码方案
|
||||||
|
|
||||||
|
public:
|
||||||
|
TRankChip();
|
||||||
|
|
||||||
|
bool __fastcall IsTypeOf(int type){return type==iType;};
|
||||||
|
|
||||||
|
void __fastcall SetPolicy(TChipPolicy* pCP);
|
||||||
|
virtual int __fastcall GetChip(){return bWait || iRank<0 ? -1 : nRnkChip;};
|
||||||
|
virtual void __fastcall Reset() = 0;
|
||||||
|
virtual int __fastcall HandleResult(int res, double wl) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
//层级注码
|
||||||
|
class TTierChip : public TRankChip{
|
||||||
|
int nWLDiff, //本层赢输差
|
||||||
|
nAccChip, //累加注码
|
||||||
|
nLos, //当层输额
|
||||||
|
nCount; //当层下注计数
|
||||||
|
|
||||||
|
public:
|
||||||
|
TTierChip();
|
||||||
|
|
||||||
|
virtual void __fastcall Reset();
|
||||||
|
// virtual int __fastcall GetChip(){return nCurrChip;};
|
||||||
|
virtual int __fastcall HandleResult(int res, double wl);
|
||||||
|
};
|
||||||
|
|
||||||
|
//阶梯注码
|
||||||
|
class TLevelChip : public TRankChip{
|
||||||
|
protected:
|
||||||
|
bool bGlobal; //总体计算
|
||||||
|
double fWLDiff; //本层输赢金额
|
||||||
|
|
||||||
|
public:
|
||||||
|
TLevelChip(bool bG=false);
|
||||||
|
|
||||||
|
virtual void __fastcall Reset();
|
||||||
|
virtual void __fastcall CalcChip();
|
||||||
|
virtual void __fastcall CalcLevelChip(bool bLevel, int res);
|
||||||
|
virtual int __fastcall HandleResult(int res, double wl);
|
||||||
|
};
|
||||||
|
|
||||||
|
//组合阶梯注码
|
||||||
|
class TComboChip : public TLevelChip{
|
||||||
|
int iRnkSeq; //当层注码步骤
|
||||||
|
int nRnkMul; //当层倍数
|
||||||
|
|
||||||
|
TChipPolicy* pRnkPolicy; //当层注码方案
|
||||||
|
public:
|
||||||
|
TComboChip(bool bG=false);
|
||||||
|
|
||||||
|
virtual void __fastcall Reset();
|
||||||
|
virtual void __fastcall CalcChip();
|
||||||
|
virtual void __fastcall CalcLevelChip(bool bLevel, int res);
|
||||||
|
int __fastcall GetRankSeq(int res, int iRnk, int iSeq);
|
||||||
|
int __fastcall GetComboChip(int& iRnk, int& iSeq);
|
||||||
|
};
|
||||||
|
|
||||||
|
//赢输次差注码
|
||||||
|
class TWLDiffChip : public TRankChip{
|
||||||
|
protected:
|
||||||
|
bool bGlobal; //总体计算
|
||||||
|
int nWLDiff; //输赢次差
|
||||||
|
|
||||||
|
public:
|
||||||
|
TWLDiffChip(bool bG=false);
|
||||||
|
|
||||||
|
virtual void __fastcall Reset();
|
||||||
|
virtual void __fastcall CalcChip();
|
||||||
|
virtual int __fastcall HandleResult(int res, double wl);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//路珠图
|
||||||
|
class TRoadmap{
|
||||||
|
public:
|
||||||
|
vector<char*> aCols;
|
||||||
|
int iCol, iRow, iRoot;
|
||||||
|
bool bBend;
|
||||||
|
|
||||||
|
TRoadmap();
|
||||||
|
void __fastcall DrawMap(char curr, char last);
|
||||||
|
void __fastcall Clear();
|
||||||
|
void __fastcall CheckColumn();
|
||||||
|
};
|
||||||
|
|
||||||
|
//台桌
|
||||||
|
class TTableFrame;
|
||||||
|
class TGame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int iGame; //gameId
|
||||||
|
//台桌相关
|
||||||
|
String vid; //房间号
|
||||||
|
String gmcode;
|
||||||
|
int gmstatus; //0=结算 1=下注 2=开牌 11=洗牌 12=维护
|
||||||
|
int timeout;
|
||||||
|
int countdown; //固定倒计时
|
||||||
|
char winCount[3]; //庄闲计数 [0]庄 [1]闲 [2]平
|
||||||
|
String bcard; //庄牌 2-3张 0-9 0,5,2
|
||||||
|
String pcard; //闲牌 3,4,_
|
||||||
|
|
||||||
|
bool bRun, //运行
|
||||||
|
bRev, //反打
|
||||||
|
bPause, //暂停
|
||||||
|
bReset, //是否重置打法注码
|
||||||
|
bBreak; //是否等待新局
|
||||||
|
|
||||||
|
int iRoad;
|
||||||
|
bool bIndPolicy; //是否独立策略
|
||||||
|
int iBetPolicy, iChipPolicy, nChipMul; //独立策略
|
||||||
|
|
||||||
|
//下注相关
|
||||||
|
int iState; //INIT/BETTING/BETTED
|
||||||
|
int iBet; //下注项
|
||||||
|
int nChip; //下注金额
|
||||||
|
int iBetSeq; //下注手数+打法
|
||||||
|
int iChipSeq; //注码步骤
|
||||||
|
// bool bGlobalChip; //是否全局注码
|
||||||
|
bool bReal; //模拟/实打 0=模拟 1=实打
|
||||||
|
vector<char> aBets; //剩余连续下注项
|
||||||
|
|
||||||
|
vector<TManBet> aManBets; //手工下注
|
||||||
|
|
||||||
|
TRankChip * pRankChip; //层级注码
|
||||||
|
|
||||||
|
//统计相关
|
||||||
|
double profit; //当前赢利
|
||||||
|
int seqCount[2]; //连赢/连输计数
|
||||||
|
|
||||||
|
HWND hTable; //台桌句柄,通过消息操作UI
|
||||||
|
CSema* pSema;
|
||||||
|
|
||||||
|
//路单数据
|
||||||
|
vector<char> aRes; //历史结果
|
||||||
|
vector<char> aRoad[4]; //大路/大眼路/小路/小强路
|
||||||
|
char lastRoad[4];
|
||||||
|
TRoadmap aMap[4]; //路珠图
|
||||||
|
|
||||||
|
TGame(int iG);
|
||||||
|
~TGame();
|
||||||
|
|
||||||
|
void __fastcall HandleResult(int op=0); //op =0正常处理 =1数据异常 =2结算超时 =3维护注销
|
||||||
|
void __fastcall AutoBetOn(bool bReset=false);
|
||||||
|
void __fastcall AutoBetOff(bool bBreak=false);
|
||||||
|
void __fastcall ManualBetOn(int chips[]);
|
||||||
|
void __fastcall ManualBetOff();
|
||||||
|
void __fastcall BetResp(bool bSuc);
|
||||||
|
void __fastcall Shuffle();
|
||||||
|
void __fastcall CalcBet();
|
||||||
|
void __fastcall CalcChip();
|
||||||
|
int __fastcall CalcResult(int op);
|
||||||
|
void __fastcall Reset();
|
||||||
|
void __fastcall ResetBet();
|
||||||
|
void __fastcall ClearBets();
|
||||||
|
int __fastcall ParseCard(int c);
|
||||||
|
void __fastcall ClearResults();
|
||||||
|
void __fastcall BuildRoadmap(char wt);
|
||||||
|
bool __fastcall CanBet();
|
||||||
|
TBetLog* __fastcall NewBetLog();
|
||||||
|
void __fastcall GameOn();
|
||||||
|
void __fastcall GameOff();
|
||||||
|
void __fastcall BetResp(int state, int chips[]=NULL); //state 下注状态 0=成功 10=低于限红 11=高于限红 25=已停止下注 26=余额不足 其它=未知
|
||||||
|
void __fastcall Pause(bool bP){bPause = bP;};
|
||||||
|
int __fastcall Color2Bet(TBetPolicy* pBP, char clr); //下三路下注 clr=红蓝 返回庄闲
|
||||||
|
void __fastcall ClearRankChip();
|
||||||
|
TRankChip* __fastcall GetRankChip(int type);
|
||||||
|
void __fastcall ResetIP();
|
||||||
|
};
|
||||||
|
|
||||||
|
class TGameArray : public vector<TGame*>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CSema* pSema;
|
||||||
|
vector<TGame*> aGames;
|
||||||
|
TBetData betData; //总输赢状态及计数
|
||||||
|
|
||||||
|
//游台相关
|
||||||
|
bool bFloat, //是否游台
|
||||||
|
bSwitchable; //可否换台
|
||||||
|
int iFloatGame; //下注台号
|
||||||
|
|
||||||
|
//全局注码
|
||||||
|
int iChipSeq, //全局注码步骤
|
||||||
|
seqCount[2]; //连赢/连输计数
|
||||||
|
|
||||||
|
TRankChip * pRankChip; //层级注码
|
||||||
|
|
||||||
|
int runTime, //挂机时长
|
||||||
|
nBetted[3]; //待结算的下注 模拟/实打/全局计算
|
||||||
|
double fCurrProfitPeak; //最大当期赢利
|
||||||
|
|
||||||
|
TGameArray();
|
||||||
|
~TGameArray();
|
||||||
|
|
||||||
|
void __fastcall Init(String sRooms);
|
||||||
|
TGame* __fastcall NewGame(int iG, String vid, int ind);
|
||||||
|
TGame* __fastcall GetGame(int iG);
|
||||||
|
int __fastcall FindGame(int iG, TGame*& pGame);
|
||||||
|
void __fastcall ClearAllGames();
|
||||||
|
void __fastcall CalcBet();
|
||||||
|
void __fastcall Reset();
|
||||||
|
void __fastcall ResetFloat();
|
||||||
|
|
||||||
|
void __fastcall SetSwitchable(bool bS, int iG);
|
||||||
|
bool __fastcall CanFloatBet(int iG);
|
||||||
|
void __fastcall GameOn();
|
||||||
|
void __fastcall GameOff();
|
||||||
|
void __fastcall AllBetOff();
|
||||||
|
void __fastcall ClearRankChip();
|
||||||
|
void __fastcall ResetRankChip();
|
||||||
|
TRankChip* __fastcall GetRankChip(int type);
|
||||||
|
void __fastcall SetCountDown(String s);
|
||||||
|
void __fastcall ResetRankSeq();
|
||||||
|
};
|
||||||
|
|
||||||
|
class TIPGame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
String vid; //gameId
|
||||||
|
int iBetPolicy, iChipPolicy, nChipMul; //独立策略
|
||||||
|
TGame* pGame;
|
||||||
|
|
||||||
|
TIPGame(String v, int b, int c, int m){pGame=NULL, vid=v,
|
||||||
|
iBetPolicy=b, iChipPolicy=c, nChipMul=m;};
|
||||||
|
TIPGame(TGame* pG){pGame = pG, vid=pG->vid, iBetPolicy=pG->iBetPolicy,
|
||||||
|
iChipPolicy=pG->iChipPolicy, nChipMul=pG->nChipMul;};
|
||||||
|
};
|
||||||
|
|
||||||
|
class TIPGameArray : public vector<TIPGame*>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int iPlatform;
|
||||||
|
|
||||||
|
int __fastcall FindGame(String vid, TIPGame*& pIG);
|
||||||
|
void __fastcall ClearAll();
|
||||||
|
void __fastcall AddGame(TGame* pG);
|
||||||
|
void __fastcall DelGame(TGame* pG);
|
||||||
|
void __fastcall AddIPGame(String v, int b, int c, int m);
|
||||||
|
|
||||||
|
TIPGameArray(){iPlatform==0;};
|
||||||
|
~TIPGameArray();
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
int __fastcall Vid2Gid(String vid);
|
||||||
|
|
||||||
|
extern TSettings g_settings; //基本设置
|
||||||
|
extern TGameArray g_aGames;
|
||||||
|
extern double g_fBalance; //账户余额
|
||||||
|
extern int g_iRoad; //全局路珠类型 0=六珠路 1=大路 2=大眼路 3=小路 4=小强路
|
||||||
|
extern bool g_bSimulate, //模拟/实打
|
||||||
|
g_bGameOn, //开始挂机
|
||||||
|
g_bShowSetting, //开始挂机时显示设置页面
|
||||||
|
g_bDeadPause, //全局爆缆暂停
|
||||||
|
g_bBetPause; //总体止赢止损暂停
|
||||||
|
extern int g_MinOnBet, //最小注码
|
||||||
|
g_MaxOnBet; //最大注码
|
||||||
|
extern int g_nRBReport; //实打流水上报
|
||||||
|
extern vector<TDot> g_aDots[4]; //资金图表数据 总赢利/模拟本金/账户余额/总输赢差
|
||||||
|
extern TIPGameArray g_aIPGames; //独立策略台桌
|
||||||
|
#endif
|
||||||
+1320
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef HookJSH
|
||||||
|
#define HookJSH
|
||||||
|
#include <vcl.h>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern String linkJS_PA, loginJS_PA, baseJS_PA, stopJS_PA, enterJS_PA,
|
||||||
|
userJS_PA, goLinkJS_PA, goLobbyJS_PA, expireJS_PA;
|
||||||
|
extern String stopJS_AB, msgJS_AB, goLinkJS_AB, expireJS_AB;
|
||||||
|
extern String loginJS_DB, userJS_DB, expireJS_DB, msgJS_DB;
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "InfoFrameUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TInfoFrame *InfoFrame;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TInfoFrame::TInfoFrame(TComponent* Owner)
|
||||||
|
: TFrame(Owner)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TInfoFrame::FrameResize(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_panInfo1->Width = Width - 4;
|
||||||
|
m_panInfo2->Width = Width - 4;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,816 @@
|
|||||||
|
object InfoFrame: TInfoFrame
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 1234
|
||||||
|
Height = 53
|
||||||
|
DoubleBuffered = False
|
||||||
|
Color = clRed
|
||||||
|
Ctl3D = False
|
||||||
|
ParentBackground = False
|
||||||
|
ParentColor = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
TabOrder = 0
|
||||||
|
OnResize = FrameResize
|
||||||
|
object m_panInfo1: TPanel
|
||||||
|
Left = 2
|
||||||
|
Top = 27
|
||||||
|
Width = 1231
|
||||||
|
Height = 24
|
||||||
|
Align = alCustom
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Color = clBlack
|
||||||
|
DoubleBuffered = False
|
||||||
|
FullRepaint = False
|
||||||
|
ParentBackground = False
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
TabOrder = 0
|
||||||
|
object m_lblCurProfit: TLabel
|
||||||
|
Left = 77
|
||||||
|
Top = 3
|
||||||
|
Width = 60
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape1: TShape
|
||||||
|
Left = 140
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Shape2: TShape
|
||||||
|
Left = 282
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Shape3: TShape
|
||||||
|
Left = 430
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label7: TLabel
|
||||||
|
Left = 145
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #26368#22823#36194#21033':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblPeakU: TLabel
|
||||||
|
Left = 216
|
||||||
|
Top = 3
|
||||||
|
Width = 66
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape4: TShape
|
||||||
|
Left = 542
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label9: TLabel
|
||||||
|
Left = 287
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #26368#22823#20111#25439':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblPeakL: TLabel
|
||||||
|
Left = 358
|
||||||
|
Top = 3
|
||||||
|
Width = 70
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clFuchsia
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape5: TShape
|
||||||
|
Left = 666
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label11: TLabel
|
||||||
|
Left = 546
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #24635#36194#27425#25968':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblWinCount: TLabel
|
||||||
|
Left = 616
|
||||||
|
Top = 3
|
||||||
|
Width = 48
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape6: TShape
|
||||||
|
Left = 790
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label13: TLabel
|
||||||
|
Left = 670
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #24635#36755#27425#25968':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblLosCount: TLabel
|
||||||
|
Left = 740
|
||||||
|
Top = 3
|
||||||
|
Width = 48
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape7: TShape
|
||||||
|
Left = 892
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label15: TLabel
|
||||||
|
Left = 795
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #26368#22823#36830#36194':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblSWin: TLabel
|
||||||
|
Left = 867
|
||||||
|
Top = 3
|
||||||
|
Width = 21
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape8: TShape
|
||||||
|
Left = 992
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label17: TLabel
|
||||||
|
Left = 897
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #26368#22823#36830#36755':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblSLos: TLabel
|
||||||
|
Left = 969
|
||||||
|
Top = 3
|
||||||
|
Width = 21
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label19: TLabel
|
||||||
|
Left = 998
|
||||||
|
Top = 4
|
||||||
|
Width = 53
|
||||||
|
Height = 16
|
||||||
|
Caption = #29190#32518#25968':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblDead: TLabel
|
||||||
|
Left = 1055
|
||||||
|
Top = 3
|
||||||
|
Width = 39
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label3: TLabel
|
||||||
|
Left = 5
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #24403#26399#36194#21033':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label2: TLabel
|
||||||
|
Left = 434
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #26368#22823#27880#30721':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblMaxChip: TLabel
|
||||||
|
Left = 505
|
||||||
|
Top = 3
|
||||||
|
Width = 35
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape9: TShape
|
||||||
|
Left = 1096
|
||||||
|
Top = -1
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object m_lblSRProfit: TLabel
|
||||||
|
Left = 1172
|
||||||
|
Top = 3
|
||||||
|
Width = 55
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblSRTitle: TLabel
|
||||||
|
Left = 1101
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #24403#21069#27169#25311':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object m_panInfo2: TPanel
|
||||||
|
Left = 2
|
||||||
|
Top = 2
|
||||||
|
Width = 1231
|
||||||
|
Height = 24
|
||||||
|
Align = alCustom
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Color = clBlack
|
||||||
|
DoubleBuffered = False
|
||||||
|
FullRepaint = False
|
||||||
|
ParentBackground = False
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
TabOrder = 1
|
||||||
|
object m_lblManAmount: TLabel
|
||||||
|
Left = 1035
|
||||||
|
Top = 3
|
||||||
|
Width = 57
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblRealAmount: TLabel
|
||||||
|
Left = 760
|
||||||
|
Top = 3
|
||||||
|
Width = 61
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label14: TLabel
|
||||||
|
Left = 689
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #23454#25171#27969#27700':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape13: TShape
|
||||||
|
Left = 294
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Shape14: TShape
|
||||||
|
Left = 170
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label16: TLabel
|
||||||
|
Left = 827
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #23454#25171#36194#21033':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblRealProfit: TLabel
|
||||||
|
Left = 899
|
||||||
|
Top = 3
|
||||||
|
Width = 57
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape15: TShape
|
||||||
|
Left = 548
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label20: TLabel
|
||||||
|
Left = 1101
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #25163#24037#36194#21033':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblManProfit: TLabel
|
||||||
|
Left = 1172
|
||||||
|
Top = 3
|
||||||
|
Width = 55
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape16: TShape
|
||||||
|
Left = 685
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Shape24: TShape
|
||||||
|
Left = 411
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Label39: TLabel
|
||||||
|
Left = 964
|
||||||
|
Top = 4
|
||||||
|
Width = 69
|
||||||
|
Height = 16
|
||||||
|
Caption = #25163#24037#27969#27700':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Shape17: TShape
|
||||||
|
Left = 822
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Shape19: TShape
|
||||||
|
Left = 1096
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object Shape20: TShape
|
||||||
|
Left = 959
|
||||||
|
Top = 0
|
||||||
|
Width = 2
|
||||||
|
Height = 24
|
||||||
|
Pen.Color = clCream
|
||||||
|
end
|
||||||
|
object m_lblAccountTitle: TLabel
|
||||||
|
Left = 298
|
||||||
|
Top = 4
|
||||||
|
Width = 37
|
||||||
|
Height = 16
|
||||||
|
Hint = #27169#25311#26102#26174#31034#27169#25311#26412#37329#65292#23454#25171#26102#26174#31034#30495#23454#20313#39069
|
||||||
|
Caption = #20313#39069':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label4: TLabel
|
||||||
|
Left = 416
|
||||||
|
Top = 4
|
||||||
|
Width = 53
|
||||||
|
Height = 16
|
||||||
|
Caption = #24635#27969#27700':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label5: TLabel
|
||||||
|
Left = 553
|
||||||
|
Top = 4
|
||||||
|
Width = 53
|
||||||
|
Height = 16
|
||||||
|
Caption = #24635#36194#21033':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblAccount: TLabel
|
||||||
|
Left = 338
|
||||||
|
Top = 3
|
||||||
|
Width = 71
|
||||||
|
Height = 16
|
||||||
|
Hint = #27169#25311#26102#26174#31034#27169#25311#26412#37329#65292#23454#25171#26102#26174#31034#30495#23454#20313#39069
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblAmount: TLabel
|
||||||
|
Left = 471
|
||||||
|
Top = 3
|
||||||
|
Width = 76
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblTotProfit: TLabel
|
||||||
|
Left = 609
|
||||||
|
Top = 3
|
||||||
|
Width = 73
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblLimits: TLabel
|
||||||
|
Left = 214
|
||||||
|
Top = 3
|
||||||
|
Width = 77
|
||||||
|
Height = 16
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label10: TLabel
|
||||||
|
Left = 174
|
||||||
|
Top = 4
|
||||||
|
Width = 37
|
||||||
|
Height = 16
|
||||||
|
Caption = #38480#32418':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_lblAccName: TLabel
|
||||||
|
Left = 45
|
||||||
|
Top = 3
|
||||||
|
Width = 123
|
||||||
|
Height = 16
|
||||||
|
Hint = #36134#21495#21487#28857#20987#21491#38190#22797#21046
|
||||||
|
Alignment = taCenter
|
||||||
|
AutoSize = False
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object Label22: TLabel
|
||||||
|
Left = 5
|
||||||
|
Top = 4
|
||||||
|
Width = 37
|
||||||
|
Height = 16
|
||||||
|
Caption = #36134#21495':'
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clYellow
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = [fsBold]
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
Transparent = True
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef InfoFrameUnitH
|
||||||
|
#define InfoFrameUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TInfoFrame : public TFrame
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TPanel *m_panInfo1;
|
||||||
|
TLabel *m_lblAccountTitle;
|
||||||
|
TLabel *m_lblAccount;
|
||||||
|
TLabel *m_lblAmount;
|
||||||
|
TLabel *Label4;
|
||||||
|
TShape *Shape1;
|
||||||
|
TShape *Shape2;
|
||||||
|
TLabel *Label5;
|
||||||
|
TLabel *m_lblTotProfit;
|
||||||
|
TShape *Shape3;
|
||||||
|
TLabel *Label7;
|
||||||
|
TLabel *m_lblPeakU;
|
||||||
|
TShape *Shape4;
|
||||||
|
TLabel *Label9;
|
||||||
|
TLabel *m_lblPeakL;
|
||||||
|
TShape *Shape5;
|
||||||
|
TLabel *Label11;
|
||||||
|
TLabel *m_lblWinCount;
|
||||||
|
TShape *Shape6;
|
||||||
|
TLabel *Label13;
|
||||||
|
TLabel *m_lblLosCount;
|
||||||
|
TShape *Shape7;
|
||||||
|
TLabel *Label15;
|
||||||
|
TLabel *m_lblSWin;
|
||||||
|
TShape *Shape8;
|
||||||
|
TLabel *Label17;
|
||||||
|
TLabel *m_lblSLos;
|
||||||
|
TLabel *Label19;
|
||||||
|
TLabel *m_lblDead;
|
||||||
|
TLabel *Label3;
|
||||||
|
TLabel *m_lblCurProfit;
|
||||||
|
TPanel *m_panInfo2;
|
||||||
|
TLabel *m_lblManAmount;
|
||||||
|
TLabel *m_lblRealAmount;
|
||||||
|
TLabel *Label14;
|
||||||
|
TShape *Shape13;
|
||||||
|
TShape *Shape14;
|
||||||
|
TLabel *Label16;
|
||||||
|
TLabel *m_lblRealProfit;
|
||||||
|
TShape *Shape15;
|
||||||
|
TLabel *Label20;
|
||||||
|
TLabel *m_lblManProfit;
|
||||||
|
TShape *Shape16;
|
||||||
|
TShape *Shape24;
|
||||||
|
TLabel *Label39;
|
||||||
|
TLabel *Label2;
|
||||||
|
TLabel *m_lblMaxChip;
|
||||||
|
TShape *Shape17;
|
||||||
|
TShape *Shape19;
|
||||||
|
TShape *Shape20;
|
||||||
|
TLabel *m_lblLimits;
|
||||||
|
TLabel *Label10;
|
||||||
|
TLabel *m_lblAccName;
|
||||||
|
TLabel *Label22;
|
||||||
|
TShape *Shape9;
|
||||||
|
TLabel *m_lblSRProfit;
|
||||||
|
TLabel *m_lblSRTitle;
|
||||||
|
void __fastcall FrameResize(TObject *Sender);
|
||||||
|
private: // User declarations
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TInfoFrame(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TInfoFrame *InfoFrame;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
+283
@@ -0,0 +1,283 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "LoginUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include <Clipbrd.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
|
||||||
|
bool g_bAutoLogin = true;
|
||||||
|
|
||||||
|
String GetValueByKey(String key, String str)
|
||||||
|
{
|
||||||
|
String ret;
|
||||||
|
int klen = key.Length(),
|
||||||
|
slen = str.Length();
|
||||||
|
int p0 = 1; //外部搜索key的游标
|
||||||
|
while((p0 = Pos(key, str, p0))!=0){
|
||||||
|
p0 += klen;
|
||||||
|
|
||||||
|
int p1 = p0; //p1为内部搜索游标
|
||||||
|
bool bOk = false;
|
||||||
|
while(p1<slen){
|
||||||
|
char nc = str[p1];
|
||||||
|
++p1;
|
||||||
|
|
||||||
|
if(nc==' ' || nc=='\t' || nc=='\n'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(nc=='=') //确认赋值语句
|
||||||
|
bOk = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p0 = p1;
|
||||||
|
|
||||||
|
if(!bOk)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int p2 = 0, len = 0; //p2为第一个引号位置
|
||||||
|
char quote = 0;
|
||||||
|
while(p1<slen){ //寻找两个引号
|
||||||
|
char nc = str[p1];
|
||||||
|
++p1;
|
||||||
|
|
||||||
|
if(!quote){ //第一个引号
|
||||||
|
if(nc==' ' || nc=='\t' || nc=='\n'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if(nc=='\'' || nc=='\"'){
|
||||||
|
p2 = p1;
|
||||||
|
quote = nc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if(nc==quote){ //第二个引号
|
||||||
|
len = p1 - p2 - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(p2>0 && len>0){
|
||||||
|
ret = str.SubString(p2, len);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
__fastcall TLoginForm::TLoginForm(TComponent* Owner, int iPF)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
m_iPlatform = iPF;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::OnLoginClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
if(!m_memTxt->Lines->Count){
|
||||||
|
if(m_iPlatform==PF_PA)
|
||||||
|
ShowMessage("请按提示复制网页内容到编辑框");
|
||||||
|
else if(m_iPlatform==PF_AB)
|
||||||
|
ShowMessage("请按提示复制网页完整地址到编辑框");
|
||||||
|
else if(m_iPlatform==PF_DB)
|
||||||
|
ShowMessage("请按操作说明复制网页地址到编辑框");
|
||||||
|
}
|
||||||
|
else if(m_iPlatform==PF_PA && GetLoginValues(m_memTxt->Text)
|
||||||
|
|| m_iPlatform!=PF_PA && GetUrl(m_memTxt->Text)){
|
||||||
|
ModalResult = mrOk;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ShowMessage("复制的内容无效,请重新复制");
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::FormCreate(TObject *Sender)
|
||||||
|
{
|
||||||
|
if(m_iPlatform==PF_PA)
|
||||||
|
Caption = Caption + " - PA视讯(AG)";
|
||||||
|
else if(m_iPlatform==PF_AB)
|
||||||
|
Caption = Caption + " - 欧博(ABG)";
|
||||||
|
else if(m_iPlatform==PF_DB)
|
||||||
|
Caption = Caption + " - 多宝(DB)";
|
||||||
|
|
||||||
|
m_cbAuto->Checked = g_bAutoLogin;
|
||||||
|
|
||||||
|
m_imgSpec = new TPngImage();
|
||||||
|
TResourceStream * pResStream = new TResourceStream(int(HInstance),
|
||||||
|
m_iPlatform==PF_DB ? L"PNG_DBSPEC"
|
||||||
|
: m_iPlatform==PF_AB ? L"PNG_ABSPEC"
|
||||||
|
: L"PNG_PASPEC",
|
||||||
|
RT_RCDATA);
|
||||||
|
m_imgSpec->LoadFromStream(pResStream);
|
||||||
|
delete pResStream;
|
||||||
|
|
||||||
|
m_imgBack->Picture->Bitmap->Assign(m_imgSpec);
|
||||||
|
|
||||||
|
m_memTxt->Lines->Add(m_iPlatform==PF_PA ? "请将网页内容复制到这里"
|
||||||
|
: m_iPlatform==PF_DB ? "按操作说明打开调试控制台,复制粘贴以下代码并回车"
|
||||||
|
: "请将网页完整地址复制到这里" );
|
||||||
|
if(m_iPlatform==PF_DB){
|
||||||
|
m_memTxt->Lines->Add(" history.replaceState(0,'',location.href+'&deviceId='+localStorage.getItem('fixedDeviceId'))");
|
||||||
|
m_memTxt->Lines->Add("然后复制网页完整地址到这里");
|
||||||
|
}
|
||||||
|
|
||||||
|
AddClipboardFormatListener(Handle);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::FormClose(TObject *Sender, TCloseAction &Action)
|
||||||
|
{
|
||||||
|
RemoveClipboardFormatListener(Handle);
|
||||||
|
delete m_imgSpec;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::WMClipboardUpdate(TMessage &msg)
|
||||||
|
{
|
||||||
|
Sleep(100); //处理剪贴板延迟呈现
|
||||||
|
|
||||||
|
if(ModalResult!=mrNone)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if( !OpenClipboard( Handle ) ){
|
||||||
|
OutputDebugString(L"OpenClipboard faild!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String txt;
|
||||||
|
if( IsClipboardFormatAvailable(CF_UNICODETEXT) ){
|
||||||
|
HANDLE h = GetClipboardData(CF_UNICODETEXT);//获取剪切板数据
|
||||||
|
if(h){
|
||||||
|
txt = static_cast<LPCWSTR>(GlobalLock(h));
|
||||||
|
GlobalUnlock(h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( IsClipboardFormatAvailable(CF_TEXT) ){
|
||||||
|
HANDLE h = GetClipboardData(CF_TEXT);//获取剪切板数据
|
||||||
|
if(h){
|
||||||
|
txt = static_cast<char*>(GlobalLock(h));
|
||||||
|
GlobalUnlock(h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(txt.Length()>0 && ( m_iPlatform==PF_PA && GetLoginValues(txt)
|
||||||
|
|| m_iPlatform!=PF_PA && GetUrl(txt))){
|
||||||
|
SetWindowPos(Application->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
|
||||||
|
SetWindowPos(Application->Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
|
||||||
|
|
||||||
|
ModalResult = mrOk; // mrCancel;//
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseClipboard();//关闭剪贴板
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::AutoClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
g_bAutoLogin = m_cbAuto->Checked;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool __fastcall TLoginForm::GetLoginValues(String in)
|
||||||
|
{
|
||||||
|
static String keys[] = {"pid", "tempLangInt", "myGametype", "username", "myDm", "myDofoward"};
|
||||||
|
for(int i=0; i<6; i++){
|
||||||
|
m_values[i] = GetValueByKey(keys[i], in);
|
||||||
|
if(m_values[i].Length()==0)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool __fastcall TLoginForm::GetUrl(String in)
|
||||||
|
{
|
||||||
|
int p0 = in.Pos("https://");
|
||||||
|
if(!p0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(m_iPlatform==PF_AB){
|
||||||
|
int p1 = Pos("\/?", in, p0+8);
|
||||||
|
if(!p1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_url = in.SubString(p0, p1+2 - p0);
|
||||||
|
|
||||||
|
if(!(p0 = Pos("sessionId=", in, p1+2)) && !(p0 = Pos("sessionid=", in, p1+2)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(!(p1 = Pos("&", in, p0+10)) && !(p1 = Pos("#", in, p0+10)))
|
||||||
|
p1 = in.Length()+1;
|
||||||
|
|
||||||
|
if(p1-p0 < 50)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_url += in.SubString(p0, p1-p0);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if(m_iPlatform==PF_DB){
|
||||||
|
int p1 = Pos("egret\/", in, p0+8);
|
||||||
|
if(!p1)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_url = in.SubString(p0, p1+6 - p0) + "multi"; //"hall"; //
|
||||||
|
|
||||||
|
if(!(p0 = Pos("?params=", in, p1+6)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(!(p1 = Pos("&signature=", in, p0+20)) || !(p1 = Pos("&ttl=", in, p0+20)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int p2 = Pos("&deviceId=", in, p1+16);
|
||||||
|
if(!p2)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(!(p1 = Pos("&", in, p2+10)))
|
||||||
|
p1 = in.Length()+1;
|
||||||
|
|
||||||
|
m_values[0] = in.SubString(p2+10, p1 - p2 - 10);
|
||||||
|
|
||||||
|
if(p2-p0 < 1700)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_url += in.SubString(p0, p2-p0);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::OnSpecClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
PostMessage(Application->MainFormHandle, UM_OPENMAUAL, 0, 0);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::SpecMouseEnter(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_lblSpec->Font->Color = clHighlight;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall TLoginForm::SpecMouseLeave(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_lblSpec->Font->Color = clBlue;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
+104
@@ -0,0 +1,104 @@
|
|||||||
|
object LoginForm: TLoginForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderIcons = [biSystemMenu]
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = #32593#31449#30331#24405
|
||||||
|
ClientHeight = 470
|
||||||
|
ClientWidth = 600
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Position = poMainFormCenter
|
||||||
|
OnClose = FormClose
|
||||||
|
OnCreate = FormCreate
|
||||||
|
TextHeight = 15
|
||||||
|
object m_lblSpec: TLabel
|
||||||
|
Left = 488
|
||||||
|
Top = 439
|
||||||
|
Width = 97
|
||||||
|
Height = 19
|
||||||
|
Cursor = crHandPoint
|
||||||
|
Hint = #28857#20987#26597#30475#30331#24405#25805#20316#35828#26126
|
||||||
|
ParentCustomHint = False
|
||||||
|
Alignment = taRightJustify
|
||||||
|
AutoSize = False
|
||||||
|
Caption = #26597#30475#25805#20316#35828#26126
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clBlue
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = [fsUnderline]
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowAccelChar = False
|
||||||
|
ShowHint = True
|
||||||
|
Layout = tlCenter
|
||||||
|
OnClick = OnSpecClick
|
||||||
|
OnMouseEnter = SpecMouseEnter
|
||||||
|
OnMouseLeave = SpecMouseLeave
|
||||||
|
end
|
||||||
|
object m_panSpec: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 600
|
||||||
|
Height = 298
|
||||||
|
AutoSize = True
|
||||||
|
BevelKind = bkFlat
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ShowCaption = False
|
||||||
|
TabOrder = 0
|
||||||
|
object m_imgBack: TImage
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 596
|
||||||
|
Height = 294
|
||||||
|
ParentCustomHint = False
|
||||||
|
Align = alClient
|
||||||
|
Center = True
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = False
|
||||||
|
Stretch = True
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object m_memTxt: TMemo
|
||||||
|
Left = 0
|
||||||
|
Top = 302
|
||||||
|
Width = 600
|
||||||
|
Height = 121
|
||||||
|
BevelInner = bvNone
|
||||||
|
BevelKind = bkFlat
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Color = clBlack
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clLime
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
ScrollBars = ssBoth
|
||||||
|
TabOrder = 1
|
||||||
|
WordWrap = False
|
||||||
|
end
|
||||||
|
object m_btnLogin: TButton
|
||||||
|
Left = 269
|
||||||
|
Top = 435
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = #30331#24405
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = OnLoginClick
|
||||||
|
end
|
||||||
|
object m_cbAuto: TCheckBox
|
||||||
|
Left = 16
|
||||||
|
Top = 439
|
||||||
|
Width = 97
|
||||||
|
Height = 17
|
||||||
|
Caption = #19979#27425#33258#21160#30331#24405
|
||||||
|
TabOrder = 3
|
||||||
|
OnClick = AutoClick
|
||||||
|
end
|
||||||
|
end
|
||||||
+49
@@ -0,0 +1,49 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef LoginUnitH
|
||||||
|
#define LoginUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Imaging.pngimage.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern bool g_bAutoLogin;
|
||||||
|
|
||||||
|
class TLoginForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TPanel *m_panSpec;
|
||||||
|
TImage *m_imgBack;
|
||||||
|
TMemo *m_memTxt;
|
||||||
|
TButton *m_btnLogin;
|
||||||
|
TCheckBox *m_cbAuto;
|
||||||
|
TLabel *m_lblSpec;
|
||||||
|
void __fastcall OnLoginClick(TObject *Sender);
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
|
||||||
|
void __fastcall AutoClick(TObject *Sender);
|
||||||
|
void __fastcall OnSpecClick(TObject *Sender);
|
||||||
|
void __fastcall SpecMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall SpecMouseLeave(TObject *Sender);
|
||||||
|
private: // User declarations
|
||||||
|
TPngImage * m_imgSpec;
|
||||||
|
|
||||||
|
bool __fastcall GetLoginValues(String in);
|
||||||
|
bool __fastcall GetUrl(String in);
|
||||||
|
|
||||||
|
MESSAGE void __fastcall WMClipboardUpdate(TMessage &msg);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(WM_CLIPBOARDUPDATE,TMessage, WMClipboardUpdate)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
int m_iPlatform;
|
||||||
|
String m_values[6];
|
||||||
|
String m_url;
|
||||||
|
__fastcall TLoginForm(TComponent* Owner, int iPF);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,456 @@
|
|||||||
|
object PolicyEditForm: TPolicyEditForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderStyle = bsDialog
|
||||||
|
Caption = #31574#30053#32534#36753
|
||||||
|
ClientHeight = 457
|
||||||
|
ClientWidth = 448
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Position = poMainFormCenter
|
||||||
|
OnClose = FormClose
|
||||||
|
OnCreate = FormCreate
|
||||||
|
OnMouseMove = FormMouseMove
|
||||||
|
TextHeight = 15
|
||||||
|
object m_lblPolicy: TLabel
|
||||||
|
Left = 22
|
||||||
|
Top = 41
|
||||||
|
Width = 65
|
||||||
|
Height = 23
|
||||||
|
AutoSize = False
|
||||||
|
Caption = #32534#36753#25171#27861#65306
|
||||||
|
Layout = tlCenter
|
||||||
|
end
|
||||||
|
object m_cbPolicy: TComboBox
|
||||||
|
Left = 87
|
||||||
|
Top = 41
|
||||||
|
Width = 165
|
||||||
|
Height = 23
|
||||||
|
AutoDropDown = True
|
||||||
|
AutoCloseUp = True
|
||||||
|
DropDownCount = 20
|
||||||
|
DropDownWidth = 200
|
||||||
|
TabOrder = 0
|
||||||
|
Text = #35831#36873#25321#25171#27861
|
||||||
|
OnChange = OnPolicyChange
|
||||||
|
end
|
||||||
|
object m_btnAdd: TButton
|
||||||
|
Left = 271
|
||||||
|
Top = 41
|
||||||
|
Width = 75
|
||||||
|
Height = 23
|
||||||
|
Caption = #26032#24314
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = OnAddClick
|
||||||
|
end
|
||||||
|
object m_panEdit: TPanel
|
||||||
|
Left = 21
|
||||||
|
Top = 75
|
||||||
|
Width = 408
|
||||||
|
Height = 344
|
||||||
|
BevelKind = bkFlat
|
||||||
|
BevelOuter = bvNone
|
||||||
|
TabOrder = 2
|
||||||
|
OnMouseMove = FormMouseMove
|
||||||
|
object m_bvChip: TBevel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 405
|
||||||
|
Height = 55
|
||||||
|
ParentCustomHint = False
|
||||||
|
ParentShowHint = False
|
||||||
|
Shape = bsFrame
|
||||||
|
ShowHint = False
|
||||||
|
end
|
||||||
|
object m_btnDelRow: TButton
|
||||||
|
Left = 4
|
||||||
|
Top = 313
|
||||||
|
Width = 80
|
||||||
|
Height = 25
|
||||||
|
Caption = #21024#38500#34892
|
||||||
|
Enabled = False
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = OnDelRowClick
|
||||||
|
end
|
||||||
|
object m_btnSave: TButton
|
||||||
|
Left = 201
|
||||||
|
Top = 313
|
||||||
|
Width = 88
|
||||||
|
Height = 25
|
||||||
|
Caption = #20445#23384#25171#27861
|
||||||
|
Enabled = False
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = OnSaveClick
|
||||||
|
end
|
||||||
|
object m_btnSelect: TButton
|
||||||
|
Left = 297
|
||||||
|
Top = 313
|
||||||
|
Width = 103
|
||||||
|
Height = 25
|
||||||
|
Caption = #36873#25321#35813#25171#27861
|
||||||
|
TabOrder = 3
|
||||||
|
OnClick = OnSelectClick
|
||||||
|
end
|
||||||
|
object m_sg: TStringGrid
|
||||||
|
Left = 0
|
||||||
|
Top = 55
|
||||||
|
Width = 404
|
||||||
|
Height = 256
|
||||||
|
ParentCustomHint = False
|
||||||
|
BevelInner = bvNone
|
||||||
|
BevelOuter = bvNone
|
||||||
|
ColCount = 4
|
||||||
|
DefaultColWidth = 99
|
||||||
|
DefaultDrawing = False
|
||||||
|
DoubleBuffered = True
|
||||||
|
DrawingStyle = gdsGradient
|
||||||
|
FixedCols = 0
|
||||||
|
RowCount = 10
|
||||||
|
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goEditing, goRowSelect, goThumbTracking]
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
ParentShowHint = False
|
||||||
|
PopupMenu = m_pmSG
|
||||||
|
ScrollBars = ssVertical
|
||||||
|
ShowHint = False
|
||||||
|
TabOrder = 5
|
||||||
|
OnDrawCell = SGDrawCell
|
||||||
|
OnKeyDown = SGKeyDown
|
||||||
|
OnMouseDown = SGMouseDown
|
||||||
|
OnMouseMove = FormMouseMove
|
||||||
|
OnMouseWheelDown = SGMouseWheelDown
|
||||||
|
OnMouseWheelUp = SGMouseWheelUp
|
||||||
|
OnSelectCell = SGSelectCell
|
||||||
|
OnTopLeftChanged = SGTopLeftChanged
|
||||||
|
DefaultTextDrawing = False
|
||||||
|
end
|
||||||
|
object m_pEditor: TEdit
|
||||||
|
Left = 96
|
||||||
|
Top = 83
|
||||||
|
Width = 97
|
||||||
|
Height = 23
|
||||||
|
ParentCustomHint = False
|
||||||
|
AutoSize = False
|
||||||
|
BevelInner = bvNone
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Ctl3D = True
|
||||||
|
ParentCtl3D = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = False
|
||||||
|
TabOrder = 4
|
||||||
|
Visible = False
|
||||||
|
OnExit = EditorExit
|
||||||
|
OnKeyDown = EditorKeyDown
|
||||||
|
OnKeyPress = EditorKeyPress
|
||||||
|
end
|
||||||
|
object m_rgRoad: TRadioGroup
|
||||||
|
Left = 10
|
||||||
|
Top = 1
|
||||||
|
Width = 380
|
||||||
|
Height = 48
|
||||||
|
Align = alCustom
|
||||||
|
Color = clBtnFace
|
||||||
|
Columns = 5
|
||||||
|
Ctl3D = True
|
||||||
|
ItemIndex = 0
|
||||||
|
Items.Strings = (
|
||||||
|
#29664' '#30424
|
||||||
|
#22823' '#36335
|
||||||
|
#22823#30524#36335
|
||||||
|
#23567' '#36335
|
||||||
|
#23567#24378#36335)
|
||||||
|
ParentBackground = False
|
||||||
|
ParentColor = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
ShowFrame = False
|
||||||
|
TabOrder = 7
|
||||||
|
OnClick = OnRoadClick
|
||||||
|
end
|
||||||
|
object m_panChip: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 404
|
||||||
|
Height = 54
|
||||||
|
Align = alTop
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Ctl3D = True
|
||||||
|
ParentCtl3D = False
|
||||||
|
TabOrder = 6
|
||||||
|
OnClick = OnDeadClick
|
||||||
|
OnMouseMove = FormMouseMove
|
||||||
|
object m_lblDead: TLabel
|
||||||
|
Left = 17
|
||||||
|
Top = 32
|
||||||
|
Width = 39
|
||||||
|
Height = 15
|
||||||
|
Caption = #29190#32518#65306
|
||||||
|
end
|
||||||
|
object Bevel1: TBevel
|
||||||
|
Left = 16
|
||||||
|
Top = 26
|
||||||
|
Width = 375
|
||||||
|
Height = 2
|
||||||
|
end
|
||||||
|
object m_rgDead: TGroupBox
|
||||||
|
Left = 64
|
||||||
|
Top = 30
|
||||||
|
Width = 330
|
||||||
|
Height = 19
|
||||||
|
ShowFrame = False
|
||||||
|
TabOrder = 0
|
||||||
|
object m_lblDead2Tail: TLabel
|
||||||
|
Left = 240
|
||||||
|
Top = 3
|
||||||
|
Width = 65
|
||||||
|
Height = 15
|
||||||
|
Caption = #20998#38047#21518#37325#21551
|
||||||
|
end
|
||||||
|
object m_rbDead0: TRadioButton
|
||||||
|
Left = 8
|
||||||
|
Top = 2
|
||||||
|
Width = 50
|
||||||
|
Height = 17
|
||||||
|
Hint = #20572#27490#19979#27880
|
||||||
|
Caption = #20572#27490
|
||||||
|
Checked = True
|
||||||
|
TabOrder = 0
|
||||||
|
TabStop = True
|
||||||
|
OnClick = OnDeadClick
|
||||||
|
end
|
||||||
|
object m_rbDead1: TRadioButton
|
||||||
|
Tag = 1
|
||||||
|
Left = 71
|
||||||
|
Top = 2
|
||||||
|
Width = 81
|
||||||
|
Height = 17
|
||||||
|
Hint = #26412#23616#26242#20572#65292#26032#23616#37325#26032#24320#22987
|
||||||
|
Caption = #26032#23616#37325#21551
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 1
|
||||||
|
OnClick = OnDeadClick
|
||||||
|
end
|
||||||
|
object m_rbDead2: TRadioButton
|
||||||
|
Tag = 2
|
||||||
|
Left = 163
|
||||||
|
Top = 2
|
||||||
|
Width = 50
|
||||||
|
Height = 17
|
||||||
|
Hint = #26242#20572#21518#37325#21551
|
||||||
|
Caption = #26242#20572
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = OnDeadClick
|
||||||
|
end
|
||||||
|
object m_edDeadPause: TEdit
|
||||||
|
Left = 213
|
||||||
|
Top = 0
|
||||||
|
Width = 23
|
||||||
|
Height = 19
|
||||||
|
Hint = '0-15'#20998#38047
|
||||||
|
Alignment = taCenter
|
||||||
|
AutoSize = False
|
||||||
|
MaxLength = 2
|
||||||
|
NumbersOnly = True
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 3
|
||||||
|
Text = '0'
|
||||||
|
TextHint = '0-30'
|
||||||
|
OnExit = DeadPauseExit
|
||||||
|
OnKeyDown = DeadPauseKeyDown
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object m_cbKind: TComboBox
|
||||||
|
Left = 17
|
||||||
|
Top = 2
|
||||||
|
Width = 80
|
||||||
|
Height = 23
|
||||||
|
AutoComplete = False
|
||||||
|
Style = csDropDownList
|
||||||
|
ItemIndex = 0
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 3
|
||||||
|
Text = #24120#35268#27880#30721
|
||||||
|
OnChange = OnKindChange
|
||||||
|
Items.Strings = (
|
||||||
|
#24120#35268#27880#30721
|
||||||
|
#23618#32423#27880#30721
|
||||||
|
#38454#26799#27880#30721
|
||||||
|
#32452#21512#38454#26799
|
||||||
|
#36194#36755#27425#24046)
|
||||||
|
end
|
||||||
|
object m_cbLevelTotalDiff: TCheckBox
|
||||||
|
Left = 116
|
||||||
|
Top = 5
|
||||||
|
Width = 78
|
||||||
|
Height = 17
|
||||||
|
Hint = #21246#36873#26102#25353#24635#20307#35745#31639#36755#36194#65292#21542#21017#21488#26700#21508#33258#35745#31639#36755#36194
|
||||||
|
Caption = #24635#20307#35745#31639
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 4
|
||||||
|
Visible = False
|
||||||
|
OnClick = OnChipOptionClick
|
||||||
|
end
|
||||||
|
object m_cbLevelInstant: TCheckBox
|
||||||
|
Left = 210
|
||||||
|
Top = 5
|
||||||
|
Width = 78
|
||||||
|
Height = 17
|
||||||
|
Caption = #21363#26102#21319#38477
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 5
|
||||||
|
Visible = False
|
||||||
|
OnClick = OnChipOptionClick
|
||||||
|
end
|
||||||
|
object m_cbLevelIndie: TCheckBox
|
||||||
|
Left = 304
|
||||||
|
Top = 5
|
||||||
|
Width = 78
|
||||||
|
Height = 17
|
||||||
|
Caption = #21319#38477#28165#38646
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 6
|
||||||
|
Visible = False
|
||||||
|
OnClick = OnChipOptionClick
|
||||||
|
end
|
||||||
|
object m_cbTierAccChip: TCheckBox
|
||||||
|
Left = 228
|
||||||
|
Top = 5
|
||||||
|
Width = 92
|
||||||
|
Height = 17
|
||||||
|
Hint = #27599#23618#20928#36755#20540'('#19981#35745#36180#29575')'#32047#21152#33267#20197#21518#21508#23618#27880#30721
|
||||||
|
Caption = #20928#36755#20540#32047#21152
|
||||||
|
Checked = True
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
State = cbChecked
|
||||||
|
TabOrder = 2
|
||||||
|
Visible = False
|
||||||
|
OnClick = OnChipOptionClick
|
||||||
|
end
|
||||||
|
object m_cbTierWinRet: TCheckBox
|
||||||
|
Left = 116
|
||||||
|
Top = 5
|
||||||
|
Width = 105
|
||||||
|
Height = 17
|
||||||
|
Hint = #20108#23618#20197#19978#21482#35201#36194#27425#25968#22823#20110#36755#27425#25968#23601#22238#31532#19968#23618
|
||||||
|
Caption = #39640#23618#36194#22810#22238#22522
|
||||||
|
Checked = True
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
State = cbChecked
|
||||||
|
TabOrder = 1
|
||||||
|
Visible = False
|
||||||
|
OnClick = OnChipOptionClick
|
||||||
|
end
|
||||||
|
object m_cbTierLos0: TCheckBox
|
||||||
|
Left = 325
|
||||||
|
Top = 5
|
||||||
|
Width = 70
|
||||||
|
Height = 17
|
||||||
|
Hint = #27599#23618#36755#30340#27425#25968#22810#20110#36194#26102#27880#30721#20026'0'
|
||||||
|
Caption = #36755#22810#25171'0'
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 7
|
||||||
|
Visible = False
|
||||||
|
OnClick = OnChipOptionClick
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object m_btnInsRow: TButton
|
||||||
|
Left = 92
|
||||||
|
Top = 313
|
||||||
|
Width = 80
|
||||||
|
Height = 25
|
||||||
|
Caption = #25554#20837#34892
|
||||||
|
Enabled = False
|
||||||
|
TabOrder = 8
|
||||||
|
OnClick = OnInsRowClick
|
||||||
|
end
|
||||||
|
object m_pCombo: TComboBox
|
||||||
|
Left = 72
|
||||||
|
Top = 146
|
||||||
|
Width = 141
|
||||||
|
Height = 23
|
||||||
|
AutoDropDown = True
|
||||||
|
AutoCloseUp = True
|
||||||
|
Style = csDropDownList
|
||||||
|
DropDownCount = 20
|
||||||
|
DropDownWidth = 200
|
||||||
|
TabOrder = 0
|
||||||
|
TabStop = False
|
||||||
|
Visible = False
|
||||||
|
OnKeyDown = ComboKeyDown
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object m_btnDel: TButton
|
||||||
|
Left = 352
|
||||||
|
Top = 40
|
||||||
|
Width = 75
|
||||||
|
Height = 23
|
||||||
|
Caption = #21024#38500
|
||||||
|
Enabled = False
|
||||||
|
TabOrder = 3
|
||||||
|
OnClick = OnDelClick
|
||||||
|
end
|
||||||
|
object m_btnTip: TButton
|
||||||
|
Left = 21
|
||||||
|
Top = 424
|
||||||
|
Width = 408
|
||||||
|
Height = 25
|
||||||
|
Caption = #28857#20987#26597#30475#35268#21017#35828#26126
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clBtnText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 4
|
||||||
|
OnClick = OnTipClick
|
||||||
|
end
|
||||||
|
object m_tsTop: TTabSet
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 448
|
||||||
|
Height = 25
|
||||||
|
ParentCustomHint = False
|
||||||
|
Align = alTop
|
||||||
|
AutoScroll = False
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = False
|
||||||
|
SoftTop = True
|
||||||
|
Style = tsOwnerDraw
|
||||||
|
Tabs.Strings = (
|
||||||
|
#25171#27861
|
||||||
|
#27880#30721)
|
||||||
|
TabPosition = tpTop
|
||||||
|
OnChange = TopChange
|
||||||
|
OnDrawTab = TopDrawTab
|
||||||
|
OnMeasureTab = TopMeasureTab
|
||||||
|
end
|
||||||
|
object m_pmSG: TPopupMenu
|
||||||
|
AutoHotkeys = maManual
|
||||||
|
Left = 301
|
||||||
|
Top = 307
|
||||||
|
object miExport: TMenuItem
|
||||||
|
Caption = #23548#20986#34920#26684'...'
|
||||||
|
OnClick = OnExport
|
||||||
|
end
|
||||||
|
object miImport: TMenuItem
|
||||||
|
Caption = #23548#20837#34920#26684'...'
|
||||||
|
OnClick = OnImport
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef PolicyEditFormUnitH
|
||||||
|
#define PolicyEditFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Grids.hpp>
|
||||||
|
#include "PolicyUnit.h"
|
||||||
|
#include <Vcl.Menus.hpp>
|
||||||
|
#include <Vcl.Tabs.hpp>
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TPolicyEditForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TLabel *m_lblPolicy;
|
||||||
|
TComboBox *m_cbPolicy;
|
||||||
|
TButton *m_btnAdd;
|
||||||
|
TPanel *m_panEdit;
|
||||||
|
TButton *m_btnDelRow;
|
||||||
|
TButton *m_btnSave;
|
||||||
|
TRadioGroup *m_rgRoad;
|
||||||
|
TButton *m_btnSelect;
|
||||||
|
TButton *m_btnDel;
|
||||||
|
TStringGrid *m_sg;
|
||||||
|
TPanel *m_panChip;
|
||||||
|
TLabel *m_lblDead;
|
||||||
|
TBevel *m_bvChip;
|
||||||
|
TEdit *m_pEditor;
|
||||||
|
TRadioButton *m_rbDead0;
|
||||||
|
TRadioButton *m_rbDead1;
|
||||||
|
TRadioButton *m_rbDead2;
|
||||||
|
TEdit *m_edDeadPause;
|
||||||
|
TLabel *m_lblDead2Tail;
|
||||||
|
TGroupBox *m_rgDead;
|
||||||
|
TCheckBox *m_cbTierWinRet;
|
||||||
|
TCheckBox *m_cbTierAccChip;
|
||||||
|
TBevel *Bevel1;
|
||||||
|
TButton *m_btnTip;
|
||||||
|
TComboBox *m_cbKind;
|
||||||
|
TComboBox *m_pCombo;
|
||||||
|
TButton *m_btnInsRow;
|
||||||
|
TCheckBox *m_cbLevelTotalDiff;
|
||||||
|
TCheckBox *m_cbLevelInstant;
|
||||||
|
TCheckBox *m_cbLevelIndie;
|
||||||
|
TPopupMenu *m_pmSG;
|
||||||
|
TMenuItem *miExport;
|
||||||
|
TMenuItem *miImport;
|
||||||
|
TCheckBox *m_cbTierLos0;
|
||||||
|
TTabSet *m_tsTop;
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall OnDelRowClick(TObject *Sender);
|
||||||
|
void __fastcall OnPolicyChange(TObject *Sender);
|
||||||
|
void __fastcall OnAddClick(TObject *Sender);
|
||||||
|
void __fastcall OnSaveClick(TObject *Sender);
|
||||||
|
void __fastcall SGDrawCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, TRect &Rect, TGridDrawState State);
|
||||||
|
void __fastcall EditorKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall EditorKeyPress(TObject *Sender, System::WideChar &Key);
|
||||||
|
void __fastcall SGMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall SGMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall SGTopLeftChanged(TObject *Sender);
|
||||||
|
void __fastcall SGMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall OnSelectClick(TObject *Sender);
|
||||||
|
void __fastcall OnDelClick(TObject *Sender);
|
||||||
|
void __fastcall OnRoadClick(TObject *Sender);
|
||||||
|
void __fastcall OnDeadClick(TObject *Sender);
|
||||||
|
void __fastcall EditorExit(TObject *Sender);
|
||||||
|
void __fastcall SGKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall SGSelectCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, bool &CanSelect);
|
||||||
|
void __fastcall DeadPauseExit(TObject *Sender);
|
||||||
|
void __fastcall DeadPauseKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall OnKindChange(TObject *Sender);
|
||||||
|
void __fastcall OnChipOptionClick(TObject *Sender);
|
||||||
|
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
|
||||||
|
void __fastcall OnSPEditChange(TObject *Sender);
|
||||||
|
void __fastcall OnAskRoadClick(TObject *Sender);
|
||||||
|
void __fastcall OnTipClick(TObject *Sender);
|
||||||
|
void __fastcall ComboKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall OnInsRowClick(TObject *Sender);
|
||||||
|
void __fastcall OnExport(TObject *Sender);
|
||||||
|
void __fastcall OnImport(TObject *Sender);
|
||||||
|
void __fastcall TopMeasureTab(TObject *Sender, int Index, int &TabWidth);
|
||||||
|
void __fastcall TopDrawTab(TObject *Sender, TCanvas *TabCanvas, TRect &R, int Index, bool Selected);
|
||||||
|
void __fastcall TopChange(TObject *Sender, int NewTab, bool &AllowChange);
|
||||||
|
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
private: // User declarations
|
||||||
|
int m_iType;
|
||||||
|
int m_iSelPolicy;
|
||||||
|
TBasePolicy* m_editPolicy;
|
||||||
|
|
||||||
|
int m_colEdit, m_rowEdit;
|
||||||
|
int m_nRows, m_nNewNum;
|
||||||
|
String m_sOrig, m_sType;;
|
||||||
|
bool m_bRowChanged, m_bColChanged, m_bRoadChanged;
|
||||||
|
|
||||||
|
TRadioButton *m_aDeadRB[3];
|
||||||
|
TFrame *m_frmSP; //ÌØÊâ²ßÂÔÃæ°å
|
||||||
|
|
||||||
|
vector<int> m_aCPMap; //ComboÓ³Éä
|
||||||
|
|
||||||
|
void __fastcall UpdateGrid();
|
||||||
|
String __fastcall AutoNewName();
|
||||||
|
void __fastcall GridEndEdit();
|
||||||
|
void __fastcall SetSelection(int selRow);
|
||||||
|
void __fastcall SGSelCell(int ACol, int ARow);
|
||||||
|
void __fastcall Clear();
|
||||||
|
void __fastcall CalcNewName();
|
||||||
|
void __fastcall InitChipGrid(int kind); //0=ÆÕͨעÂë 1=²ã¼¶×¢Âë
|
||||||
|
void __fastcall ClearSPFrame();
|
||||||
|
void __fastcall SetView(int type);
|
||||||
|
|
||||||
|
public: // User declarations
|
||||||
|
|
||||||
|
__fastcall TPolicyEditForm(TComponent* Owner, int iType);//, int iSel);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "PolicySave.h"
|
||||||
|
#include "PolicyUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TPolicySaveForm::TPolicySaveForm(TComponent* Owner, int type, String name)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
m_iType = type;
|
||||||
|
m_name = name;
|
||||||
|
m_sType = type==TYPE_P_BET ? "打法" : "注码";
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TPolicySaveForm::FormCreate(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_leName->Text = m_name;
|
||||||
|
m_leName->EditLabel->Caption = m_sType + "名称:";
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TPolicySaveForm::OnOkClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
vector<TBasePolicy*>& aPolicies = m_iType==TYPE_P_BET ? g_aBetPolicies : g_aChipPolicies;
|
||||||
|
// bool bRepeat = false;
|
||||||
|
int type = -1;
|
||||||
|
m_iPolicy = -1;
|
||||||
|
for(int i=0; i<aPolicies.size(); i++){
|
||||||
|
if(aPolicies[i]->name == m_leName->Text){
|
||||||
|
m_iPolicy = i;
|
||||||
|
type = aPolicies[i]->type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_iPolicy>=0){
|
||||||
|
if(type<2){
|
||||||
|
String msg = "该名称的" + m_sType + "为系统内置,不可覆盖,请修改名称";
|
||||||
|
MessageBox(Handle, msg.c_str(), L"保存", MB_ICONERROR | MB_OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if(IsPolicyInUse(m_iType, m_iPolicy)){
|
||||||
|
String msg = "该名称的" + m_sType + "正在使用中,不可覆盖,请修改名称";
|
||||||
|
MessageBox(Handle, msg.c_str(), L"保存", MB_ICONERROR | MB_OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
vector<int> coms = PolicyInCombo(aPolicies[m_iPolicy]->id);
|
||||||
|
if(!coms.empty()){
|
||||||
|
String msg = "该名称的" + m_sType + "被组合方案使用,不可覆盖,请修改名称";
|
||||||
|
MessageBox(Handle, msg.c_str(), L"保存", MB_ICONERROR | MB_OK);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String msg = "该名称的" + m_sType + "已存在,是否覆盖?";
|
||||||
|
int mrRet = MessageBox(Handle, msg.c_str(), L"保存", MB_ICONQUESTION | MB_OKCANCEL);
|
||||||
|
if(mrRet==mrCancel)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_name = m_leName->Text;
|
||||||
|
ModalResult = mrOk;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
object PolicySaveForm: TPolicySaveForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderStyle = bsNone
|
||||||
|
Caption = 'PolicySaveForm'
|
||||||
|
ClientHeight = 126
|
||||||
|
ClientWidth = 303
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Position = poOwnerFormCenter
|
||||||
|
RoundedCorners = rcOn
|
||||||
|
OnCreate = FormCreate
|
||||||
|
TextHeight = 15
|
||||||
|
object m_panBack: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 303
|
||||||
|
Height = 126
|
||||||
|
Align = alClient
|
||||||
|
BevelOuter = bvNone
|
||||||
|
BorderStyle = bsSingle
|
||||||
|
Ctl3D = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
TabOrder = 0
|
||||||
|
object m_btnCancel: TButton
|
||||||
|
Left = 161
|
||||||
|
Top = 78
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = #21462#28040
|
||||||
|
ModalResult = 2
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object m_btnOk: TButton
|
||||||
|
Left = 73
|
||||||
|
Top = 78
|
||||||
|
Width = 75
|
||||||
|
Height = 25
|
||||||
|
Caption = #30830#23450
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = OnOkClick
|
||||||
|
end
|
||||||
|
object m_leName: TLabeledEdit
|
||||||
|
Left = 94
|
||||||
|
Top = 34
|
||||||
|
Width = 181
|
||||||
|
Height = 23
|
||||||
|
AutoSize = False
|
||||||
|
EditLabel.Width = 65
|
||||||
|
EditLabel.Height = 23
|
||||||
|
EditLabel.Caption = #25171#27861#21517#31216#65306
|
||||||
|
LabelPosition = lpLeft
|
||||||
|
MaxLength = 63
|
||||||
|
TabOrder = 0
|
||||||
|
Text = ''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef PolicySaveH
|
||||||
|
#define PolicySaveH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Mask.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TPolicySaveForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TLabeledEdit *m_leName;
|
||||||
|
TButton *m_btnOk;
|
||||||
|
TButton *m_btnCancel;
|
||||||
|
TPanel *m_panBack;
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall OnOkClick(TObject *Sender);
|
||||||
|
private: // User declarations
|
||||||
|
int m_iType;
|
||||||
|
String m_sType;
|
||||||
|
|
||||||
|
public: // User declarations
|
||||||
|
String m_name;
|
||||||
|
int m_iPolicy;
|
||||||
|
__fastcall TPolicySaveForm(TComponent* Owner, int type, String name);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TPolicySaveForm *PolicySaveForm;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
+1244
File diff suppressed because it is too large
Load Diff
+195
@@ -0,0 +1,195 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef PolicyUnitH
|
||||||
|
#define PolicyUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <system.hpp>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#define TYPE_P_BET 0
|
||||||
|
#define TYPE_P_CHIP 1
|
||||||
|
|
||||||
|
#define KIND_BET_NOR 0
|
||||||
|
#define KIND_BET_ASK 2
|
||||||
|
#define KIND_BET_DIF 3
|
||||||
|
|
||||||
|
#define KIND_CHIP_NOR 0
|
||||||
|
#define KIND_CHIP_HAN 1
|
||||||
|
#define KIND_CHIP_LEV 2
|
||||||
|
#define KIND_CHIP_COM 3
|
||||||
|
#define KIND_CHIP_WLD 4
|
||||||
|
#define KIND_CHIP_RAN 8
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//策略基类
|
||||||
|
class TBaseRow {
|
||||||
|
public:
|
||||||
|
virtual void Clear()=0;
|
||||||
|
// TBaseRow(){Clear();};
|
||||||
|
};
|
||||||
|
|
||||||
|
class TBasePolicy {
|
||||||
|
public:
|
||||||
|
String name;
|
||||||
|
int type; //存储类型 0=内置免费 1=内置付费 2=用户自定义 3=用户定制
|
||||||
|
int id; //唯一ID
|
||||||
|
int kind; //自定义类型 CHIP:0=普通 1=手数层级 2=组合层级 4=随机 ... BET:0=普通 2=庄闲问路 3=庄闲差...
|
||||||
|
bool actived; //是否激活
|
||||||
|
vector<TBaseRow*> aRows;
|
||||||
|
|
||||||
|
virtual void AddNewRow()=0;
|
||||||
|
virtual TBaseRow* ParseRow(char* data, int& err)=0;
|
||||||
|
virtual int ParsePolicy(char* data, int pt);
|
||||||
|
virtual void Clear();
|
||||||
|
virtual void Reset();
|
||||||
|
|
||||||
|
TBasePolicy(){id=type=kind=0;}
|
||||||
|
~TBasePolicy();
|
||||||
|
};
|
||||||
|
|
||||||
|
//打法策略
|
||||||
|
class TBetRow : public TBaseRow {
|
||||||
|
public:
|
||||||
|
vector<int> cond; //切入点匹配,字符串解析为整形保存
|
||||||
|
// item&0x3=颜色 (item&7C)>>2=个数 item&0x80=是否定长
|
||||||
|
// int bet; //下注方向
|
||||||
|
vector<char> bets; //下注项
|
||||||
|
|
||||||
|
virtual void Clear(){
|
||||||
|
cond.clear();
|
||||||
|
bets.clear();
|
||||||
|
};
|
||||||
|
|
||||||
|
// TBetRow(){};//Clear();};
|
||||||
|
};
|
||||||
|
|
||||||
|
class TBetPolicy : public TBasePolicy{
|
||||||
|
public:
|
||||||
|
int road; //适用路单
|
||||||
|
|
||||||
|
TBetPolicy& operator = (const TBetPolicy& b);
|
||||||
|
bool operator == (const TBetPolicy& b);
|
||||||
|
|
||||||
|
virtual void AddNewRow();
|
||||||
|
virtual TBaseRow* ParseRow(char* data, int& err);
|
||||||
|
vector<int> ParseCondition(char* data);
|
||||||
|
static vector<char> ParseBet(char* data);
|
||||||
|
virtual void Reset();
|
||||||
|
|
||||||
|
TBetPolicy(){road=0;}
|
||||||
|
};
|
||||||
|
|
||||||
|
//注码策略
|
||||||
|
class TChipRow : public TBaseRow{
|
||||||
|
public:
|
||||||
|
int iSeq; //序号
|
||||||
|
int chip; //注码/倍数
|
||||||
|
int iWin; //赢走向
|
||||||
|
int iLos; //输走向
|
||||||
|
|
||||||
|
virtual void Clear(){iSeq=chip=iWin=iLos=0;};
|
||||||
|
|
||||||
|
TChipRow(){Clear();};
|
||||||
|
};
|
||||||
|
|
||||||
|
//层级
|
||||||
|
class TTierRow : public TChipRow{
|
||||||
|
public:
|
||||||
|
int hands; //层级注码手数
|
||||||
|
};
|
||||||
|
|
||||||
|
//阶梯
|
||||||
|
class TLevelRow : public TChipRow{
|
||||||
|
public:
|
||||||
|
int nCondWin; //赢走向条件
|
||||||
|
int nCondLos; //输走向条件
|
||||||
|
};
|
||||||
|
|
||||||
|
//组合
|
||||||
|
class TComboRow : public TLevelRow{
|
||||||
|
public:
|
||||||
|
int id; //方案id
|
||||||
|
int iPolicy; //方案序号
|
||||||
|
TComboRow(){id=iPolicy=-1;};
|
||||||
|
};
|
||||||
|
|
||||||
|
////赢输次差
|
||||||
|
//class TWLDiffRow : public TChipRow{
|
||||||
|
//public:
|
||||||
|
// int nMore; //大于数值
|
||||||
|
// int nLess; //少于数值
|
||||||
|
//};
|
||||||
|
|
||||||
|
class TChipPolicy: public TBasePolicy{
|
||||||
|
public:
|
||||||
|
int dead, //爆缆后操作 0=停止 1=新局重启 2=暂停后重启
|
||||||
|
deadPause; //暂停分钟数
|
||||||
|
|
||||||
|
TChipPolicy& operator = (const TChipPolicy& b);
|
||||||
|
bool operator == (const TChipPolicy& b);
|
||||||
|
|
||||||
|
virtual void AddNewRow();
|
||||||
|
virtual TBaseRow* ParseRow(char* data, int& err);
|
||||||
|
|
||||||
|
TChipPolicy(){dead=deadPause=0;}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TTierPolicy: public TChipPolicy{
|
||||||
|
public:
|
||||||
|
bool bTierWinRet,//二层以上赢利回基
|
||||||
|
bTierAccChip, //输额加入下层注码
|
||||||
|
bTierLos0; //输打0
|
||||||
|
|
||||||
|
TTierPolicy(){bTierWinRet=bTierAccChip=bTierLos0=0;}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TLevelPolicy: public TChipPolicy{
|
||||||
|
public:
|
||||||
|
bool bTotalDiff, //总体计算输赢
|
||||||
|
bInstant; //即时跳转
|
||||||
|
|
||||||
|
TLevelPolicy(){bTotalDiff=bInstant=0;}
|
||||||
|
};
|
||||||
|
|
||||||
|
class TWLDiffPolicy: public TLevelPolicy{
|
||||||
|
public:
|
||||||
|
bool bIndie; //各层分别统计
|
||||||
|
TWLDiffPolicy(){bIndie=0;}
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct tagRandomChip{
|
||||||
|
int minChip, //最小随机
|
||||||
|
maxChip; //最大随机
|
||||||
|
tagRandomChip(){minChip=20, maxChip=100;}
|
||||||
|
}TRandomChip;
|
||||||
|
|
||||||
|
typedef struct tagBPAskBet{
|
||||||
|
char bet[2]; //庄全红/闲全红 0=不打 1=庄 2=闲
|
||||||
|
tagBPAskBet(){bet[0]=1, bet[1]=2;}
|
||||||
|
}TBPAskBet;
|
||||||
|
|
||||||
|
typedef struct tagBPDiffBet{
|
||||||
|
BYTE diff[2]; //庄闲差 0=庄大 1=闲大
|
||||||
|
// char bet[2]; //庄大/闲大下注 1=庄 2=闲
|
||||||
|
char bets[2][16]; //庄大/闲大下注 1=庄 2=闲
|
||||||
|
tagBPDiffBet(){diff[0]=diff[1]=5, strcpy(bets[0],"a"), strcpy(bets[1],"s");}
|
||||||
|
}TBPDiffBet;
|
||||||
|
|
||||||
|
void __fastcall LoadPolicies();
|
||||||
|
int __fastcall SavePolicy(int type, TBasePolicy* pPolicy, int index);
|
||||||
|
int __fastcall DeletePolicy(int type, int index);
|
||||||
|
int __fastcall MinChipOfPolicy(int index);
|
||||||
|
vector<int> __fastcall PolicyInCombo(int iPolicy);
|
||||||
|
int __fastcall FindPolicy(int type, int id);
|
||||||
|
void __fastcall CheckComboRow(TComboRow* row);
|
||||||
|
|
||||||
|
extern vector<TBasePolicy*> g_aBetPolicies;
|
||||||
|
extern vector<TBasePolicy*> g_aChipPolicies;
|
||||||
|
extern int g_iBetPolicy; //全局打法
|
||||||
|
extern int g_iChipPolicy;//全局注码
|
||||||
|
extern int g_nChipMul; //全局注码倍数
|
||||||
|
extern TRandomChip g_RandomChip;
|
||||||
|
extern TBPAskBet g_BPAskBet;
|
||||||
|
extern TBPDiffBet g_BPDiffBet;
|
||||||
|
#endif
|
||||||
+1649
File diff suppressed because it is too large
Load Diff
+335
@@ -0,0 +1,335 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <vcl.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
#include <System.IOUtils.hpp>
|
||||||
|
#include <Winternl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "CommonV8Handler.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <Vcl.Styles.hpp>
|
||||||
|
#include <Vcl.Themes.hpp>
|
||||||
|
#pragma package(smart_init)
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// 获取父进程函数
|
||||||
|
typedef struct _PROCESS_BASIC_INFORMATIONWOW64 {
|
||||||
|
NTSTATUS ExitStatus;
|
||||||
|
ULONG64 PebBaseAddress;
|
||||||
|
ULONG64 AffinityMask;
|
||||||
|
LONG BasePriority;
|
||||||
|
ULONG64 UniqueProcessId;
|
||||||
|
ULONG64 InheritedFromUniqueProcessId;
|
||||||
|
} PROCESS_BASIC_INFORMATION_WOW64;
|
||||||
|
|
||||||
|
typedef LONG (WINAPI *PNTQUERYINFORMATIONPROCESS)(HANDLE,UINT,PVOID,ULONG,PULONG);
|
||||||
|
|
||||||
|
DWORD GetParentProcessId(DWORD pid)//获取指定进程的父进程ID
|
||||||
|
{
|
||||||
|
DWORD dwParentPID = 0;
|
||||||
|
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
|
||||||
|
if( !hProcess ){
|
||||||
|
//ShowMessage( "OpenProcess err" );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
PNTQUERYINFORMATIONPROCESS NtQueryInformationProcess = NULL;
|
||||||
|
BOOL bProcWow = FALSE;
|
||||||
|
IsWow64Process(hProcess, &bProcWow);
|
||||||
|
if( bProcWow==TRUE ){
|
||||||
|
//ShowMessage( "32bit" );
|
||||||
|
NtQueryInformationProcess = (PNTQUERYINFORMATIONPROCESS)GetProcAddress(GetModuleHandleA("ntdll.dll"),
|
||||||
|
"NtWow64QueryInformationProcess64");
|
||||||
|
PROCESS_BASIC_INFORMATION_WOW64 pbi;
|
||||||
|
NTSTATUS status = NtQueryInformationProcess(hProcess, ProcessBasicInformation, (PVOID)&pbi,
|
||||||
|
sizeof(PROCESS_BASIC_INFORMATION_WOW64), NULL);
|
||||||
|
//ShowMessage("NtWow64Query return: " + IntToHex((int)status));
|
||||||
|
if( NT_SUCCESS(status) )
|
||||||
|
dwParentPID = (DWORD)pbi.InheritedFromUniqueProcessId;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//ShowMessage( "64bit" );
|
||||||
|
NtQueryInformationProcess = (PNTQUERYINFORMATIONPROCESS)GetProcAddress(GetModuleHandleA("ntdll.dll"),
|
||||||
|
"NtQueryInformationProcess");
|
||||||
|
PROCESS_BASIC_INFORMATION pbi;
|
||||||
|
NTSTATUS status = NtQueryInformationProcess(hProcess, ProcessBasicInformation, (PVOID)&pbi,
|
||||||
|
sizeof(PROCESS_BASIC_INFORMATION), NULL);
|
||||||
|
//ShowMessage("NtQuery return: " + IntToHex((int)status));
|
||||||
|
if( NT_SUCCESS(status) )
|
||||||
|
dwParentPID = (DWORD)pbi.Reserved3;
|
||||||
|
}
|
||||||
|
CloseHandle(hProcess);
|
||||||
|
|
||||||
|
|
||||||
|
return dwParentPID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 定义枚举窗口回调函数
|
||||||
|
BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
|
||||||
|
{
|
||||||
|
HANDLE h = GetProp(hwnd, _TEXT(APPABBR));
|
||||||
|
if(h == (HANDLE)SOFTWARE_ID) {
|
||||||
|
*(HANDLE*)lParam = hwnd;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// CEF初始化函数
|
||||||
|
|
||||||
|
bool InitCef()
|
||||||
|
{
|
||||||
|
GlobalCEFApp = new TCefApplication;
|
||||||
|
|
||||||
|
GlobalCEFApp->Cache = String(g_AppPath) + "cache";
|
||||||
|
GlobalCEFApp->Locale = "zh-CN";
|
||||||
|
GlobalCEFApp->AcceptLanguageList = "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6";
|
||||||
|
|
||||||
|
if(g_bTesting){
|
||||||
|
GlobalCEFApp->LogFile = "debug-" + IntToStr(DateTimeToUnix(Now(), false)) + ".log";
|
||||||
|
GlobalCEFApp->LogSeverity = LOGSEVERITY_INFO; //LOGSEVERITY_VERBOSE; //
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
GlobalCEFApp->LogSeverity = LOGSEVERITY_DISABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
GlobalCEFApp->CheckCEFFiles = false;
|
||||||
|
// GlobalCEFApp->PackLoadingDisabled = false;
|
||||||
|
GlobalCEFApp->PersistSessionCookies = true;
|
||||||
|
// GlobalCEFApp->PersistUserPreferences = true;
|
||||||
|
GlobalCEFApp->IgnoreCertificateErrors = true;
|
||||||
|
GlobalCEFApp->NoSandbox = true;
|
||||||
|
GlobalCEFApp->MuteAudio = true;
|
||||||
|
GlobalCEFApp->EnableGPU = true;
|
||||||
|
GlobalCEFApp->SitePerProcess = true; //78.0以上iframe运行js代码必须设置
|
||||||
|
GlobalCEFApp->DisableWebSecurity = true; //78.0以上iframe运行js代码必须设置
|
||||||
|
GlobalCEFApp->DisableSiteIsolationTrials = true; //78.0以上iframe运行js代码必须设置
|
||||||
|
GlobalCEFApp->DisableChromeLoginPrompt = true;
|
||||||
|
GlobalCEFApp->EnableMediaStream = false; //true; //
|
||||||
|
GlobalCEFApp->LogProcessInfo = false; //true; //
|
||||||
|
GlobalCEFApp->SingleProcess = false; //true; //
|
||||||
|
GlobalCEFApp->MultiThreadedMessageLoop = true;
|
||||||
|
GlobalCEFApp->WindowlessRenderingEnabled = true;
|
||||||
|
GlobalCEFApp->DisableImageLoading = true;
|
||||||
|
|
||||||
|
GlobalCEFApp->OnWebKitInitialized = _di_TOnWebKitInitializedEvent(new TWebKitInitializeEvent());
|
||||||
|
|
||||||
|
if( !GlobalCEFApp->StartMainProcess() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 子进程判断函数
|
||||||
|
bool IsRestart()
|
||||||
|
{
|
||||||
|
HWND hWnd = NULL;
|
||||||
|
if(SINGLE_INSTANCE){
|
||||||
|
EnumWindows(EnumWndProc,(LPARAM)&hWnd); //枚举所有运行的窗口
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
String strFullName = TPath::GetFullPath(Application->ExeName);
|
||||||
|
HWND hWnd = FindWindow( (LPCTSTR)strFullName.c_str(), NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( hWnd ){
|
||||||
|
//ShowMessage("restart");
|
||||||
|
|
||||||
|
DWORD wndProcess_id = 0;
|
||||||
|
DWORD parent_id=GetParentProcessId(GetCurrentProcessId());
|
||||||
|
GetWindowThreadProcessId( hWnd, &wndProcess_id );
|
||||||
|
|
||||||
|
if( wndProcess_id==parent_id ){
|
||||||
|
//ShowMessage("SubProcess");
|
||||||
|
InitCef();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
SendMessage( hWnd, UM_RESTORE, 0, 0 );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// 程序自动升级函数
|
||||||
|
void StartUpgrade( int mode )
|
||||||
|
{
|
||||||
|
HANDLE hToken = NULL,
|
||||||
|
hTokenDup = NULL;
|
||||||
|
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken)){
|
||||||
|
if(DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS,NULL, SecurityIdentification,
|
||||||
|
TokenPrimary, &hTokenDup)){
|
||||||
|
STARTUPINFO si;
|
||||||
|
PROCESS_INFORMATION pi;
|
||||||
|
|
||||||
|
ZeroMemory(&si,sizeof(STARTUPINFO));
|
||||||
|
ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
|
||||||
|
si.cb = sizeof(STARTUPINFO);
|
||||||
|
si.lpDesktop = NULL;
|
||||||
|
si.lpReserved = NULL;
|
||||||
|
si.lpTitle = NULL;
|
||||||
|
si.cbReserved2 = NULL;
|
||||||
|
si.lpReserved2 = NULL;
|
||||||
|
si.dwFlags = STARTF_USESHOWWINDOW;
|
||||||
|
si.wShowWindow = mode==2 ? SW_SHOWNORMAL //显示进程窗口
|
||||||
|
: SW_HIDE; //隐藏进程窗口
|
||||||
|
|
||||||
|
String command = "\"" + (String)g_AppPath + UPDATE_APP_NAME + "\"";
|
||||||
|
if( mode==3 )
|
||||||
|
command += " move ";
|
||||||
|
else if( mode==2 )
|
||||||
|
command += " show ";
|
||||||
|
else
|
||||||
|
command += " hide ";
|
||||||
|
|
||||||
|
command += ExtractFileName(Application->ExeName);
|
||||||
|
command += " " + IntToStr(SOFTWARE_ID);
|
||||||
|
command += " " + String(GLOBAL_VAR_FILE);
|
||||||
|
|
||||||
|
CreateProcessAsUser(hTokenDup,NULL,command.c_str(),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern bool g_bBacData;
|
||||||
|
|
||||||
|
void InitUserPath()
|
||||||
|
{
|
||||||
|
String sAppPath = g_AppPath;
|
||||||
|
String sUserPath = sAppPath + "user\\";
|
||||||
|
if(!DirectoryExists( sUserPath, false)){
|
||||||
|
ForceDirectories( sUserPath );
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_bBacData){
|
||||||
|
String sDataPath = sAppPath + "data\\";
|
||||||
|
if(!DirectoryExists( sDataPath, false)){
|
||||||
|
ForceDirectories( sDataPath );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
USEFORM("RBmasterMain.cpp", MainForm);
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
bool Startup()
|
||||||
|
{
|
||||||
|
String strAppPath = ExtractFileDir(ParamStr(0)) + "\\";
|
||||||
|
strcpy( g_AppPath, ((AnsiString)strAppPath).c_str() );
|
||||||
|
|
||||||
|
for(int i=1; i<=ParamCount(); i++){
|
||||||
|
String sParam = LowerCase(ParamStr(i));
|
||||||
|
if (sParam == "-d")
|
||||||
|
g_bBacData = true;
|
||||||
|
else if (sParam == "-testing")
|
||||||
|
g_bTesting = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( IsRestart() ){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
Application->Initialize();
|
||||||
|
|
||||||
|
int tag = 0;
|
||||||
|
if( !InitCef() ){
|
||||||
|
tag = -5;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
InitUserPath();
|
||||||
|
Application->Title = APPNAME;
|
||||||
|
Application->CreateForm(__classid(TMainForm), &MainForm);
|
||||||
|
Application->MainFormOnTaskBar = true;
|
||||||
|
tag = Application->MainForm->Tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool bRun(0);
|
||||||
|
if( tag==0 ){
|
||||||
|
bRun = true;
|
||||||
|
}
|
||||||
|
else if( tag==-1 ){
|
||||||
|
ShowMessage( "加载应用模块失败,退出程序" );
|
||||||
|
}
|
||||||
|
else if( tag==-3 ){
|
||||||
|
ShowMessage( "连接服务器失败,退出程序" );
|
||||||
|
}
|
||||||
|
else if( tag==-4 ){
|
||||||
|
ShowMessage( "软件已停止运行,退出程序" );
|
||||||
|
}
|
||||||
|
else if( tag==-5 ){
|
||||||
|
ShowMessage( "初始化网络模块失败,退出程序" );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int mode = tag;
|
||||||
|
if( tag==4 ){
|
||||||
|
int mrRet = MessageBox(NULL, L"检测到有新的版本,是否立即升级?",
|
||||||
|
APPNAME, MB_ICONQUESTION | MB_YESNO);
|
||||||
|
if( mrRet==mrYes )
|
||||||
|
mode = 2;
|
||||||
|
else
|
||||||
|
mode = 0;
|
||||||
|
}
|
||||||
|
else if( tag==2 ){
|
||||||
|
ShowMessage( "软件运行需更新相关组件,即将启动更新程序" );
|
||||||
|
}
|
||||||
|
|
||||||
|
bRun = mode<=1;
|
||||||
|
|
||||||
|
if( mode>0 )
|
||||||
|
StartUpgrade( mode );
|
||||||
|
}
|
||||||
|
|
||||||
|
if(bRun){
|
||||||
|
if(!g_bTesting)
|
||||||
|
SetProp(Application->MainFormHandle, _TEXT(APPABBR), (HANDLE)SOFTWARE_ID);
|
||||||
|
|
||||||
|
Application->HintHidePause = 10000;
|
||||||
|
Application->MainForm->Show();
|
||||||
|
|
||||||
|
Application->Run();
|
||||||
|
|
||||||
|
if(!g_bTesting)
|
||||||
|
RemoveProp(Application->MainFormHandle, _TEXT(APPABBR));
|
||||||
|
}
|
||||||
|
|
||||||
|
DestroyGlobalCEFApp();
|
||||||
|
}
|
||||||
|
catch (Exception &exception)
|
||||||
|
{
|
||||||
|
Application->ShowException(&exception);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
throw Exception("");
|
||||||
|
}
|
||||||
|
catch (Exception &exception)
|
||||||
|
{
|
||||||
|
Application->ShowException(&exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
|
||||||
|
{
|
||||||
|
if( !Startup() )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
+4348
File diff suppressed because it is too large
Load Diff
+139908
File diff suppressed because it is too large
Load Diff
+313
@@ -0,0 +1,313 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef RBmasterMainH
|
||||||
|
#define RBmasterMainH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.Buttons.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.ComCtrls.hpp>
|
||||||
|
#include <Vcl.Grids.hpp>
|
||||||
|
|
||||||
|
#include "CEF4DelphiVCLRTL.hpp"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include <Vcl.Mask.hpp>
|
||||||
|
#include <Vcl.WinXCtrls.hpp>
|
||||||
|
#include "InfoFrameUnit.h"
|
||||||
|
#include <Vcl.TitleBarCtrls.hpp>
|
||||||
|
#include <Vcl.Imaging.jpeg.hpp>
|
||||||
|
#include <Vcl.Imaging.pngimage.hpp>
|
||||||
|
#include <Vcl.Menus.hpp>
|
||||||
|
#include "TableUnit.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <set>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TMainForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TBitBtn *m_btnSetting;
|
||||||
|
TScrollBox *m_panWeb;
|
||||||
|
TComboBox *m_cbRoad;
|
||||||
|
TToggleSwitch *m_tsMode;
|
||||||
|
TComboBox *m_cbBetWays;
|
||||||
|
TLabel *m_lblBetWayEdit;
|
||||||
|
TPanel *m_panTopBar;
|
||||||
|
TLabel *m_lblBetChipEdit;
|
||||||
|
TComboBox *m_cbBetChips;
|
||||||
|
TBitBtn *m_btnChart;
|
||||||
|
TBitBtn *m_btnLogs;
|
||||||
|
TBitBtn *m_btnStart;
|
||||||
|
TBitBtn *m_btnTables;
|
||||||
|
TBitBtn *m_btnLogin;
|
||||||
|
TLabeledEdit *m_leChipMul;
|
||||||
|
TLabel *m_lblTips;
|
||||||
|
TBevel *Bevel1;
|
||||||
|
TBevel *Bevel2;
|
||||||
|
TBevel *Bevel3;
|
||||||
|
TBevel *Bevel4;
|
||||||
|
TBitBtn *m_btnManual;
|
||||||
|
TBitBtn *m_btnReset;
|
||||||
|
TImage *m_imgBack;
|
||||||
|
TLabel *m_lblAnnonce;
|
||||||
|
TPopupMenu *m_pmCopyAccount;
|
||||||
|
TMenuItem *m_miCopyAccount;
|
||||||
|
TInfoFrame *m_frmInfo;
|
||||||
|
TPopupMenu *m_pmLogin;
|
||||||
|
TMenuItem *m_miPA;
|
||||||
|
TMenuItem *m_miAB;
|
||||||
|
TMenuItem *m_miDB;
|
||||||
|
TPopupMenu *m_pmRight;
|
||||||
|
TMenuItem *m_miRun;
|
||||||
|
TMenuItem *m_miRunOnly;
|
||||||
|
TMenuItem *m_miStop;
|
||||||
|
TMenuItem *N1;
|
||||||
|
TMenuItem *N2;
|
||||||
|
TMenuItem *m_miUnselect;
|
||||||
|
TMenuItem *m_miStopOthers;
|
||||||
|
TMenuItem *N3;
|
||||||
|
TMenuItem *m_miSpec;
|
||||||
|
TMenuItem *N4;
|
||||||
|
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall FormResize(TObject *Sender);
|
||||||
|
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
|
||||||
|
void __fastcall FormShow(TObject *Sender);
|
||||||
|
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
|
||||||
|
void __fastcall OnStartClick(TObject *Sender);
|
||||||
|
void __fastcall WebMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall WebMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall OnRoadChange(TObject *Sender);
|
||||||
|
void __fastcall OnTablesClick(TObject *Sender);
|
||||||
|
void __fastcall OnModeClick(TObject *Sender);
|
||||||
|
void __fastcall OnPolicyEditClick(TObject *Sender);
|
||||||
|
void __fastcall OnPolicyChange(TObject *Sender);
|
||||||
|
void __fastcall OnLoginClick(TObject *Sender);
|
||||||
|
void __fastcall OnChipMulExit(TObject *Sender);
|
||||||
|
void __fastcall OnLogsClick(TObject *Sender);
|
||||||
|
void __fastcall OnChartClick(TObject *Sender);
|
||||||
|
void __fastcall OnSettingClick(TObject *Sender);
|
||||||
|
void __fastcall OnResetClick(TObject *Sender);
|
||||||
|
void __fastcall OnManualClick(TObject *Sender);
|
||||||
|
void __fastcall OnChipMulKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall OnAccountClick(TObject *Sender);
|
||||||
|
void __fastcall FormActivate(TObject *Sender);
|
||||||
|
void __fastcall OnLoginMenuClick(TObject *Sender);
|
||||||
|
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall OnComboCloseUp(TObject *Sender);
|
||||||
|
void __fastcall WebMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall WebMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall WebMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall OnPMRightClick(TObject *Sender);
|
||||||
|
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
|
||||||
|
private: // User declarations
|
||||||
|
HINSTANCE m_hPMDll;
|
||||||
|
|
||||||
|
int m_iWSVelo, m_iWS;
|
||||||
|
String m_loginValues[6];
|
||||||
|
String m_url;
|
||||||
|
|
||||||
|
String m_sActCode; //授权码
|
||||||
|
int m_tExpire; //授权有效期
|
||||||
|
UINT m_idDevice; //设备号
|
||||||
|
|
||||||
|
WORD m_version[4];
|
||||||
|
|
||||||
|
TThread *m_vlThread, //Velo线程
|
||||||
|
*m_jsThread, //JS处理线程
|
||||||
|
*m_urThread, //用户鉴权线程
|
||||||
|
*m_dpThread; //数据解析线程
|
||||||
|
|
||||||
|
TTimer *m_pDPTimer, //数据处理定时器
|
||||||
|
*m_pUtilTimer; //工具定时器,Tag区分用途
|
||||||
|
int m_tmChart, //图表定时计数
|
||||||
|
m_tmWebFocus, //网页激活定时计数
|
||||||
|
// m_tmWebTimeout, //网页无数据超时
|
||||||
|
m_tmCount, //秒计数器
|
||||||
|
m_tmLogon, //登录时间
|
||||||
|
m_tmDailyLogin, //每日登录时间
|
||||||
|
m_tmDailyReport, //每日上报时间
|
||||||
|
m_tmDeadPause, //爆缆暂停定时计数
|
||||||
|
m_tmBetPause; //止赢止损暂停定时计数
|
||||||
|
|
||||||
|
bool m_bWebLogon,
|
||||||
|
m_bClosing,
|
||||||
|
m_bManual;
|
||||||
|
|
||||||
|
int m_nTabCols, m_nTabGap;
|
||||||
|
int m_iWindowState,
|
||||||
|
m_nLeft, m_nTop, m_nWidth, m_nHeight;
|
||||||
|
|
||||||
|
TChromium *m_chrm;
|
||||||
|
|
||||||
|
TStringList* m_v8Values;
|
||||||
|
HANDLE m_hV8Sema;
|
||||||
|
HANDLE m_hV8ValueSema;
|
||||||
|
// bool m_bV8Waiting;
|
||||||
|
|
||||||
|
vector<TTableFrame*> m_aTables;
|
||||||
|
vector<TThread*> m_aABThreads; //自动下注线程组
|
||||||
|
int m_nTabShow, m_nTabRun;
|
||||||
|
|
||||||
|
bool m_bDragReady, //鼠标拖动进行选择操作
|
||||||
|
m_bDraging;
|
||||||
|
TTimer *m_pDragTimer; //拖动滚屏定时器
|
||||||
|
int m_iLastSel; //最后单独选中台桌
|
||||||
|
set<int> m_aSelTabs; //选中台桌集合
|
||||||
|
|
||||||
|
int __fastcall TryUpdate();
|
||||||
|
int __fastcall InitGlobalVars();
|
||||||
|
|
||||||
|
void __fastcall DPTimerProc(TObject* Sender);
|
||||||
|
void __fastcall UtilTimerProc(TObject* Sender);
|
||||||
|
bool __fastcall WebsiteVelocity();
|
||||||
|
void __fastcall InitBrowser();
|
||||||
|
void __fastcall FileUserWeb( bool bSave=false );
|
||||||
|
void __fastcall FileGame( bool bSave=false );
|
||||||
|
void __fastcall FileUserVars( bool bSave=false );
|
||||||
|
void __fastcall ClearABThread(int hThread=0);
|
||||||
|
void __fastcall ClearDPThread();
|
||||||
|
void __fastcall ClearJSThread();
|
||||||
|
void __fastcall ClearVLThread();
|
||||||
|
void __fastcall ClearURThread();
|
||||||
|
void __fastcall ClearUtilTimer();
|
||||||
|
void __fastcall OnWSConnectError();
|
||||||
|
void __fastcall ResetGame();
|
||||||
|
void __fastcall GameOn();
|
||||||
|
void __fastcall GameOff(int iReason=0); //用户停止或退出
|
||||||
|
void __fastcall ManualOn();
|
||||||
|
void __fastcall ManualOff();
|
||||||
|
void __fastcall StartJSThread(int iOp);
|
||||||
|
void __fastcall ResetTableGrid();
|
||||||
|
void __fastcall ClearGames();
|
||||||
|
Int8 __fastcall ShowSettingForm();
|
||||||
|
void __fastcall ChangeWebsite();
|
||||||
|
int __fastcall GetTimeCount();
|
||||||
|
void __fastcall RBReport();
|
||||||
|
void __fastcall LoadUrl();
|
||||||
|
void __fastcall RecalcMultiRate();
|
||||||
|
void __fastcall SetTableFocus();
|
||||||
|
int __fastcall GetTableByPos(int x, int y);
|
||||||
|
void __fastcall SelectTables(int x1, int y1, int x2, int y2);
|
||||||
|
void __fastcall ClearSelect();
|
||||||
|
void __fastcall SetScrollTimer(int y);
|
||||||
|
void __fastcall ScrollTimerProc(TObject* Sender);
|
||||||
|
void __fastcall ReleaseV8ValueSema();
|
||||||
|
void __fastcall GetDeviceId();
|
||||||
|
void __fastcall Logout();
|
||||||
|
void __fastcall SetExpireJS();
|
||||||
|
bool __fastcall StopWebLoad();
|
||||||
|
|
||||||
|
void __fastcall WebAfterCreated(TObject *Sender, const _di_ICefBrowser browser);
|
||||||
|
void __fastcall WebBeforeClose(TObject* Sender, const _di_ICefBrowser browse);
|
||||||
|
void __fastcall WebBeforeContextMenu(TObject* Sender, const _di_ICefBrowser browser,
|
||||||
|
const _di_ICefFrame frame, const _di_ICefContextMenuParams params,
|
||||||
|
const _di_ICefMenuModel model);
|
||||||
|
void __fastcall WebBeforePopup(TObject* Sender, const _di_ICefBrowser browser, const _di_ICefFrame frame,
|
||||||
|
int popup_id, const ustring targetUrl, const ustring targetFrameName,
|
||||||
|
TCefWindowOpenDisposition targetDisposition, bool userGesture, const TCefPopupFeatures &popupFeatures,
|
||||||
|
TCefWindowInfo &windowInfo, _di_ICefClient &client, TCefBrowserSettings &settings,
|
||||||
|
_di_ICefDictionaryValue &extra_info, bool &noJavascriptAccess, bool &Result);
|
||||||
|
void __fastcall WebLoadEnd(TObject* Sender, const _di_ICefBrowser browser,
|
||||||
|
const _di_ICefFrame frame, int httpStatusCode);
|
||||||
|
void __fastcall WebProcessMessageReceived(TObject* Sender, const _di_ICefBrowser browser,
|
||||||
|
const _di_ICefFrame frame, TCefProcessId sourceProcess, const _di_ICefProcessMessage message,
|
||||||
|
/* out */ bool &Result);
|
||||||
|
void __fastcall WebResourceLoadComplete(TObject* Sender, const _di_ICefBrowser browser,
|
||||||
|
const _di_ICefFrame frame, const _di_ICefRequest request, const _di_ICefResponse response,
|
||||||
|
TCefUrlRequestStatus status, __int64 receivedContentLength);
|
||||||
|
// void __fastcall WebAddressChange(TObject* Sender, const _di_ICefBrowser browser,
|
||||||
|
// const _di_ICefFrame frame, const ustring url);
|
||||||
|
void __fastcall WebJsdialog(TObject* Sender, const _di_ICefBrowser browser, const ustring originUrl,
|
||||||
|
TCefJsDialogType dialogType, const ustring messageText, const ustring defaultPromptText,
|
||||||
|
_di_ICefJsDialogCallback callback, /* out */ bool &suppressMessage, /* out */ bool &Result);
|
||||||
|
void __fastcall WebLoadError(TObject* Sender, const _di_ICefBrowser browser, const _di_ICefFrame frame,
|
||||||
|
TCefErrorCode errorCode, const ustring errorText, const ustring failedUrl);
|
||||||
|
// void __fastcall WebPaint(TObject* Sender, const _di_ICefBrowser browser, TCefPaintElementType type_,
|
||||||
|
// NativeUInt dirtyRectsCount, const PCefRectArray dirtyRects, const void * buffer,
|
||||||
|
// int width, int height);
|
||||||
|
// void __fastcall WebGetViewRect(TObject* Sender, const _di_ICefBrowser browser, TCefRect &rect);
|
||||||
|
void __fastcall WebBeforeResourceLoad(TObject* Sender, const _di_ICefBrowser browser, const _di_ICefFrame frame,
|
||||||
|
const _di_ICefRequest request, const _di_ICefCallback callback, /* out */ TCefReturnValue &Result);
|
||||||
|
|
||||||
|
|
||||||
|
//消息处理
|
||||||
|
MESSAGE void __fastcall FormMove(TWMMove &msg);
|
||||||
|
MESSAGE void __fastcall SystemMenuCommand(TWMMenuSelect &Msg);
|
||||||
|
|
||||||
|
MESSAGE void __fastcall UMAutoBetEnd(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMRestoreWindow(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMVelocity(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMJsHandled(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMCheckCEF(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMSetBet(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMAddTable(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMStatus(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMWebLogin(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMHttpReturn(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMUserConfirm(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMWebDead(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMPolicyChanged(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMLogUpdate(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMStateUpdate(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMChartUpdate(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMEnterTable(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMFloatBet(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMFloatDead(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMGlobalBet(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMGlobalDead(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMShowActCode(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMOpenManual(TMessage &msg);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(WM_MOVE, TWMMove, FormMove)
|
||||||
|
MESSAGE_HANDLER(WM_SYSCOMMAND,TWMMenuSelect,SystemMenuCommand)
|
||||||
|
|
||||||
|
MESSAGE_HANDLER(UM_AUTOBETEND, TMessage, UMAutoBetEnd)
|
||||||
|
MESSAGE_HANDLER(UM_RESTORE, TMessage, UMRestoreWindow)
|
||||||
|
MESSAGE_HANDLER(UM_VELOCITY, TMessage, UMVelocity)
|
||||||
|
MESSAGE_HANDLER(UM_JSHANDLED, TMessage, UMJsHandled)
|
||||||
|
MESSAGE_HANDLER(UM_CHECKCEF, TMessage, UMCheckCEF)
|
||||||
|
MESSAGE_HANDLER(UM_SETBET, TMessage, UMSetBet)
|
||||||
|
MESSAGE_HANDLER(UM_ADDTABLE, TMessage, UMAddTable)
|
||||||
|
MESSAGE_HANDLER(UM_STATUS, TMessage, UMStatus)
|
||||||
|
MESSAGE_HANDLER(UM_WEBLOGIN, TMessage, UMWebLogin)
|
||||||
|
MESSAGE_HANDLER(UM_USERCONFIRM, TMessage, UMUserConfirm)
|
||||||
|
MESSAGE_HANDLER(UM_HTTPRETURN, TMessage, UMHttpReturn)
|
||||||
|
MESSAGE_HANDLER(UM_WEBDEAD, TMessage, UMWebDead)
|
||||||
|
MESSAGE_HANDLER(UM_POLICYCHANGED, TMessage, UMPolicyChanged)
|
||||||
|
MESSAGE_HANDLER(UM_LOG_UPDATE, TMessage, UMLogUpdate)
|
||||||
|
MESSAGE_HANDLER(UM_STATE_UPDATE, TMessage, UMStateUpdate)
|
||||||
|
MESSAGE_HANDLER(UM_CHART_UPDATE, TMessage, UMChartUpdate)
|
||||||
|
MESSAGE_HANDLER(UM_ENTER_TABLE, TMessage, UMEnterTable)
|
||||||
|
MESSAGE_HANDLER(UM_FLOAT_BET, TMessage, UMFloatBet)
|
||||||
|
MESSAGE_HANDLER(UM_FLOAT_DEAD, TMessage, UMFloatDead)
|
||||||
|
MESSAGE_HANDLER(UM_GLOBAL_BET, TMessage, UMGlobalBet)
|
||||||
|
MESSAGE_HANDLER(UM_GLOBAL_DEAD, TMessage, UMGlobalDead)
|
||||||
|
MESSAGE_HANDLER(UM_SUBFORMSHOWN, TMessage, UMShowActCode)
|
||||||
|
MESSAGE_HANDLER(UM_OPENMAUAL, TMessage, UMOpenManual)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void __fastcall CreateParams(TCreateParams &Params);
|
||||||
|
|
||||||
|
public: // User declarations
|
||||||
|
String m_strStatus;
|
||||||
|
|
||||||
|
__fastcall TMainForm(TComponent* Owner);
|
||||||
|
|
||||||
|
_di_ICefFrame __fastcall GetCefFrame( int type );
|
||||||
|
TStringList* __fastcall GetJQValue( String& str, _di_ICefFrame frame );
|
||||||
|
int __fastcall IsPolicyInUse(int type, int iPolicy);
|
||||||
|
// bool __fastcall IsGameOn(){return m_bGameOn && !m_tmBetPause;};
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TMainForm *MainForm;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "ResetFormUnit.h"
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
TResetForm *ResetForm = NULL;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TResetForm::TResetForm(TComponent* Owner)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TResetForm::SelAllClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_cbAmount->Checked = true;
|
||||||
|
m_cbTotProfit->Checked = true;
|
||||||
|
m_cbPeakU->Checked = true;
|
||||||
|
m_cbPeakL->Checked = true;
|
||||||
|
m_cbRealAmount->Checked = true;
|
||||||
|
m_cbRealProfit->Checked = true;
|
||||||
|
m_cbManAmount->Checked = true;
|
||||||
|
m_cbManProfit->Checked = true;
|
||||||
|
m_cbWinCount->Checked = true;
|
||||||
|
m_cbLosCount->Checked = true;
|
||||||
|
m_cbSWin->Checked = true;
|
||||||
|
m_cbSLos->Checked = true;
|
||||||
|
m_cbCurrProfit->Checked = true;
|
||||||
|
m_cbMaxChip->Checked = true;
|
||||||
|
m_cbSRProfit->Checked = true;
|
||||||
|
m_cbDead->Checked = true;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TResetForm::SelNoneClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_cbAmount->Checked = false;
|
||||||
|
m_cbTotProfit->Checked = false;
|
||||||
|
m_cbPeakU->Checked = false;
|
||||||
|
m_cbPeakL->Checked = false;
|
||||||
|
m_cbRealAmount->Checked = false;
|
||||||
|
m_cbRealProfit->Checked = false;
|
||||||
|
m_cbManAmount->Checked = false;
|
||||||
|
m_cbManProfit->Checked = false;
|
||||||
|
m_cbWinCount->Checked = false;
|
||||||
|
m_cbLosCount->Checked = false;
|
||||||
|
m_cbSWin->Checked = false;
|
||||||
|
m_cbSLos->Checked = false;
|
||||||
|
m_cbCurrProfit->Checked = false;
|
||||||
|
m_cbMaxChip->Checked = false;
|
||||||
|
m_cbSRProfit->Checked = false;
|
||||||
|
m_cbDead->Checked = false;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TResetForm::OkClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
for(int i=0; i<g_aGames.size(); i++){
|
||||||
|
TGame* pG = g_aGames[i];
|
||||||
|
if(m_cbTotProfit->Checked)
|
||||||
|
pG->profit = 0;
|
||||||
|
if(m_cbSWin->Checked)
|
||||||
|
pG->seqCount[0] = 0;
|
||||||
|
if(m_cbSLos->Checked)
|
||||||
|
pG->seqCount[1] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_cbAmount->Checked){
|
||||||
|
g_aGames.betData.amounts[0] = 0;
|
||||||
|
// g_aGames.betData.profits[0] = 0;
|
||||||
|
// PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_AMOUNT, 0);
|
||||||
|
}
|
||||||
|
if(m_cbAmount->Checked || m_cbTotProfit->Checked){
|
||||||
|
g_aGames.betData.profits[0] = 0;
|
||||||
|
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_AMOUNT, 0);
|
||||||
|
PostMessage(Application->MainFormHandle, UM_CHART_UPDATE, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_cbPeakU->Checked || m_cbPeakL->Checked){
|
||||||
|
if(m_cbPeakU->Checked) g_aGames.betData.profits[1] = 0;
|
||||||
|
if(m_cbPeakL->Checked) g_aGames.betData.profits[2] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_PEAK, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_cbRealAmount->Checked){
|
||||||
|
g_aGames.betData.amounts[1] = 0;
|
||||||
|
g_aGames.betData.profits[4] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_REAL, 1);
|
||||||
|
}
|
||||||
|
else if(m_cbRealProfit->Checked){
|
||||||
|
g_aGames.betData.profits[4] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_REAL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_cbManAmount->Checked){
|
||||||
|
g_aGames.betData.amounts[2] = 0;
|
||||||
|
g_aGames.betData.profits[5] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_MAN, 1);
|
||||||
|
}
|
||||||
|
else if(m_cbManProfit->Checked){
|
||||||
|
g_aGames.betData.profits[5] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_MAN, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_cbCurrProfit->Checked){
|
||||||
|
g_aGames.betData.profits[3] = g_aGames.fCurrProfitPeak = 0;
|
||||||
|
g_aGames.betData.profits[6] = g_aGames.betData.profits[7] = 0;
|
||||||
|
for(int i=0; i<g_aGames.size(); i++){ //台桌数据也要重置
|
||||||
|
TGame* pG = g_aGames[i];
|
||||||
|
pG->profit = 0;
|
||||||
|
if(pG->hTable) PostMessage(pG->hTable, UM_TAB_UPDATE, UPDATE_RESET, 0);
|
||||||
|
}
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_BET_R, 0);
|
||||||
|
}
|
||||||
|
else if(m_cbSRProfit->Checked){
|
||||||
|
g_aGames.betData.profits[6] = g_aGames.betData.profits[7] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_BET_R, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_cbWinCount->Checked || m_cbLosCount->Checked){
|
||||||
|
if(m_cbWinCount->Checked){
|
||||||
|
g_aGames.betData.counts[0] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_COUNT, 0);
|
||||||
|
}
|
||||||
|
if(m_cbLosCount->Checked){
|
||||||
|
g_aGames.betData.counts[1] = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_COUNT, 1);
|
||||||
|
}
|
||||||
|
PostMessage(Application->MainFormHandle, UM_CHART_UPDATE, 3, 1);
|
||||||
|
}
|
||||||
|
if(m_cbSWin->Checked){
|
||||||
|
g_aGames.betData.counts[2] = 0;
|
||||||
|
for(int i=0; i<g_aGames.size(); i++){ //台桌数据也要重置
|
||||||
|
TGame* pG = g_aGames[i];
|
||||||
|
pG->seqCount[0] = 0;
|
||||||
|
if(pG->hTable) PostMessage(pG->hTable, UM_TAB_UPDATE, UPDATE_RESET, 1);
|
||||||
|
}
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_COUNT, 2);
|
||||||
|
}
|
||||||
|
if(m_cbSLos->Checked){
|
||||||
|
g_aGames.betData.counts[3] = 0;
|
||||||
|
for(int i=0; i<g_aGames.size(); i++){ //台桌数据也要重置
|
||||||
|
TGame* pG = g_aGames[i];
|
||||||
|
pG->seqCount[1] = 0;
|
||||||
|
if(pG->hTable) PostMessage(pG->hTable, UM_TAB_UPDATE, UPDATE_RESET, 2);
|
||||||
|
}
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_COUNT, 3);
|
||||||
|
}
|
||||||
|
if(m_cbMaxChip->Checked){
|
||||||
|
g_aGames.betData.maxChip = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_MISC, 0);
|
||||||
|
}
|
||||||
|
if(m_cbDead->Checked){
|
||||||
|
g_aGames.betData.dead = 0;
|
||||||
|
PostMessage(Application->MainFormHandle, UM_STATE_UPDATE, STATE_MISC, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ModalResult = mrOk;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TResetForm::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
||||||
|
{
|
||||||
|
if(X < 0 || Y < 0 || X > Width || Y > Height)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TResetForm::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 TResetForm::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 TResetForm::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 TResetForm::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 TResetForm::WMKillFocus(TWMKillFocus &Message)
|
||||||
|
{
|
||||||
|
if(!m_bMouseOver)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------
|
||||||
|
void __fastcall TResetForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
||||||
|
{
|
||||||
|
if(Key==VK_ESCAPE)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
object ResetForm: TResetForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Hint = #27169#23454#36194#20111#20540#36798#21040#36194#21033#20540#21518#36716#23454#25171
|
||||||
|
ParentCustomHint = False
|
||||||
|
BiDiMode = bdLeftToRight
|
||||||
|
BorderIcons = []
|
||||||
|
BorderStyle = bsNone
|
||||||
|
Caption = #37325#32622#25968#25454
|
||||||
|
ClientHeight = 224
|
||||||
|
ClientWidth = 423
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
FormStyle = fsStayOnTop
|
||||||
|
KeyPreview = True
|
||||||
|
ParentBiDiMode = False
|
||||||
|
OnKeyDown = FormKeyDown
|
||||||
|
OnMouseDown = FormMouseDown
|
||||||
|
OnMouseMove = FormMouseMove
|
||||||
|
OnShow = FormShow
|
||||||
|
TextHeight = 15
|
||||||
|
object m_panBack: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 423
|
||||||
|
Height = 224
|
||||||
|
Align = alClient
|
||||||
|
TabOrder = 0
|
||||||
|
OnMouseEnter = FormMouseEnter
|
||||||
|
OnMouseLeave = FormMouseLeave
|
||||||
|
object m_btnOk: TButton
|
||||||
|
Left = 330
|
||||||
|
Top = 177
|
||||||
|
Width = 70
|
||||||
|
Height = 25
|
||||||
|
Caption = #30830#23450
|
||||||
|
TabOrder = 0
|
||||||
|
OnClick = OkClick
|
||||||
|
end
|
||||||
|
object m_gb: TGroupBox
|
||||||
|
Left = 23
|
||||||
|
Top = 15
|
||||||
|
Width = 377
|
||||||
|
Height = 146
|
||||||
|
TabOrder = 1
|
||||||
|
object m_cbAmount: TCheckBox
|
||||||
|
Left = 21
|
||||||
|
Top = 21
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #24635#27969#27700
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object m_cbDead: TCheckBox
|
||||||
|
Left = 280
|
||||||
|
Top = 111
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #29190#32518#25968
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object m_cbLosCount: TCheckBox
|
||||||
|
Left = 107
|
||||||
|
Top = 81
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #24635#36755#27425#25968
|
||||||
|
TabOrder = 2
|
||||||
|
end
|
||||||
|
object m_cbManProfit: TCheckBox
|
||||||
|
Left = 280
|
||||||
|
Top = 51
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #25163#24037#36194#21033
|
||||||
|
TabOrder = 4
|
||||||
|
end
|
||||||
|
object m_cbPeakL: TCheckBox
|
||||||
|
Left = 280
|
||||||
|
Top = 21
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #26368#22823#20111#25439
|
||||||
|
TabOrder = 5
|
||||||
|
end
|
||||||
|
object m_cbPeakU: TCheckBox
|
||||||
|
Left = 193
|
||||||
|
Top = 21
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #26368#22823#36194#21033
|
||||||
|
TabOrder = 6
|
||||||
|
end
|
||||||
|
object m_cbTotProfit: TCheckBox
|
||||||
|
Left = 107
|
||||||
|
Top = 21
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #24635#36194#21033
|
||||||
|
TabOrder = 7
|
||||||
|
end
|
||||||
|
object m_cbSLos: TCheckBox
|
||||||
|
Left = 280
|
||||||
|
Top = 81
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #26368#22823#36830#36755
|
||||||
|
TabOrder = 8
|
||||||
|
end
|
||||||
|
object m_cbSWin: TCheckBox
|
||||||
|
Left = 193
|
||||||
|
Top = 81
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #26368#22823#36830#36194
|
||||||
|
TabOrder = 9
|
||||||
|
end
|
||||||
|
object m_cbWinCount: TCheckBox
|
||||||
|
Left = 21
|
||||||
|
Top = 81
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #24635#36194#27425#25968
|
||||||
|
TabOrder = 10
|
||||||
|
end
|
||||||
|
object m_cbRealProfit: TCheckBox
|
||||||
|
Left = 107
|
||||||
|
Top = 51
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #23454#25171#36194#21033
|
||||||
|
TabOrder = 11
|
||||||
|
end
|
||||||
|
object m_cbRealAmount: TCheckBox
|
||||||
|
Left = 21
|
||||||
|
Top = 51
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #23454#25171#27969#27700
|
||||||
|
TabOrder = 12
|
||||||
|
end
|
||||||
|
object m_cbManAmount: TCheckBox
|
||||||
|
Left = 193
|
||||||
|
Top = 51
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #25163#24037#27969#27700
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
object m_cbCurrProfit: TCheckBox
|
||||||
|
Left = 21
|
||||||
|
Top = 111
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #24403#26399#36194#21033
|
||||||
|
TabOrder = 13
|
||||||
|
end
|
||||||
|
object m_cbMaxChip: TCheckBox
|
||||||
|
Left = 107
|
||||||
|
Top = 111
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #26368#22823#27880#30721
|
||||||
|
TabOrder = 14
|
||||||
|
end
|
||||||
|
object m_cbSRProfit: TCheckBox
|
||||||
|
Left = 193
|
||||||
|
Top = 111
|
||||||
|
Width = 80
|
||||||
|
Height = 17
|
||||||
|
Caption = #27169#23454#36194#20111
|
||||||
|
TabOrder = 15
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object m_btnSelAll: TButton
|
||||||
|
Left = 23
|
||||||
|
Top = 177
|
||||||
|
Width = 70
|
||||||
|
Height = 25
|
||||||
|
Caption = #20840#36873
|
||||||
|
TabOrder = 2
|
||||||
|
OnClick = SelAllClick
|
||||||
|
end
|
||||||
|
object m_btnSelNone: TButton
|
||||||
|
Left = 100
|
||||||
|
Top = 177
|
||||||
|
Width = 70
|
||||||
|
Height = 25
|
||||||
|
Caption = #20840#19981#36873
|
||||||
|
TabOrder = 3
|
||||||
|
OnClick = SelNoneClick
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef ResetFormUnitH
|
||||||
|
#define ResetFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TResetForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TPanel *m_panBack;
|
||||||
|
TButton *m_btnOk;
|
||||||
|
TGroupBox *m_gb;
|
||||||
|
TCheckBox *m_cbAmount;
|
||||||
|
TCheckBox *m_cbDead;
|
||||||
|
TCheckBox *m_cbLosCount;
|
||||||
|
TCheckBox *m_cbManProfit;
|
||||||
|
TCheckBox *m_cbPeakL;
|
||||||
|
TCheckBox *m_cbPeakU;
|
||||||
|
TCheckBox *m_cbTotProfit;
|
||||||
|
TCheckBox *m_cbSLos;
|
||||||
|
TCheckBox *m_cbSWin;
|
||||||
|
TCheckBox *m_cbWinCount;
|
||||||
|
TCheckBox *m_cbRealProfit;
|
||||||
|
TCheckBox *m_cbRealAmount;
|
||||||
|
TCheckBox *m_cbManAmount;
|
||||||
|
TCheckBox *m_cbCurrProfit;
|
||||||
|
TCheckBox *m_cbMaxChip;
|
||||||
|
TCheckBox *m_cbSRProfit;
|
||||||
|
TButton *m_btnSelAll;
|
||||||
|
TButton *m_btnSelNone;
|
||||||
|
void __fastcall SelAllClick(TObject *Sender);
|
||||||
|
void __fastcall SelNoneClick(TObject *Sender);
|
||||||
|
void __fastcall OkClick(TObject *Sender);
|
||||||
|
void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall FormMouseLeave(TObject *Sender);
|
||||||
|
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormShow(TObject *Sender);
|
||||||
|
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
private: // User declarations
|
||||||
|
bool m_bMouseOver;
|
||||||
|
|
||||||
|
MESSAGE void __fastcall WMKillFocus(TWMKillFocus &Message);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(WM_KILLFOCUS, TWMKillFocus, WMKillFocus)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TResetForm(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TResetForm *ResetForm;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,516 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#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;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
+1242
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,156 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef SettingFormUnitH
|
||||||
|
#define SettingFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
using namespace std;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TSettingForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TPanel *m_panBack;
|
||||||
|
TButton *m_btnOk;
|
||||||
|
TGroupBox *m_gbTable;
|
||||||
|
TCheckBox *m_cbInitBetByGame;
|
||||||
|
TCheckBox *m_cbInitChipByGame;
|
||||||
|
TGroupBox *m_gbMode;
|
||||||
|
TLabel *m_lbS2RWin;
|
||||||
|
TLabel *m_lbS2RLos;
|
||||||
|
TLabel *m_lbR2SLos;
|
||||||
|
TLabel *m_lbR2SWin;
|
||||||
|
TCheckBox *m_cbS2RWin;
|
||||||
|
TEdit *m_edS2RWin;
|
||||||
|
TCheckBox *m_cbS2RLos;
|
||||||
|
TEdit *m_edS2RLos;
|
||||||
|
TEdit *m_edR2SLos;
|
||||||
|
TCheckBox *m_cbR2SLos;
|
||||||
|
TCheckBox *m_cbR2SWin;
|
||||||
|
TEdit *m_edR2SWin;
|
||||||
|
TGroupBox *m_gbPause;
|
||||||
|
TBevel *Bevel1;
|
||||||
|
TCheckBox *m_cbTableStopWin;
|
||||||
|
TEdit *m_edTableStopWin;
|
||||||
|
TEdit *m_edTableStopLos;
|
||||||
|
TCheckBox *m_cbTableStopLos;
|
||||||
|
TCheckBox *m_cbTotalStopWin;
|
||||||
|
TEdit *m_edTotalStopWin;
|
||||||
|
TCheckBox *m_cbTotalStopLos;
|
||||||
|
TEdit *m_edTotalStopLos;
|
||||||
|
TGroupBox *m_gbStart;
|
||||||
|
TCheckBox *m_cbWaitNew;
|
||||||
|
TCheckBox *m_cbInitBetChipByStart;
|
||||||
|
TGroupBox *m_gbFloat;
|
||||||
|
TCheckBox *m_cbFloat;
|
||||||
|
TCheckBox *m_cbStartShow;
|
||||||
|
TGroupBox *m_gbTotalWin;
|
||||||
|
TRadioButton *m_rbTotalWin0;
|
||||||
|
TRadioButton *m_rbTotalWin1;
|
||||||
|
TRadioButton *m_rbTotalWin2;
|
||||||
|
TEdit *m_edTotalWinPause;
|
||||||
|
TLabel *m_lbTotalWin;
|
||||||
|
TGroupBox *m_gbTableWin;
|
||||||
|
TLabel *m_lbTableWin;
|
||||||
|
TRadioButton *m_rbTableWin0;
|
||||||
|
TRadioButton *m_rbTableWin1;
|
||||||
|
TRadioButton *m_rbTableWin2;
|
||||||
|
TEdit *m_edTableWinPause;
|
||||||
|
TCheckBox *m_cbInitTabProfitByStart;
|
||||||
|
TCheckBox *m_cbInitProfitByGame;
|
||||||
|
TCheckBox *m_cbInitCurProfitByStart;
|
||||||
|
TGroupBox *m_gbSimAcc;
|
||||||
|
TCheckBox *m_cbSyncReal;
|
||||||
|
TCheckBox *m_cbNoBetLow;
|
||||||
|
TCheckBox *m_cbStopLow;
|
||||||
|
TEdit *m_edSimAcc;
|
||||||
|
TCheckBox *m_cbSimAcc;
|
||||||
|
TCheckBox *m_cbInitLogByGame;
|
||||||
|
TCheckBox *m_cbU2DStop;
|
||||||
|
TEdit *m_edU2DStop;
|
||||||
|
TBevel *Bevel2;
|
||||||
|
TEdit *m_edU2DPause;
|
||||||
|
TLabel *m_lbU2DPause;
|
||||||
|
TGroupBox *m_gbU2D;
|
||||||
|
TLabel *Label7;
|
||||||
|
TLabel *Label9;
|
||||||
|
TGroupBox *m_gbTotalLos;
|
||||||
|
TLabel *m_lbTotalLos;
|
||||||
|
TRadioButton *m_rbTotalLos0;
|
||||||
|
TRadioButton *m_rbTotalLos1;
|
||||||
|
TRadioButton *m_rbTotalLos2;
|
||||||
|
TEdit *m_edTotalLosPause;
|
||||||
|
TGroupBox *m_gbTableLos;
|
||||||
|
TLabel *m_lbTableLos;
|
||||||
|
TRadioButton *m_rbTableLos0;
|
||||||
|
TRadioButton *m_rbTableLos1;
|
||||||
|
TRadioButton *m_rbTableLos2;
|
||||||
|
TEdit *m_edTableLosPause;
|
||||||
|
TCheckBox *m_cbAccStopWin;
|
||||||
|
TEdit *m_edAccStopWin;
|
||||||
|
TLabel *m_lbAccStopWin;
|
||||||
|
TCheckBox *m_cbAccStopLos;
|
||||||
|
TEdit *m_edAccStopLos;
|
||||||
|
TLabel *m_lbAccStopLos;
|
||||||
|
TBevel *Bevel3;
|
||||||
|
TGroupBox *m_gbFloatOp;
|
||||||
|
TCheckBox *m_cbU2DMinPeak;
|
||||||
|
TEdit *m_edU2DMinPeak;
|
||||||
|
TCheckBox *m_cbU2DPause;
|
||||||
|
TLabel *m_lbU2DStop;
|
||||||
|
TCheckBox *m_cbInitClearTabLog;
|
||||||
|
TCheckBox *m_cbHoldBet;
|
||||||
|
TEdit *m_edHoldBet;
|
||||||
|
TLabel *m_lbHoldBet;
|
||||||
|
TCheckBox *m_cbHaltBet;
|
||||||
|
TEdit *m_edHaltBet;
|
||||||
|
TLabel *m_lbHaltBet;
|
||||||
|
TCheckBox *m_cbFloatShuffle;
|
||||||
|
TCheckBox *m_cbFloatLos;
|
||||||
|
TCheckBox *m_cbFloatWin;
|
||||||
|
TCheckBox *m_cbFloatTie;
|
||||||
|
TCheckBox *m_cbBetsNoTie;
|
||||||
|
TCheckBox *m_cbFloatEach;
|
||||||
|
void __fastcall OkClick(TObject *Sender);
|
||||||
|
void __fastcall TotalPauseExit(TObject *Sender);
|
||||||
|
void __fastcall PauseKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall TablePauseExit(TObject *Sender);
|
||||||
|
void __fastcall SimAccKeyPress(TObject *Sender, System::WideChar &Key);
|
||||||
|
void __fastcall SimAccExit(TObject *Sender);
|
||||||
|
void __fastcall OnRelatedCBClick(TObject *Sender);
|
||||||
|
void __fastcall OnFloatOpClick(TObject *Sender);
|
||||||
|
void __fastcall U2DPauseClick(TObject *Sender);
|
||||||
|
void __fastcall FormShow(TObject *Sender);
|
||||||
|
void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall FormMouseLeave(TObject *Sender);
|
||||||
|
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
private: // User declarations
|
||||||
|
TRadioButton *m_aU2DStopRB[2],
|
||||||
|
*m_aTotalWinRB[3],
|
||||||
|
*m_aTotalLosRB[3],
|
||||||
|
*m_aTableWinRB[3],
|
||||||
|
*m_aTableLosRB[3];
|
||||||
|
TCheckBox* m_aRelatedCB[15],
|
||||||
|
*m_aFloatCB[5];
|
||||||
|
vector<TControl*> m_aRelatedCtrl[15];
|
||||||
|
bool m_bMouseOver;
|
||||||
|
|
||||||
|
MESSAGE void __fastcall WMKillFocus(TWMKillFocus &Message);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(WM_KILLFOCUS, TWMKillFocus, WMKillFocus)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TSettingForm(TComponent* Owner);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
extern PACKAGE TSettingForm *SettingForm;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,249 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include "TableIPFormUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TTableIPForm::TTableIPForm(TComponent* Owner, TGame* pG)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
m_pGame = pG;
|
||||||
|
|
||||||
|
m_cbIndPolicy->Hint = "启用独立策略后,台桌将按自己的打法和注码进行投注\n"
|
||||||
|
"同时,将不参与注码的总体计算,也不参与游台下注";
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::FormCreate(TObject *Sender)
|
||||||
|
{
|
||||||
|
for(int i=0; i<g_aBetPolicies.size(); i++){
|
||||||
|
TBasePolicy* pPolicy = g_aBetPolicies[i];
|
||||||
|
m_cbBets->AddItem(pPolicy->name,NULL);
|
||||||
|
}
|
||||||
|
m_cbBets->ItemIndex = m_iBet = m_pGame->bIndPolicy ? m_pGame->iBetPolicy : g_iBetPolicy;
|
||||||
|
|
||||||
|
m_cbRoad->ItemIndex = m_pGame->iRoad<0 ? g_iRoad : m_pGame->iRoad;
|
||||||
|
|
||||||
|
for(int i=0; i<g_aChipPolicies.size(); i++){
|
||||||
|
TBasePolicy* pPolicy = g_aChipPolicies[i];
|
||||||
|
m_cbChips->AddItem(pPolicy->name,NULL);
|
||||||
|
}
|
||||||
|
m_cbChips->ItemIndex = m_iChip = m_pGame->bIndPolicy ? m_pGame->iChipPolicy : g_iChipPolicy;
|
||||||
|
|
||||||
|
m_nMul = m_pGame->bIndPolicy ? m_pGame->nChipMul : g_nChipMul;
|
||||||
|
if(m_nMul>0){
|
||||||
|
m_leChipMul->Text = m_nMul;
|
||||||
|
m_leChipMul->Enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_cbIndPolicy->Checked = m_pGame->bIndPolicy;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::OkClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
if(m_cbIndPolicy->Checked){
|
||||||
|
if(m_iBet<0){
|
||||||
|
ShowMessage("请选择打法策略");
|
||||||
|
m_cbBets->SetFocus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_iChip<0){
|
||||||
|
ShowMessage("请选择注码策略");
|
||||||
|
m_cbChips->SetFocus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pGame->bIndPolicy = true;
|
||||||
|
m_pGame->iBetPolicy = m_iBet;
|
||||||
|
m_pGame->iChipPolicy = m_iChip;
|
||||||
|
m_pGame->nChipMul = m_nMul;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_pGame->bIndPolicy = false;
|
||||||
|
m_pGame->iBetPolicy = m_pGame->iChipPolicy = m_pGame->nChipMul = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_pGame->iRoad = m_cbRoad->ItemIndex==g_iRoad ? -1 : m_cbRoad->ItemIndex;
|
||||||
|
|
||||||
|
ModalResult = mrOk;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::PolicyChange(TObject *Sender)
|
||||||
|
{
|
||||||
|
TComboBox* pCB = (TComboBox*)Sender;
|
||||||
|
int ind = pCB->ItemIndex;
|
||||||
|
int& iPolicy = Sender==m_cbBets ? m_iBet : m_iChip;
|
||||||
|
|
||||||
|
if( ind != iPolicy ){
|
||||||
|
iPolicy = ind;
|
||||||
|
|
||||||
|
if(ind<0){
|
||||||
|
pCB->Text = pCB->Hint;
|
||||||
|
|
||||||
|
if(pCB==m_cbChips){
|
||||||
|
m_nMul = 0;
|
||||||
|
m_leChipMul->Text = "";
|
||||||
|
m_leChipMul->Enabled = false;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_cbRoad->ItemIndex = g_iRoad;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pCB==m_cbChips){
|
||||||
|
if(g_aChipPolicies[ind]->kind==KIND_CHIP_COM){
|
||||||
|
m_leChipMul->Text = "";
|
||||||
|
m_leChipMul->Enabled = false;
|
||||||
|
m_nMul = -1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int minChip = MinChipOfPolicy(ind);
|
||||||
|
if(minChip>0){
|
||||||
|
int mul = g_MinOnBet / minChip;
|
||||||
|
if(g_MinOnBet % minChip) mul++;
|
||||||
|
|
||||||
|
if(m_nMul<mul){
|
||||||
|
m_nMul = mul;
|
||||||
|
m_leChipMul->Text = IntToStr(mul);
|
||||||
|
m_leChipMul->Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_cbRoad->ItemIndex = ((TBetPolicy*)g_aBetPolicies[ind])->road;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SetChanged();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::ChipMulExit(TObject *Sender)
|
||||||
|
{
|
||||||
|
int mul = m_leChipMul->Text.ToInt();
|
||||||
|
if(mul<=0){
|
||||||
|
ShowMessage("请输入投注倍数");
|
||||||
|
m_leChipMul->SetFocus();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
int minChip = MinChipOfPolicy(m_iChip);
|
||||||
|
if(minChip * mul < g_MinOnBet){
|
||||||
|
int multi = g_MinOnBet / minChip;
|
||||||
|
if(g_MinOnBet % minChip) multi++;
|
||||||
|
|
||||||
|
m_nMul = multi;
|
||||||
|
m_leChipMul->Text = IntToStr(multi);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_nMul = mul;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetChanged();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::ChipMulKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
||||||
|
{
|
||||||
|
if( Key==13 )
|
||||||
|
m_btnOk->SetFocus();
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::SetChanged()
|
||||||
|
{
|
||||||
|
if(m_iBet>=0 && m_iChip>=0 && (m_iBet!=g_iBetPolicy || m_iChip!=g_iChipPolicy
|
||||||
|
|| m_nMul!=g_nChipMul)){
|
||||||
|
m_cbIndPolicy->Checked = true;
|
||||||
|
m_btnOk->SetFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
||||||
|
{
|
||||||
|
if(X < 0 || Y < 0 || X > Width || Y > Height)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
|
||||||
|
{
|
||||||
|
// DebugPrint("mouse move");
|
||||||
|
if(!m_bMouseOver && X>10 && X<Width-10 && Y>10 && Y<Height-10){
|
||||||
|
m_bMouseOver = true;
|
||||||
|
if(MouseCapture){
|
||||||
|
MouseCapture = false;
|
||||||
|
// DebugPrint("discaptured %d - %d", X, Y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::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 TTableIPForm::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 TTableIPForm::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 TTableIPForm::WMKillFocus(TWMKillFocus &Message)
|
||||||
|
{
|
||||||
|
if(!m_bMouseOver)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::ComboCloseUp(TObject *Sender)
|
||||||
|
{
|
||||||
|
TComboBox* pCB = (TComboBox*)Sender;
|
||||||
|
TPoint cPos = ScreenToClient(Mouse->CursorPos);
|
||||||
|
if((cPos.X<=10 || cPos.Y<=10 || cPos.X>=Width-10 || cPos.Y>=Height-10)){
|
||||||
|
cPos = pCB->ClientToScreen(TPoint(pCB->Width-10, pCB->Height/2));
|
||||||
|
SetCursorPos(cPos.X, cPos.Y);
|
||||||
|
m_bMouseOver = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTableIPForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
||||||
|
{
|
||||||
|
if(Key==VK_ESCAPE)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
object TableIPForm: TTableIPForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderIcons = []
|
||||||
|
BorderStyle = bsNone
|
||||||
|
ClientHeight = 86
|
||||||
|
ClientWidth = 399
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
KeyPreview = True
|
||||||
|
OnCreate = FormCreate
|
||||||
|
OnKeyDown = FormKeyDown
|
||||||
|
OnMouseDown = FormMouseDown
|
||||||
|
OnMouseMove = FormMouseMove
|
||||||
|
OnShow = FormShow
|
||||||
|
TextHeight = 15
|
||||||
|
object m_panBack: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 399
|
||||||
|
Height = 86
|
||||||
|
Align = alClient
|
||||||
|
BevelKind = bkFlat
|
||||||
|
BevelOuter = bvNone
|
||||||
|
Ctl3D = True
|
||||||
|
FullRepaint = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
ShowCaption = False
|
||||||
|
TabOrder = 0
|
||||||
|
OnMouseEnter = FormMouseEnter
|
||||||
|
OnMouseLeave = FormMouseLeave
|
||||||
|
object m_btnOk: TButton
|
||||||
|
Left = 316
|
||||||
|
Top = 46
|
||||||
|
Width = 65
|
||||||
|
Height = 25
|
||||||
|
Caption = #30830#23450
|
||||||
|
TabOrder = 0
|
||||||
|
OnClick = OkClick
|
||||||
|
end
|
||||||
|
object m_cbChips: TComboBox
|
||||||
|
Left = 166
|
||||||
|
Top = 14
|
||||||
|
Width = 135
|
||||||
|
Height = 22
|
||||||
|
Hint = #35831#36873#25321#27880#30721
|
||||||
|
ParentCustomHint = False
|
||||||
|
AutoDropDown = True
|
||||||
|
AutoCloseUp = True
|
||||||
|
Color = clWhite
|
||||||
|
DoubleBuffered = False
|
||||||
|
DropDownCount = 20
|
||||||
|
DropDownWidth = 200
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = []
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = False
|
||||||
|
TabOrder = 1
|
||||||
|
Text = #35831#36873#25321#27880#30721
|
||||||
|
OnChange = PolicyChange
|
||||||
|
OnCloseUp = ComboCloseUp
|
||||||
|
end
|
||||||
|
object m_cbBets: TComboBox
|
||||||
|
Left = 14
|
||||||
|
Top = 14
|
||||||
|
Width = 135
|
||||||
|
Height = 22
|
||||||
|
Hint = #35831#36873#25321#25171#27861
|
||||||
|
ParentCustomHint = False
|
||||||
|
AutoDropDown = True
|
||||||
|
AutoCloseUp = True
|
||||||
|
Color = clWhite
|
||||||
|
DoubleBuffered = False
|
||||||
|
DropDownCount = 20
|
||||||
|
DropDownWidth = 200
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = []
|
||||||
|
ParentDoubleBuffered = False
|
||||||
|
ParentFont = False
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = False
|
||||||
|
TabOrder = 2
|
||||||
|
Text = #35831#36873#25321#25171#27861
|
||||||
|
OnChange = PolicyChange
|
||||||
|
OnCloseUp = ComboCloseUp
|
||||||
|
end
|
||||||
|
object m_cbIndPolicy: TCheckBox
|
||||||
|
Left = 166
|
||||||
|
Top = 50
|
||||||
|
Width = 97
|
||||||
|
Height = 17
|
||||||
|
Caption = #21551#29992#29420#31435#31574#30053
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
object m_leChipMul: TLabeledEdit
|
||||||
|
Left = 342
|
||||||
|
Top = 14
|
||||||
|
Width = 39
|
||||||
|
Height = 21
|
||||||
|
Alignment = taCenter
|
||||||
|
AutoSize = False
|
||||||
|
EditLabel.Width = 26
|
||||||
|
EditLabel.Height = 21
|
||||||
|
EditLabel.Caption = #20493#25968
|
||||||
|
Enabled = False
|
||||||
|
LabelPosition = lpLeft
|
||||||
|
NumbersOnly = True
|
||||||
|
TabOrder = 4
|
||||||
|
Text = ''
|
||||||
|
OnExit = ChipMulExit
|
||||||
|
OnKeyDown = ChipMulKeyDown
|
||||||
|
end
|
||||||
|
object m_cbRoad: TComboBox
|
||||||
|
Left = 14
|
||||||
|
Top = 47
|
||||||
|
Width = 66
|
||||||
|
Height = 22
|
||||||
|
AutoComplete = False
|
||||||
|
Style = csDropDownList
|
||||||
|
Color = clWhite
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Tahoma'
|
||||||
|
Font.Style = []
|
||||||
|
ItemIndex = 0
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 5
|
||||||
|
Text = #20845#29664#36335
|
||||||
|
OnCloseUp = ComboCloseUp
|
||||||
|
Items.Strings = (
|
||||||
|
#20845#29664#36335
|
||||||
|
#22823#36335
|
||||||
|
#22823#30524#36335
|
||||||
|
#23567#36335
|
||||||
|
#23567#24378#36335)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef TableIPFormUnitH
|
||||||
|
#define TableIPFormUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Mask.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TTableIPForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TComboBox *m_cbBets;
|
||||||
|
TComboBox *m_cbChips;
|
||||||
|
TLabeledEdit *m_leChipMul;
|
||||||
|
TCheckBox *m_cbIndPolicy;
|
||||||
|
TButton *m_btnOk;
|
||||||
|
TPanel *m_panBack;
|
||||||
|
TComboBox *m_cbRoad;
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall OkClick(TObject *Sender);
|
||||||
|
void __fastcall PolicyChange(TObject *Sender);
|
||||||
|
void __fastcall ChipMulExit(TObject *Sender);
|
||||||
|
void __fastcall ChipMulKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormShow(TObject *Sender);
|
||||||
|
void __fastcall FormMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall FormMouseLeave(TObject *Sender);
|
||||||
|
void __fastcall ComboCloseUp(TObject *Sender);
|
||||||
|
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
|
||||||
|
private: // User declarations
|
||||||
|
TGame* m_pGame;
|
||||||
|
int m_iBet, m_iChip, m_nMul;
|
||||||
|
bool m_bMouseOver;
|
||||||
|
|
||||||
|
void __fastcall SetChanged();
|
||||||
|
|
||||||
|
MESSAGE void __fastcall WMKillFocus(TWMKillFocus &Message);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(WM_KILLFOCUS, TWMKillFocus, WMKillFocus)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
__fastcall TTableIPForm(TComponent* Owner, TGame* pG);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
+190
@@ -0,0 +1,190 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "TableSet.h"
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
#pragma resource "*.dfm"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
__fastcall TTabSetForm::TTabSetForm(TComponent* Owner, int nGame, int nShow, int nRun)
|
||||||
|
: TForm(Owner)
|
||||||
|
{
|
||||||
|
m_nGame = nGame;
|
||||||
|
m_nShow = nShow < 0 || nShow>nGame ? nGame : nShow;
|
||||||
|
m_nRun = nRun < 0 || nRun>m_nShow ? m_nShow : nRun;
|
||||||
|
m_iRun = 0;
|
||||||
|
m_bMouseOver = false;
|
||||||
|
|
||||||
|
//根据game数量添加台桌显示选项
|
||||||
|
int n = (nGame - 30) / 15;
|
||||||
|
if(0 == (nGame % 15)) n--;
|
||||||
|
for(int i=0; i<n; i++){
|
||||||
|
String str = IntToStr(45 + i*15) + "台";
|
||||||
|
m_cbShow->AddItem(str, NULL);
|
||||||
|
}
|
||||||
|
m_cbShow->AddItem("全选", NULL);
|
||||||
|
|
||||||
|
if(nShow<0 || nShow>=nGame)
|
||||||
|
m_iShow = m_cbShow->Items->Count - 1;
|
||||||
|
else
|
||||||
|
m_iShow = (m_nShow / 15) - 1;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::FormCreate(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_cbShow->ItemIndex = m_iShow;
|
||||||
|
OnShowChange(NULL);
|
||||||
|
m_cbShow->Enabled = !g_bGameOn;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::OnShowChange(TObject *Sender)
|
||||||
|
{
|
||||||
|
TComboBox* pShow = (TComboBox*)Sender;
|
||||||
|
if(pShow){
|
||||||
|
m_iShow = pShow->ItemIndex;
|
||||||
|
if(m_iShow == m_cbShow->Items->Count-1)
|
||||||
|
m_nShow = m_nGame;
|
||||||
|
else
|
||||||
|
m_nShow = (m_iShow+1) * 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=m_cbRun->Items->Count-1; i>2; i--)
|
||||||
|
m_cbRun->Items->Delete(i);
|
||||||
|
|
||||||
|
//根据显示数量添加台桌运行选项
|
||||||
|
int n = m_nShow / 15;
|
||||||
|
if(0 == (m_nShow % 15)) n--;
|
||||||
|
for(int i=0; i<n; i++){
|
||||||
|
String str = IntToStr(15 + i*15) + "台";
|
||||||
|
m_cbRun->AddItem(str, NULL);
|
||||||
|
}
|
||||||
|
m_cbRun->AddItem("全选", NULL);
|
||||||
|
|
||||||
|
if(m_nRun >= m_nShow){
|
||||||
|
m_nRun = m_nShow;
|
||||||
|
m_cbRun->ItemIndex = m_iRun = m_cbRun->Items->Count - 1;
|
||||||
|
}
|
||||||
|
else if(m_nRun>=15){
|
||||||
|
m_cbRun->ItemIndex = m_iRun = m_nRun / 15 + 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_cbRun->ItemIndex = m_iRun = m_nRun / 5;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::OnRunChange(TObject *Sender)
|
||||||
|
{
|
||||||
|
m_iRun = m_cbRun->ItemIndex;
|
||||||
|
|
||||||
|
if(m_iRun==m_cbRun->Items->Count - 1)
|
||||||
|
m_nRun = m_nShow;
|
||||||
|
else if(m_iRun>=3)
|
||||||
|
m_nRun = (m_iRun-2) * 15;
|
||||||
|
else
|
||||||
|
m_nRun = m_iRun * 5;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::OnOkClick(TObject *Sender)
|
||||||
|
{
|
||||||
|
if(m_iShow==m_cbShow->Items->Count-1)
|
||||||
|
m_nShow = -1;
|
||||||
|
if(m_iRun==m_cbRun->Items->Count-1)
|
||||||
|
m_nRun = -1;
|
||||||
|
|
||||||
|
if(m_cbResetIPs->Checked){
|
||||||
|
for(int i=0; i<g_aGames.size(); i++)
|
||||||
|
g_aGames[i]->ResetIP();
|
||||||
|
|
||||||
|
g_aIPGames.ClearAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
ModalResult = mrOk;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::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;
|
||||||
|
// DebugPrint("discaptured");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
m_bMouseOver = false;
|
||||||
|
MouseCapture = true;
|
||||||
|
// DebugPrint("captured");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
|
||||||
|
{
|
||||||
|
if(X < 0 || Y < 0 || X > Width || Y > Height)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::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 TTabSetForm::WMKillFocus(TWMKillFocus &Message)
|
||||||
|
{
|
||||||
|
if(!m_bMouseOver)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::ComboCloseUp(TObject *Sender)
|
||||||
|
{
|
||||||
|
TComboBox* pCB = (TComboBox*)Sender;
|
||||||
|
TPoint cPos = ScreenToClient(Mouse->CursorPos);
|
||||||
|
if((cPos.X<=10 || cPos.Y<=10 || cPos.X>=Width-10 || cPos.Y>=Height-10)){
|
||||||
|
cPos = pCB->ClientToScreen(TPoint(pCB->Width-10, pCB->Height/2));
|
||||||
|
SetCursorPos(cPos.X, cPos.Y);
|
||||||
|
m_bMouseOver = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
void __fastcall TTabSetForm::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 TTabSetForm::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 TTabSetForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
||||||
|
{
|
||||||
|
if(Key==VK_ESCAPE)
|
||||||
|
ModalResult = mrCancel;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
object TabSetForm: TTabSetForm
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderIcons = []
|
||||||
|
BorderStyle = bsNone
|
||||||
|
ClientHeight = 93
|
||||||
|
ClientWidth = 273
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
KeyPreview = True
|
||||||
|
OnCreate = FormCreate
|
||||||
|
OnKeyDown = FormKeyDown
|
||||||
|
OnMouseDown = FormMouseDown
|
||||||
|
OnMouseMove = FormMouseMove
|
||||||
|
OnShow = FormShow
|
||||||
|
TextHeight = 15
|
||||||
|
object m_panBack: TPanel
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 273
|
||||||
|
Height = 93
|
||||||
|
Align = alClient
|
||||||
|
Ctl3D = True
|
||||||
|
FullRepaint = False
|
||||||
|
ParentCtl3D = False
|
||||||
|
ShowCaption = False
|
||||||
|
TabOrder = 0
|
||||||
|
OnMouseEnter = FormMouseEnter
|
||||||
|
OnMouseLeave = FormMouseLeave
|
||||||
|
object m_lblShow: TLabel
|
||||||
|
Left = 23
|
||||||
|
Top = 17
|
||||||
|
Width = 26
|
||||||
|
Height = 15
|
||||||
|
Caption = #26174#31034
|
||||||
|
end
|
||||||
|
object m_lblTabRun: TLabel
|
||||||
|
Left = 145
|
||||||
|
Top = 17
|
||||||
|
Width = 26
|
||||||
|
Height = 15
|
||||||
|
Caption = #36816#34892
|
||||||
|
end
|
||||||
|
object m_btnOk: TButton
|
||||||
|
Left = 186
|
||||||
|
Top = 52
|
||||||
|
Width = 60
|
||||||
|
Height = 25
|
||||||
|
Caption = #30830#23450
|
||||||
|
TabOrder = 0
|
||||||
|
OnClick = OnOkClick
|
||||||
|
end
|
||||||
|
object m_cbResetIPs: TCheckBox
|
||||||
|
Left = 23
|
||||||
|
Top = 56
|
||||||
|
Width = 106
|
||||||
|
Height = 17
|
||||||
|
Hint = #28165#38500#20840#37096#21488#26700#30340#29420#31435#31574#30053
|
||||||
|
Caption = #37325#32622#21488#26700#31574#30053
|
||||||
|
ParentShowHint = False
|
||||||
|
ShowHint = True
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object m_cbRun: TComboBox
|
||||||
|
Left = 179
|
||||||
|
Top = 14
|
||||||
|
Width = 67
|
||||||
|
Height = 23
|
||||||
|
Style = csDropDownList
|
||||||
|
TabOrder = 2
|
||||||
|
OnChange = OnRunChange
|
||||||
|
OnCloseUp = ComboCloseUp
|
||||||
|
Items.Strings = (
|
||||||
|
#20840#19981#36873
|
||||||
|
'5'#21488
|
||||||
|
'10'#21488
|
||||||
|
#20840#36873)
|
||||||
|
end
|
||||||
|
object m_cbShow: TComboBox
|
||||||
|
Left = 58
|
||||||
|
Top = 14
|
||||||
|
Width = 57
|
||||||
|
Height = 23
|
||||||
|
Style = csDropDownList
|
||||||
|
TabOrder = 3
|
||||||
|
OnChange = OnShowChange
|
||||||
|
OnCloseUp = ComboCloseUp
|
||||||
|
Items.Strings = (
|
||||||
|
'15'#21488
|
||||||
|
'30'#21488)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
+50
@@ -0,0 +1,50 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef TableSetH
|
||||||
|
#define TableSetH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
class TTabSetForm : public TForm
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TLabel *m_lblShow;
|
||||||
|
TLabel *m_lblTabRun;
|
||||||
|
TComboBox *m_cbShow;
|
||||||
|
TComboBox *m_cbRun;
|
||||||
|
TButton *m_btnOk;
|
||||||
|
TCheckBox *m_cbResetIPs;
|
||||||
|
TPanel *m_panBack;
|
||||||
|
|
||||||
|
void __fastcall FormCreate(TObject *Sender);
|
||||||
|
void __fastcall FormShow(TObject *Sender);
|
||||||
|
void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
|
||||||
|
void __fastcall OnShowChange(TObject *Sender);
|
||||||
|
void __fastcall OnRunChange(TObject *Sender);
|
||||||
|
void __fastcall OnOkClick(TObject *Sender);
|
||||||
|
void __fastcall ComboCloseUp(TObject *Sender);
|
||||||
|
void __fastcall FormMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall FormMouseLeave(TObject *Sender);
|
||||||
|
void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
|
||||||
|
|
||||||
|
private: // User declarations
|
||||||
|
int m_iShow, m_iRun, m_nGame;
|
||||||
|
bool m_bMouseOver;
|
||||||
|
|
||||||
|
MESSAGE void __fastcall WMKillFocus(TWMKillFocus &Message);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(WM_KILLFOCUS, TWMKillFocus, WMKillFocus)
|
||||||
|
END_MESSAGE_MAP(TForm)
|
||||||
|
public: // User declarations
|
||||||
|
int m_nShow, m_nRun;
|
||||||
|
__fastcall TTabSetForm(TComponent* Owner, int nGame, int nShow, int nRun);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
+1019
File diff suppressed because it is too large
Load Diff
+1280
File diff suppressed because it is too large
Load Diff
+136
@@ -0,0 +1,136 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef TableUnitH
|
||||||
|
#define TableUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <System.Classes.hpp>
|
||||||
|
#include <Vcl.Controls.hpp>
|
||||||
|
#include <Vcl.StdCtrls.hpp>
|
||||||
|
#include <Vcl.Forms.hpp>
|
||||||
|
#include <Vcl.ExtCtrls.hpp>
|
||||||
|
#include <Vcl.Grids.hpp>
|
||||||
|
#include "GameUnit.h"
|
||||||
|
#include <Vcl.Imaging.jpeg.hpp>
|
||||||
|
#include <Vcl.Menus.hpp>
|
||||||
|
#include <Vcl.Buttons.hpp>
|
||||||
|
#include <Vcl.Imaging.pngimage.hpp>
|
||||||
|
|
||||||
|
//using namespace TransparentPanelUnit;
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#define TFWIDTH DPIX(403)
|
||||||
|
#define TFHEIGHT DPIY(135)
|
||||||
|
|
||||||
|
class TTableFrame : public TFrame
|
||||||
|
{
|
||||||
|
__published: // IDE-managed Components
|
||||||
|
TDrawGrid *m_dgRoad;
|
||||||
|
TStringGrid *m_sgBets;
|
||||||
|
TShape *m_shpR;
|
||||||
|
TShape *m_shpB;
|
||||||
|
TShape *m_shpG;
|
||||||
|
TLabel *m_lbProfit;
|
||||||
|
TLabel *m_lbSeq;
|
||||||
|
TCheckBox *m_cbRun;
|
||||||
|
TStaticText *m_stVid;
|
||||||
|
TLabel *m_lbTimeout;
|
||||||
|
TShape *m_shpS;
|
||||||
|
TLabel *m_lbRCount;
|
||||||
|
TLabel *m_lbBCount;
|
||||||
|
TLabel *m_lbGCount;
|
||||||
|
TLabel *m_lbCards;
|
||||||
|
TPanel *m_panTable;
|
||||||
|
TPanel *m_panBet;
|
||||||
|
TButton *m_btnBetOk;
|
||||||
|
TButton *m_btnBetCancel;
|
||||||
|
TImage *m_imgBack;
|
||||||
|
TLabel *m_lblManChip1;
|
||||||
|
TLabel *m_lblManChip2;
|
||||||
|
TLabel *m_lblManChip0;
|
||||||
|
TLabel *m_lblBetTip;
|
||||||
|
TLabel *m_lblBetChip0;
|
||||||
|
TLabel *m_lblBetChip1;
|
||||||
|
TLabel *m_lblBetChip2;
|
||||||
|
TPopupMenu *m_pmBets;
|
||||||
|
TMenuItem *clear;
|
||||||
|
TImage *m_imgIP;
|
||||||
|
|
||||||
|
void __fastcall RoadDrawCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, TRect &Rect, TGridDrawState State);
|
||||||
|
void __fastcall BetsMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall BetsMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall RoadMouseWheelDown(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall RoadMouseWheelUp(TObject *Sender, TShiftState Shift, TPoint &MousePos, bool &Handled);
|
||||||
|
void __fastcall RoadSelectCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, bool &CanSelect);
|
||||||
|
void __fastcall BetsSelectCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, bool &CanSelect);
|
||||||
|
void __fastcall BetsDrawCell(TObject *Sender, System::LongInt ACol, System::LongInt ARow, TRect &Rect, TGridDrawState State);
|
||||||
|
void __fastcall RoadMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall RoadMouseLeave(TObject *Sender);
|
||||||
|
void __fastcall RunClick(TObject *Sender);
|
||||||
|
void __fastcall RevClick(TObject *Sender);
|
||||||
|
void __fastcall BetsMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall BetsMouseLeave(TObject *Sender);
|
||||||
|
void __fastcall BetMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall ManChipClick(TObject *Sender);
|
||||||
|
void __fastcall BetCancelClick(TObject *Sender);
|
||||||
|
void __fastcall BetOkClick(TObject *Sender);
|
||||||
|
void __fastcall ClearLogsClick(TObject *Sender);
|
||||||
|
void __fastcall IPMouseEnter(TObject *Sender);
|
||||||
|
void __fastcall IPMouseLeave(TObject *Sender);
|
||||||
|
void __fastcall IPClick(TObject *Sender);
|
||||||
|
void __fastcall TableMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall TableMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
|
||||||
|
void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
|
||||||
|
|
||||||
|
private: // User declarations
|
||||||
|
int m_logRows;
|
||||||
|
|
||||||
|
bool m_bCursorOnRoad,
|
||||||
|
m_bCursorOnLog;
|
||||||
|
|
||||||
|
TTimer *m_pTipTimer, //显示提示定时器
|
||||||
|
*m_pPauseTimer; //止赢暂停定时器
|
||||||
|
int m_aManChips[3], //待下注
|
||||||
|
m_aBetChips[3]; //已下注
|
||||||
|
TLabel *m_pManChipLabels[3], //待下注
|
||||||
|
*m_pBetChipLabels[3]; //已下注
|
||||||
|
|
||||||
|
TPngImage * m_imgOps[3];
|
||||||
|
|
||||||
|
//选中相关
|
||||||
|
bool m_bSel;
|
||||||
|
TForm *m_fmMask;
|
||||||
|
|
||||||
|
void __fastcall ShowTip(String tip, int type);
|
||||||
|
void __fastcall TipTimerProc(TObject* Sender);
|
||||||
|
void __fastcall PauseTimerProc(TObject* Sender);
|
||||||
|
void __fastcall ClearTipTimer();
|
||||||
|
void __fastcall ClearPauseTimer();
|
||||||
|
void __fastcall AddChip(int ind);
|
||||||
|
void __fastcall UpdateStatus();
|
||||||
|
void __fastcall UpdateRoad();
|
||||||
|
void __fastcall UpdateLogs();
|
||||||
|
void __fastcall UpdateIP();
|
||||||
|
|
||||||
|
//消息处理
|
||||||
|
MESSAGE void __fastcall UMUpdate(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMChangeRoad(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMSetManual(TMessage &msg);
|
||||||
|
MESSAGE void __fastcall UMLogUpdate(TMessage &msg);
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP
|
||||||
|
MESSAGE_HANDLER(UM_TAB_UPDATE, TMessage, UMUpdate)
|
||||||
|
MESSAGE_HANDLER(UM_CHANGE_ROAD, TMessage, UMChangeRoad)
|
||||||
|
MESSAGE_HANDLER(UM_MANUAL_SET, TMessage, UMSetManual)
|
||||||
|
MESSAGE_HANDLER(UM_LOG_UPDATE, TMessage, UMLogUpdate)
|
||||||
|
END_MESSAGE_MAP(TFrame)
|
||||||
|
public: // User declarations
|
||||||
|
TGame* m_pGame;
|
||||||
|
|
||||||
|
__fastcall TTableFrame(TComponent* Owner);
|
||||||
|
__fastcall ~TTableFrame();
|
||||||
|
|
||||||
|
void __fastcall SetGame(TGame* pGame);
|
||||||
|
void __fastcall SetRun(bool bRun);
|
||||||
|
void __fastcall SetSel(bool bSel);
|
||||||
|
};
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include "UtilityUnit.h"
|
||||||
|
#include "GlobalUnit.h"
|
||||||
|
#include "RBmasterMain.h"
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma package(smart_init)
|
||||||
|
|
||||||
|
int g_iPlatform = 0; //游戏平台
|
||||||
|
unsigned g_tmCurrent = 0,
|
||||||
|
g_tmIdle = 0; //软件无操作时间
|
||||||
|
bool g_bBacData = false;
|
||||||
|
|
||||||
|
void __fastcall ResetIdle()
|
||||||
|
{
|
||||||
|
if(g_tmIdle==600)
|
||||||
|
MainForm->GetCefFrame( MAIN_FRAME )->ExecuteJavaScript("tmRetry=90;console.log('tmRetry:',tmRetry);", "", 0);
|
||||||
|
|
||||||
|
g_tmIdle = 0;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_di_ICefFrame __fastcall GetCefFrame( int type )
|
||||||
|
{
|
||||||
|
return MainForm->GetCefFrame( type );
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
TStringList* __fastcall GetJQValue( String& str, _di_ICefFrame frame )
|
||||||
|
{
|
||||||
|
return MainForm->GetJQValue( str, frame );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall SetStatus( int iStatus, String str )
|
||||||
|
{
|
||||||
|
MainForm->m_strStatus = str;
|
||||||
|
MainForm->Perform(UM_STATUS, iStatus, (NativeInt)0 );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall UpdateStatistics()
|
||||||
|
{
|
||||||
|
MainForm->Perform(UM_STATISTICS, 0, (NativeInt)0 );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void __fastcall AutoBetEnd(int code)
|
||||||
|
{
|
||||||
|
PostMessage( MainForm->Handle, UM_AUTOBETEND, code, 0 );
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
//bool __fastcall IsGameOn()
|
||||||
|
//{
|
||||||
|
// return MainForm->IsGameOn();
|
||||||
|
//}
|
||||||
|
////---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int __fastcall IsPolicyInUse(int type, int iPolicy)
|
||||||
|
{
|
||||||
|
return MainForm->IsPolicyInUse(type, iPolicy);
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
char sufCard[3][8] = {"_,_,_", ",_,_", ",_"};
|
||||||
|
String __fastcall UnifyCard(String card)
|
||||||
|
{
|
||||||
|
String uc;
|
||||||
|
|
||||||
|
int len = card.Length();
|
||||||
|
if(len==0)
|
||||||
|
uc = sufCard[0];
|
||||||
|
else if(len==1)
|
||||||
|
uc = card + sufCard[1];
|
||||||
|
else if(len==3)
|
||||||
|
uc = card + sufCard[2];
|
||||||
|
else if(len==5)
|
||||||
|
uc = card;
|
||||||
|
else
|
||||||
|
DebugPrint("!!!====abnormal card : %s", ((AnsiString)uc).c_str());
|
||||||
|
|
||||||
|
return uc;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef UtilityUnitH
|
||||||
|
#define UtilityUnitH
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include "CEF4DelphiVCLRTL.hpp"
|
||||||
|
|
||||||
|
#define MAIN_FRAME 0
|
||||||
|
|
||||||
|
#define PF_PA 1
|
||||||
|
#define PF_AB 2
|
||||||
|
#define PF_DB 3
|
||||||
|
|
||||||
|
void __fastcall ResetIdle();
|
||||||
|
_di_ICefFrame __fastcall GetCefFrame( int type );
|
||||||
|
TStringList* __fastcall GetJQValue( String& str, _di_ICefFrame frame );
|
||||||
|
void __fastcall SetStatus( int iStatus, String str );
|
||||||
|
void __fastcall UpdateStatistics();
|
||||||
|
void __fastcall AutoBetEnd(int code);
|
||||||
|
String __fastcall UnifyCard(String card);
|
||||||
|
//bool __fastcall IsGameOn();
|
||||||
|
int __fastcall IsPolicyInUse(int type, int iPolicy);
|
||||||
|
|
||||||
|
extern int g_iPlatform; //ÓÎϷƽ̨
|
||||||
|
extern unsigned g_tmCurrent, g_tmIdle;
|
||||||
|
extern bool g_bBacData;
|
||||||
|
#endif
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 119 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 788 KiB |
Reference in New Issue
Block a user