⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs.~cpp

📁 这是一个电力多功能电表的参数设置工具软件
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "cs.h"
#include "sd.h"
#include "writeCard.h"
#include "convstr.h"


#include "setCs.h"
#include "setSd.h"
#include "password.h"
#include <registry.hpp>


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TfrmCs *frmCs;
//---------------------------------------------------------------------------
__fastcall TfrmCs::TfrmCs(TComponent* Owner)
    : TForm(Owner)
{
    ClearIcFlag=false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmCs::BitBtn1Click(TObject *Sender)
{

    AnsiString addStrCs,addStrSd,addStrSdxs,addStrTdxs;
    AnsiString writeStrA,writeStrB,tmpStr,xyStr;
    AnsiString tmpCs,tmpSd,tmpSdxs,tmpTdxs;

    sbarIc->SimpleText="正在写卡...";

    if(radCs->Checked)
    {
        if((chkCs->Checked==false) && (chkSd->Checked==false)
            && (chkSdxs->Checked==false) && (chkTdxs->Checked==false))
        {
            Application->MessageBox("至少应选择一种参数类型!","设置", MB_OK+MB_ICONEXCLAMATION);
            sbarIc->SimpleText="待命...";
            return;
        }

        //原参数地址20h,now 10h
        addStrCs =AnsiString::StringOfChar('F', 20);  //14
        addStrSd =AnsiString::StringOfChar('F', 60);  //44
        addStrTdxs = AnsiString::StringOfChar('F', 196);
        addStrSdxs = AnsiString::StringOfChar('F', 22);

        tmpCs= AnsiString::StringOfChar('F', 36);   //add---68+xy +14 byte+2
        tmpSd= AnsiString::StringOfChar('F', 92);
        tmpTdxs= AnsiString::StringOfChar('F', 74);
        tmpSdxs="";// AnsiString::StringOfChar('F', 84);

        writeStrA="000000520000";

        //计算校验和
        if(chkCs->Checked)
        {
            tmpStr="68"+writeCs;
            xyStr=xy_str(tmpStr);
            tmpCs=tmpStr+xyStr;
        }
        if(chkSd->Checked)
        {
            tmpStr="68"+writeSd;
            xyStr=xy_str(tmpStr);
            tmpSd=tmpStr+xyStr;
        }
        if(chkSdxs->Checked)
        {

            int iXsNum=frmSd->iSdXsnumSd;//循显示项数
            AnsiString sXsNum=IntToHex(iXsNum,2);

            if(sXsNum.Length()==1)
                sXsNum="0"+sXsNum;


            tmpStr="68"+sXsNum+writeSdxs;
            xyStr=xy_str(tmpStr);
            tmpSdxs=tmpStr+xyStr;
            if(tmpSdxs.Length()%4!=0)
                tmpSdxs=tmpSdxs+"FF";
        }
        if(chkTdxs->Checked)
        {
            tmpStr="68"+writeTdxs;
            xyStr=xy_str(tmpStr);
            tmpTdxs=tmpStr+xyStr;
        }

         writeStrB=writeStrA+addStrCs+tmpCs+
                            addStrSd+tmpSd+
                            addStrTdxs+tmpTdxs+
                            addStrSdxs+tmpSdxs;
    }
    if(radFunction->Checked)
    {
        switch (cboIcType->ItemIndex)
        {
            case 0: //复制卡
                writeStrB="000000900000";
                break;
            /*case 1:  //全显卡
                writeStrB="000000C00000"+AnsiString::StringOfChar('0', 196+208+96);
                break;*/
            case 1:  //清零
                if(!ClearIcFlag)
                {
                    Application->MessageBox("对不起,您无权使用此功能!","设置", MB_OK+MB_ICONEXCLAMATION);
                    return;
                    sbarIc->SimpleText="待命...";
                }
                writeStrB="000000B00000"+AnsiString::StringOfChar('0', 340)+"5100";
                break;
            case 2:  //计量值清零卡
                if(!ClearIcFlag)
                {
                    Application->MessageBox("对不起,您无权使用此功能!","设置", MB_OK+MB_ICONEXCLAMATION);
                    return;
                    sbarIc->SimpleText="待命...";
                }
                writeStrB="000000B00000"+AnsiString::StringOfChar('0', 340)+"5151";;
                break;
            case 3:  //需量值清零卡
                if(!ClearIcFlag)
                {
                    Application->MessageBox("对不起,您无权使用此功能!","设置", MB_OK+MB_ICONEXCLAMATION);
                    return;
                    sbarIc->SimpleText="待命...";
                }
                writeStrB="000000400000"+AnsiString::StringOfChar('0', 116)+"5100";
                break;
            case 4:  //计量误差值修正卡
                writeStrB="000000E00000"+AnsiString::StringOfChar('0', 436)+"5100";
                break;
            /*case 6:  //负荷日显示卡
                writeStrB="000000500000";
                break;*/
            case 5:  //失压失流清零卡
                writeStrB="000000300000"+AnsiString::StringOfChar('0', 84)+"5100";
                break;
            /*case 8:  //失压失流显示卡
                writeStrB="000000600000";
                break;
            case 9:  //失压失流累计值显示卡
                writeStrB="000000700000";
                break;
            case 10:  //失压失流日趋势图复制卡
                writeStrB="000000800000";
                break;*/
        }

    }
     if(radCom1->Checked)
        portcomm=1;
     else
        portcomm=2;
    //写卡
    writeCard(portcomm,2,writeStrB.c_str());

    sbarIc->SimpleText="待命...";
    //ShowMessage(writeStrB);

}
//---------------------------------------------------------------------------
void __fastcall TfrmCs::BitBtn2Click(TObject *Sender)
{
    Close();    
}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::spbSdxsClick(TObject *Sender)
{
    frmSd->Caption="上电显示设置";
    frmSd->lstXs->Clear();
    frmSd->ShowModal();

    writeSdxs=frmSd->writeStr;

    if(writeSdxs.Length()==0)
        chkSdxs->Checked=false;
}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::spbTdxsClick(TObject *Sender)
{
    frmSd->Caption="停电显示设置";
    frmSd->lstXs->Clear();
    frmSd->ShowModal();

    writeTdxs=frmSd->writeStr;

    if(writeTdxs.Length()==0)
        chkTdxs->Checked=false;

}
//---------------------------------------------------------------------------



void __fastcall TfrmCs::spbCsClick(TObject *Sender)
{
    frmSetCs->ShowModal();
    writeCs=frmSetCs->writeStr;

    if(writeCs.Length()==0)
        chkCs->Checked=false;

}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::spbSdClick(TObject *Sender)
{
    frmSetsd->ShowModal();
    writeSd=frmSetsd->writeStr;

    if(writeSd.Length()==0)
        chkSd->Checked=false;

}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::chkSdxsClick(TObject *Sender)
{
    if(chkSdxs->Checked)
        spbSdxsClick(this);
}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::chkTdxsClick(TObject *Sender)
{
    if(chkTdxs->Checked)
        spbTdxsClick(this);

}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::chkCsClick(TObject *Sender)
{
    if(chkCs->Checked)
        spbCsClick(this);

}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::chkSdClick(TObject *Sender)
{
    if(chkSd->Checked)
        spbSdClick(this);

}
//---------------------------------------------------------------------------

AnsiString __fastcall TfrmCs::xy_str(AnsiString wStr)
{
    unsigned char hexbuff[200],binbuff[200],xybuff[4];
    char hexXybuff[10];
    int binSum;

    strcpy(hexbuff,wStr.c_str());
    binSum=hex2bin(hexbuff,binbuff);

    xybuff[0]=0;
    for(int i=0;i<binSum;i++)
        xybuff[0]+=binbuff[i];

    bin2hex(xybuff,1,hexXybuff);

    return AnsiString(hexXybuff);

}


void __fastcall TfrmCs::FormCreate(TObject *Sender)
{
        char dllfile[100] ;
        char dat_file[100] ;
        unsigned long ret ;
        AnsiString currPath;

        currPath=GetCurrentDir();


        //GetTempPath( 100, tmppath ) ;

}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::SpeedButton1Click(TObject *Sender)
{
    AnsiString oldPassword,writeStr;
    if(frmPassword->ShowModal()==mrOk)
    {
        if(frmPassword->FirstPassword)
        {
            ClearIcFlag=true;
            return;
        }
        ReadReg();
        if(frmPassword->ChangePass)    //修改密码
        {
            writeStr=frmPassword->edtChange->Text.Trim();
            oldPassword=frmPassword->edtPassword->Text.Trim();
            if(writeStr.IsEmpty())
            {
                Application->MessageBox("对不起,您输入的新密码不能为空,请重新输入!","设置", MB_OK+MB_ICONEXCLAMATION);
                return;
            }
            if(writeStr!=oldPassword)
            {
                Application->MessageBox("对不起,您输入的密码不对,请重新输入!","设置", MB_OK+MB_ICONEXCLAMATION);
                return;
            }

            WriteReg(writeStr);
        }
        else                            //输入密码
        {
            writeStr=frmPassword->edtPassword->Text.Trim();
            if(regPassword!=writeStr)
            {
                Application->MessageBox("对不起,您输入的密码不对,请重新输入!","设置", MB_OK+MB_ICONEXCLAMATION);
                return;
            }
        }

    }
    ClearIcFlag=true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmCs::WriteReg(AnsiString writeStr)
{
    TRegistry *Registry = new TRegistry;

    Registry->RootKey = HKEY_CURRENT_USER;

    Registry->OpenKey("HNDICREG",true);

    Registry->WriteString("PASSWORDIC",writeStr);

    delete Registry;
}
void __fastcall TfrmCs::ReadReg()
{
    TRegistry *Registry = new TRegistry;

    Registry->RootKey = HKEY_CURRENT_USER;

    Registry->OpenKey("HNDICREG",true);

    regPassword= Registry->ReadString("PASSWORDIC");

    delete Registry;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -