setsd.cpp

来自「这是一个电力多功能电表的参数设置工具软件」· C++ 代码 · 共 366 行

CPP
366
字号
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "setSd.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmSetsd *frmSetsd;
//---------------------------------------------------------------------------
__fastcall TfrmSetsd::TfrmSetsd(TComponent* Owner)
    : TForm(Owner)
{
    iSqnum=0;
    Sq2_flag=1;

}
//---------------------------------------------------------------------------
void __fastcall TfrmSetsd::btnOkClick(TObject *Sender)
{
    AnsiString tmpStra,tmpStrb,tmpStrc,writeSq1,writeSq2,writeSd;
    AnsiString sSqdate1,sSqdate2;

    iSqnum1=0;
    iSqnum2=0;

    if(lstSd->Items->Count<2) return;
    for(int i=0;i<lstSd->Items->Count;i++)
    {
        tmpStra=lstSd->Items->Strings[i];
        if(tmpStra.SubString(6,4)=="时区" && i==0)
            sSqdate1=tmpStra.SubString(26,2)+tmpStra.SubString(22,2);
        else
        {
            if(tmpStra.SubString(6,4)=="时区" && i>0)
            {
                sSqdate2=tmpStra.SubString(26,2)+tmpStra.SubString(22,2);
                iSqnum1=i-1;
                Sq2_flag=0;
            }
            else
            {
                tmpStrb=tmpStra.SubString(14,2); //fl
                tmpStrc=tmpStra.SubString(25,2)+tmpStra.SubString(22,2); //hhmm
                tmpStra=tmpStrc+fl_str(tmpStrb);
                writeSd+=convsd(tmpStra);
                //ShowMessage(writeStr);
            }
            if(Sq2_flag)
            {
                iSqnum1=i;
                sSqdate2="FFFF";
            }
        }
    }
    if(Sq2_flag)
        iSqnum2=lstSd->Items->Count-iSqnum1-1;
    else
        iSqnum2=lstSd->Items->Count-iSqnum1-2;

    /*-----edit----------------------------------*/
    //AnsiString sqLen1,sqLen2;
    //sqLen1=IntToStr(iSqnum1);
    //sqLen2=IntToStr(iSqnum2);

    //sqLen1=sqLen1.Length()<2 ? "0"+sqLen1 : sqLen1;
    //sqLen2=sqLen2.Length()<2 ? "0"+sqLen2 : sqLen2;

    tmpStrc=writeSd.SubString(1,4*iSqnum1);
    tmpStra=tmpStrc.Length()<40 ? tmpStrc+AnsiString::StringOfChar('F',40-tmpStrc.Length()) : tmpStrc;

    tmpStrc=writeSd.SubString(4*iSqnum1+1,4*iSqnum2);
    tmpStrb=tmpStrc.Length()<40 ? tmpStrc+AnsiString::StringOfChar('F',40-tmpStrc.Length()) : tmpStrc;

    writeSq1=sSqdate1+tmpStra;
    writeSq2=sSqdate2+tmpStrb;

    writeStr=writeSq1+writeSq2;

    //ShowMessage(writeStr);
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmSetsd::convsd(AnsiString sdstr)
{
    AnsiString destr,sdS,tmpStr,flStr,binSds,binTmpStr;
    int iSdS;
    /*sdstr= 分+时+费率
    转换生成的字符串:分+时(十位:需计算)+时(个位)
    */
    tmpStr=sdstr.SubString(3,1);
    flStr=sdstr.SubString(5,2);

    switch (tmpStr.ToInt())
    {
      case 0:binTmpStr="00";break;
      case 1:binTmpStr="01";break;
      default:binTmpStr="10" ;
    }

    binSds=flStr+binTmpStr;

    char *endptr;
    tmpStr=strtol(binSds.c_str(),&endptr,2);
    iSdS=tmpStr.ToInt();
    sdS=IntToHex(iSdS,1);

    destr=sdstr.SubString(1,2)+sdS+sdstr.SubString(4,1);

    return destr;
}


AnsiString __fastcall TfrmSetsd::fl_str(AnsiString fl)
{
    AnsiString destr;
    if(fl=="尖")
        destr="11";
    if(fl=="峰")
        destr="10";
    if(fl=="平")
        destr="01";
    if(fl=="谷")
        destr="00";
    return destr;
}
AnsiString __fastcall TfrmSetsd::str_fl(AnsiString fl)
{
    AnsiString destr;
    if(fl=="11")
        destr="尖";
    if(fl=="10")
        destr="峰";
    if(fl=="01")
        destr="平";
    if(fl=="00")
        destr="谷";
    return destr;
}


void __fastcall TfrmSetsd::SpeedButton1Click(TObject *Sender)
{
    AnsiString sAddstr;
    if(cboSqmonth->Text.IsEmpty() || cboSqday->Text.IsEmpty())
    {
        Application->MessageBox("时区---起始日期不能为空!","时段设置", MB_OK+MB_ICONEXCLAMATION);
        return;
    }
    if(iSqnum>1)
    {
        Application->MessageBox("时区---最多可以设置2个时区!","时段设置", MB_OK+MB_ICONEXCLAMATION);
        return;
    }
    if(iSqnum==1 && lstSd->Items->Count==1)
    {
        Application->MessageBox("时区---请先在时区1中设置时段!","时段设置", MB_OK+MB_ICONEXCLAMATION);
        return;
    }
    if(iSqnum==0)
    {
        sq_month1=cboSqmonth->Text.ToInt();
        sq_day1=cboSqday->Text.ToInt();
    }
    if(iSqnum==1)
    {
        sq_month2=cboSqmonth->Text.ToInt();
        sq_day2=cboSqday->Text.ToInt();

        if(sq_month1>sq_month2)
        {
            Application->MessageBox("时区---第2时区起始日期不能小于第1时区起始日期!","时段设置", MB_OK+MB_ICONEXCLAMATION);
            return;
        }
        else
        {
            if(sq_month1==sq_month2 && sq_day1>=sq_day2)
            {
                Application->MessageBox("时区---第2时区起始日期不能小于第1时区起始日期!","时段设置", MB_OK+MB_ICONEXCLAMATION);
                return;
            }
        }
    }


    iSqnum+=1;

    sAddstr="第 "+IntToStr(iSqnum)+" 时区---起始日期:"+cboSqmonth->Text+"月"+cboSqday->Text+"日";
    lstSd->Items->Add(sAddstr);
    lstSd->MultiSelect=true;
    lstSd->Selected[lstSd->Items->Count-1]=true;
    lstSd->MultiSelect=false;

    if(iSqnum==2)
    {
        iSqnum1=lstSd->Items->Count-2;
        Sq2_flag=0;
    }

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

void __fastcall TfrmSetsd::SpeedButton2Click(TObject *Sender)
{
    AnsiString sSdnum,sFl,sTime,sAddstr;

    if(lstSd->Items->Count==0)
    {
        Application->MessageBox("时段---请先设置时区!","时段设置", MB_OK+MB_ICONEXCLAMATION);
        return;
    }
    if(cboFl->Text.IsEmpty())
    {
        Application->MessageBox("时段---费率不能为空!","时段设置", MB_OK+MB_ICONEXCLAMATION);
        return;
    }

    if(Sq2_flag)
    {
        if(lstSd->Items->Count>10)
        {
            Application->MessageBox("对不起!每一时区内时段数不能大于10个!","时段设置", MB_OK+MB_ICONEXCLAMATION);
            return;
        }
    }
    else
    {
        if(iSqnum==2)
        {
            if(lstSd->Items->Count>10+iSqnum1+1)
            {
                Application->MessageBox("对不起!每一时区内时段数不能大于10个!","时段设置", MB_OK+MB_ICONEXCLAMATION);
                return;
            }
        }
    }


    sFl=cboFl->Text.Trim();
    sTime=Trim(FormatDateTime("HH:MM",dtpikSd->Time));

    AnsiString sOldLstStr,sNewLstStr;
    int iOldLstStr,iNewLstStr;

    sOldLstStr=lstSd->Items->Strings[lstSd->Items->Count-1];
    sNewLstStr=sTime.SubString(1,2)+sTime.SubString(4,2);
    iNewLstStr=StrToInt(sNewLstStr);
    if(sOldLstStr.SubString(1,1)=="-")
    {
        sOldLstStr=sOldLstStr.SubString(22,2)+sOldLstStr.SubString(25,2);
        iOldLstStr=StrToInt(sOldLstStr);
        if(iNewLstStr-iOldLstStr<1)
        {
            Application->MessageBox("对不起!后一时段起始时间应大于前一时段起始时间!","时段设置", MB_OK+MB_ICONEXCLAMATION);
            return;
        }
    }

    //sSdnum=IntToStr(lstSd->Items->Count);

    sAddstr="------费率:  "+sFl+"------"+sTime;
    lstSd->Items->Add(sAddstr);

    lstSd->MultiSelect=true;
    lstSd->Selected[lstSd->Items->Count-1]=true;
    lstSd->MultiSelect=false;

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

void __fastcall TfrmSetsd::SpeedButton4Click(TObject *Sender)
{
    lstSd->Clear();
    iSqnum=0;
    iSqnum1=0;
}
//---------------------------------------------------------------------------

void __fastcall TfrmSetsd::SpeedButton3Click(TObject *Sender)
{
    int lstSdIndex,lstSdCount;
    AnsiString lstStr;

    lstSdCount=lstSd->Items->Count;
    if(lstSdCount==0) return;
    lstSdIndex=lstSd->ItemIndex;

    if(lstSdIndex<lstSdCount)
    {
        lstStr=lstSd->Items->Strings[lstSdIndex];
        lstSd->Items->Delete(lstSdIndex);
        lstSd->MultiSelect=true;
        lstSd->Selected[lstSdIndex-1]=true;
        lstSd->MultiSelect=false;
    }

    if(Sq2_flag==1)
        iSqnum1-=1;
    if(lstStr.SubString(1,4)=="第 2")
    {
        Sq2_flag=1;
        iSqnum-=1;
    }
    if(lstSdCount==1) iSqnum=0;



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

void __fastcall TfrmSetsd::spbSaveClick(TObject *Sender)
{
    AnsiString sFilename,sDir;

    dagSave->Title="保存时段设置";
    dagSave->FileName="dgnsd.dat";
    dagSave->Filter="数据文件(*.dat)|*.dat";
    dagSave->InitialDir=GetCurrentDir();

    if(dagSave->Execute())
    {
        /*if (FileExists(dagSave->FileName))
        {
            if(MessageBox(NULL,"该文件已经存在,是否覆盖?","保存时段设置", MB_YESNO+MB_ICONEXCLAMATION)==IDNO)
                return;
        }*/
        sFilename=dagSave->FileName;
        lstSd->Items->SaveToFile(sFilename);
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmSetsd::spbLoadClick(TObject *Sender)
{
    AnsiString sFilename,sDir;

    dagOpen->Title="打开时段设置";
    dagOpen->FileName="dgnsd.dat";
    dagOpen->Filter="数据文件(*.dat)|*.dat";
    dagOpen->InitialDir=GetCurrentDir();

    if(dagOpen->Execute())
    {
        sFilename=dagOpen->FileName;
        if (!FileExists(sFilename))
        {
            MessageBox(NULL,"该文件不存在!","打开时段设置", MB_OK+MB_ICONEXCLAMATION);
            return;
        }

        lstSd->Items->LoadFromFile(sFilename);
    }

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



void __fastcall TfrmSetsd::btnCancelClick(TObject *Sender)
{
        Close();        
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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