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

📄 sd.cpp

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

#include <vcl.h>
#pragma hdrstop

#include "sd.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmSd *frmSd;
//---------------------------------------------------------------------------
__fastcall TfrmSd::TfrmSd(TComponent* Owner)
    : TForm(Owner)
{
    iSdXsnumSd=0;
    iSdXsnumTd=0;
}
//---------------------------------------------------------------------------

void __fastcall TfrmSd::A1Click(TObject *Sender)
{
    int iPgeInx;

    iPgeInx=pgeSd->ActivePageIndex;
    seleItem(iPgeInx);
}
//---------------------------------------------------------------------------
void __fastcall TfrmSd::seleItem(int iPgeInx)
{
    int chkCount;

    switch (iPgeInx)
    {
      case 0:
        chkCount=chkLstYgdl->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstYgdl->Checked[i]=true;
        break;
      case 1:
        chkCount=chkLstWgdl->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstWgdl->Checked[i]=true;
        break;
      case 2:
        chkCount=chkLstXl->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstXl->Checked[i]=true;
        break;
      case 3:
        chkCount=chkLstXlsj->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstXlsj->Checked[i]=true;
        break;
      case 4:
        chkCount=chkLstSs->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstSs->Checked[i]=true;
        break;
      case 5:
        chkCount=chkLstDy->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstDy->Checked[i]=true;
        break;
      case 6:
        chkCount=chkLstSysl->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstSysl->Checked[i]=true;
        break;
      case 7:
        chkCount=chkLstQt->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstQt->Checked[i]=true;
        break;
      case 8:
        chkCount=chkLstCs->Items->Count;
        for(i=0;i<chkCount;i++)
            chkLstCs->Checked[i]=true;
        break;

    }
}
void __fastcall TfrmSd::N2Click(TObject *Sender)
{
    int chkCount;

    chkCount=chkLstYgdl->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstYgdl->Checked[i]=true;

    chkCount=chkLstWgdl->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstWgdl->Checked[i]=true;

    chkCount=chkLstXl->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstXl->Checked[i]=true;

    chkCount=chkLstXlsj->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstXlsj->Checked[i]=true;

    chkCount=chkLstSs->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstSs->Checked[i]=true;

    chkCount=chkLstDy->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstDy->Checked[i]=true;

    chkCount=chkLstSysl->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstSysl->Checked[i]=true;

    chkCount=chkLstQt->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstQt->Checked[i]=true;

    chkCount=chkLstCs->Items->Count;
    for(i=0;i<chkCount;i++)
        chkLstCs->Checked[i]=true;

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

void __fastcall TfrmSd::btnCancelClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmSd::chkLstYgdlClickCheck(TObject *Sender)
{
    chkIndex(chkLstYgdl,lstXs,"1-");
}
//---------------------------------------------------------------------------

void __fastcall TfrmSd::chkLstWgdlClickCheck(TObject *Sender)
{
   chkIndex(chkLstWgdl,lstXs,"2-");
}
//---------------------------------------------------------------------------

void __fastcall TfrmSd::chkIndex(TCheckListBox *chk,TListBox *lst,AnsiString pgeName)
{
    int lstXsCount,chkIndex,j;
    AnsiString chkStr,lstStr;

    chkIndex=chk->ItemIndex;

    chkStr=chk->Items->Strings[chkIndex];


    if(chk->Checked[chkIndex])
    {
        lstXsCount=lst->Items->Count;
        if(frmSd->Caption=="上电显示设置")
        {
            /*if(lstXsCount>39)
            {
                Application->MessageBox("电表上电最多显示40项数据!","显示卡设置", MB_OK+MB_ICONEXCLAMATION);
                chk->Checked[chkIndex]=false;
                return;
            }*/
        }
        else
        {
            if(lstXsCount>34)
            {
                Application->MessageBox("电表停电最多显示35项数据!","显示卡设置", MB_OK+MB_ICONEXCLAMATION);
                chk->Checked[chkIndex]=false;
                return;
            }
        }

        lst->Items->Add(pgeName+chkStr);
        lstXsCount=lst->Items->Count;

        lstXs->MultiSelect=true;
        lstXs->Selected[lstXsCount-1]=true;
        lstXs->MultiSelect=false;
    }
    else
    {
        for(j=0;j<lst->Items->Count;j++)
        {
            lstStr=lst->Items->Strings[j];
            if(chkStr==lstStr.Delete(1,2))
                break;
        }
        lst->Items->Delete(j);

        if(j>0)
        {
            lstXs->MultiSelect=true;
            lstXs->Selected[0]=true;
            lstXs->MultiSelect=false;
        }
    }
}

void __fastcall TfrmSd::chkLstXlClickCheck(TObject *Sender)
{
   chkIndex(chkLstXl,lstXs,"3-");
}
//---------------------------------------------------------------------------

void __fastcall TfrmSd::chkLstXlsjClickCheck(TObject *Sender)
{
   chkIndex(chkLstXlsj,lstXs,"4-");
}
//---------------------------------------------------------------------------

void __fastcall TfrmSd::chkLstSsClickCheck(TObject *Sender)
{
   chkIndex(chkLstSs,lstXs,"5-");
}
//---------------------------------------------------------------------------

void __fastcall TfrmSd::chkLstDyClickCheck(TObject *Sender)
{
   chkIndex(chkLstDy,lstXs,"6-");
}
//---------------------------------------------------------------------------


void __fastcall TfrmSd::SpeedButton1Click(TObject *Sender)
{
    int lstXsIndex,lstXsCount;

    lstXsCount=lstXs->Items->Count;
    lstXsIndex=lstXs->ItemIndex;
    if(lstXsIndex+1<lstXsCount)
    {
        lstXs->Items->Move(lstXsIndex,lstXsIndex+1);
        lstXs->MultiSelect=true;
        lstXs->Selected[lstXsIndex+1]=true;
        lstXs->MultiSelect=false;
    }
}
//---------------------------------------------------------------------------


void __fastcall TfrmSd::SpeedButton2Click(TObject *Sender)
{
    int lstXsIndex;

    lstXsIndex=lstXs->ItemIndex;
    if(lstXsIndex>0)
    {
        lstXs->Items->Move(lstXsIndex,lstXsIndex-1);
        lstXs->MultiSelect=true;
        lstXs->Selected[lstXsIndex-1]=true;
        lstXs->MultiSelect=false;
    }

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

void __fastcall TfrmSd::SpeedButton3Click(TObject *Sender)
{
    if(lstXs->Items->Count>0)
        lstXs->Clear();
    chkClear(chkLstYgdl);
    chkClear(chkLstWgdl);
    chkClear(chkLstXl);
    chkClear(chkLstXlsj);
    chkClear(chkLstDy);
    chkClear(chkLstSs);
    chkClear(chkLstSysl);
    chkClear(chkLstQt);
    chkClear(chkLstCs);

}
//---------------------------------------------------------------------------
void __fastcall TfrmSd::chkClear(TCheckListBox *chk)
{
    for(int i=0;i<chk->Items->Count;i++)
    {
        if(chk->Checked[i])
            chk->Checked[i]=false;
    }
}
void __fastcall TfrmSd::btnOkClick(TObject *Sender)
{
    int i,lstXsCount,pgeName,xsNumber,dataLen;
    AnsiString lstStr,convStr,writeStrA,writeStrB,xyStr;

    lstXsCount=lstXs->Items->Count;
    if(lstXsCount==0)
    {
        Application->MessageBox("请先选择显示数据项!","显示卡设置", MB_OK+MB_ICONEXCLAMATION);
        return;
    }

    if(frmSd->Caption=="上电显示设置")
    {
        writeStrA="";
        for(i=0;i<lstXsCount;i++)
        {
            lstStr=lstXs->Items->Strings[i].SubString(3,5);
            convStr=conv_sd_str(lstStr);
            writeStrA+=convStr;
        }

        //dataLen=writeStrA.Length();
        writeStrB=writeStrA;//+AnsiString::StringOfChar('F', 80-dataLen);
        iSdXsnumSd=lstXs->Items->Count;
    }
    else
    {
        writeStrA="";
        for(i=0;i<lstXsCount;i++)
        {
            lstStr=lstXs->Items->Strings[i].SubString(1,4);
            convStr=conv_str(lstStr);
            writeStrA+=convStr;
        }

        dataLen=writeStrA.Length();
        writeStrB=writeStrA+AnsiString::StringOfChar('F', 70-dataLen);
        iSdXsnumTd=lstXs->Items->Count;
    }

    writeStr=writeStrB;

    //iSdXsnum=lstXs->Items->Count;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmSd::conv_sd_str(AnsiString lstStr)
{
    unsigned int pgeName,xsNumber,pgeConv,writeNum;
    AnsiString pgeStr,numStr,tmpStr,convStr;

//    numStr=lstStr.SubString(3,2);

    //pgeName=StrToInt(pgeStr);
//    xsNumber=StrToInt(numStr)-1;

    /*switch (pgeName)
    {
      case 1: pgeConv=0;break;
      case 2: pgeConv=32;break;
      case 3: pgeConv=64;break;
      case 4: pgeConv=96;break;
      case 5: pgeConv=128;break;
      case 6: pgeConv=160;break;
    }*/

    //writeNum=pgeConv+xsNumber;
    //writeNum=StrToInt(lstStr);
    tmpStr="0"+lstStr;
    convStr=tmpStr.SubString(5,2)+tmpStr.SubString(3,2)+tmpStr.SubString(1,2);

    return convStr;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmSd::conv_str(AnsiString lstStr)
{
    unsigned int pgeName,xsNumber,pgeConv,writeNum;
    AnsiString pgeStr,numStr,convStr;

    //pgeStr=lstStr.SubString(1,1);
    numStr=lstStr.SubString(3,2);

    //pgeName=StrToInt(pgeStr);
    xsNumber=StrToInt(numStr);//-1;

    /*switch (pgeName)
    {
      case 1: pgeConv=0;break;
      case 2: pgeConv=32;break;
      case 3: pgeConv=64;break;
      case 4: pgeConv=96;break;
      case 5: pgeConv=128;break;
      case 6: pgeConv=160;break;
    }*/

    //writeNum=pgeConv+xsNumber;
    writeNum=xsNumber;
    convStr=convStr.IntToHex(writeNum,2);

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

    return convStr;
}

//---------------------------------------------------------------------------

void __fastcall TfrmSd::FormActivate(TObject *Sender)
{
    chkLstYgdl->Clear();
    chkLstWgdl->Clear();
    chkLstXl->Clear();
    chkLstXlsj->Clear();
    chkLstSs->Clear();
    chkLstDy->Clear();
    chkLstSysl->Clear();
    chkLstQt->Clear();
    chkLstCs->Clear(); 
    pgeSd->ActivePage=TabSheet1;

    AnsiString sAppPath=GetCurrentDir();

    if(frmSd->Caption=="上电显示设置")
    {
        pgeSd->Pages[0]->Caption="1.本月有功";
        pgeSd->Pages[1]->Caption="2.本月无功";
        pgeSd->Pages[2]->Caption="3.需量";
        pgeSd->Pages[3]->Caption="4.需量出现时间";
        pgeSd->Pages[4]->Caption="5.实时数据";
        pgeSd->Pages[5]->Caption="6.电压越限记录";
        pgeSd->Pages[6]->Caption="7.失压失流记录";
        pgeSd->Pages[7]->Caption="8.其它数据";
        pgeSd->Pages[8]->Caption="9.电表参数";

        chkLstYgdl->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Ygdl.dat");
        chkLstWgdl->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Wgdl.dat");
        chkLstXl->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Xl.dat");
        chkLstXlsj->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Xlsj.dat");
        chkLstSs->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Ss.dat");
        chkLstDy->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Dy.dat");
        chkLstSysl->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Sysl.dat");
        chkLstQt->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Qt.dat");
        chkLstCs->Items->LoadFromFile(sAppPath+"\\szdat\\sd_Cs.dat");

    }
    else
    {
        pgeSd->Pages[0]->Caption="停电循显项";
        pgeSd->Pages[1]->Caption="";
        pgeSd->Pages[2]->Caption="";
        pgeSd->Pages[3]->Caption="";
        pgeSd->Pages[4]->Caption="";
        pgeSd->Pages[5]->Caption="";
        pgeSd->Pages[6]->Caption="";
        pgeSd->Pages[7]->Caption="";
        pgeSd->Pages[8]->Caption="";

        chkLstYgdl->Items->LoadFromFile(sAppPath+"\\szdat\\td.dat");
    }
}
//---------------------------------------------------------------------------



void __fastcall TfrmSd::chkLstSyslClickCheck(TObject *Sender)
{
   chkIndex(chkLstSysl,lstXs,"7-");

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

void __fastcall TfrmSd::chkLstQtClickCheck(TObject *Sender)
{
   chkIndex(chkLstQt,lstXs,"8-");

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

void __fastcall TfrmSd::chkLstCsClickCheck(TObject *Sender)
{
   chkIndex(chkLstCs,lstXs,"9-");

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

⌨️ 快捷键说明

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