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 + -
显示快捷键?