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

📄 main.cpp

📁 BCB 串口通信
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
#include "allhead.h"
#pragma hdrstop

#include "main.h"
#include "sysfunc.h"
#include "verinfo.h"
#include "globalvar.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SPComm"
#pragma resource "*.dfm"
Tfrmmain *frmmain;
//---------------------------------------------------------------------------
__fastcall Tfrmmain::Tfrmmain(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall Tfrmmain::WMSYSCommand(TWMSysCommand &Message)
{
    if (Message.CmdType != idAbout)
        TForm::DefaultHandler(&Message);
    else
        verinfoForm->ShowModal();
}
//---------------------------------------------------------------------------

// 普通hint的显示(放在状态条的第一个panel中).
void __fastcall Tfrmmain::showHint(TObject* Owner)
{
    //if (IsPortOpen)
    {
        mainStBar->Panels->Items[1]->Text = strPortStatus;
        mainStBar->Panels->Items[2]->Text = strRxTx;
    }

    mainStBar->Panels->Items[0]->Text = " " + Application->Hint;
}
//---------------------------------------------------------------------------

void Tfrmmain::enumComPorts(TStrings *Ports)
{
    HKEY hKey;
    int ErrCode, Index;
    AnsiString ValueName, Data;
    DWORD ValueLen, DataLen, ValueType;
    TStringList *TmpPorts;

    ErrCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM",
        0, KEY_READ, &hKey);
	
    if(ErrCode != ERROR_SUCCESS)
    {
        Application->MessageBoxA("Can't open the Key", SHintTitle, MB_OK);
        exit(0);  // raise EComPort.Create(CError_RegError, ErrCode);
    }
	
    TmpPorts = new TStringList;
    try
    {
        Index = 0;
        do
        {
            ValueLen = 256;
            DataLen = 256;
            ValueName.SetLength(ValueLen);
            Data.SetLength(DataLen);
            ErrCode = RegEnumValue(hKey, Index,
                ValueName.c_str(), &ValueLen,
                NULL,  &ValueType,
                Data.c_str(),  &DataLen);
            if (ErrCode == ERROR_SUCCESS) 
            {
                Data.SetLength(DataLen);
                TmpPorts->Add(Data);
                Index ++;
            }
            else  if (ErrCode != ERROR_NO_MORE_ITEMS)
            {
                Application->MessageBoxA("Can't read the Key", SHintTitle, MB_OK);
                exit(0); //raise EComPort.Create(CError_RegError, ErrCode);
            }
	
        }
        while (ErrCode !=ERROR_SUCCESS) ;

        TmpPorts->Sort();
        Ports->Assign(TmpPorts);

        RegCloseKey(hKey);
        delete TmpPorts;

    }
    catch(...)
    {
        RegCloseKey(hKey);
        delete TmpPorts;
    };	

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


void __fastcall Tfrmmain::FormCreate(TObject *Sender)
{
    Application->HintColor = (TColor)RGB(240,240,200);
    Application->HintPause = 500;
    Application->OnHint = showHint;
    HMENU myMenu =  GetSystemMenu(Handle, False);
    AppendMenu(myMenu, MF_SEPARATOR, 0, "");
    AppendMenu(myMenu, MF_STRING, idAbout, "关于");

    loadBmp(sbtnclose->Glyph, SResExit);
    loadBmp(sbtnhelp->Glyph, SResAbout);
    loadBmp(sbtnPort->Glyph, SResLedOn);
    loadBmp(sbtnShowD->Glyph, SResCurve);
    loadBmp(sbtnSetP->Glyph, SResM2O);
    loadBmp(sbtnStick->Glyph, SResStick1);

    // 串口设置

    enumComPorts(CmbPort->Items);

    FRXNum =0;
    FTXNum =0;
    CmbPort->ItemIndex = 0;
    Comm1->CommName = CmbPort->Text;
    CmbBRate->ItemIndex = 6;
    Comm1->BaudRate = StrToInt(CmbBRate->Text);
    CmbPBit->ItemIndex = 0;
    Comm1->Parity = None;
    CmbDBit->ItemIndex = 3;
    Comm1->ByteSize = TByteSize(8);
    CmbSBit->ItemIndex = 0;
    Comm1->StopBits = TStopBits(1);

    // 其它参数设置
    IsOnTop = false;
    IsPortOpen = false;

    NBYTE = 4;
    nbt =0;
    MaxPoints = 1000;
    ScrollPoints = 5;
    nsp =0;
    ncr =0;

    tmpVal =new char[NBYTE];
}
//---------------------------------------------------------------------------


void __fastcall Tfrmmain::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    Word wd_mr;

    CanClose = true;
    if (IsPortOpen)
    {
        wd_mr = Application->MessageBox(TEXT(SIsPortOpen),
                         TEXT(SHintTitle), MB_ICONQUESTION + MB_YESNO);
        switch (wd_mr)
        {
            case ID_YES:
                break;
            default:
                CanClose = false;
        }
    }

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

void __fastcall Tfrmmain::FormClose(TObject *Sender, TCloseAction &Action)
{
    // 关闭串口
    if (IsPortOpen)
    {
        Comm1->StopComm();
        IsPortOpen = false;
    }

    delete tmpVal;
}
//---------------------------------------------------------------------------


// 退出主窗口及应用程序
void __fastcall Tfrmmain::mf_exitClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------

void __fastcall Tfrmmain::CmbPortChange(TObject *Sender)
{
    Comm1->CommName = CmbPort->Text;            
}
//---------------------------------------------------------------------------

void __fastcall Tfrmmain::CmbBRateKeyPress(TObject *Sender, char &Key)
{
    // 0~9
    if (!(((Key >47) && (Key<58)) || (Key=='\8')))
        Key = '\0';
}
//---------------------------------------------------------------------------

void __fastcall Tfrmmain::CmbBRateChange(TObject *Sender)
{
    int BaudRate;

    if  (CmbBRate->Text =="Custom")
    {
        CmbBRate->Style = csDropDown;
        CmbBRate->SetFocus();
    }
    else
    {
        if  (CmbBRate->ItemIndex >0 )
            CmbBRate->Style = csDropDownList;

        if (TryStrToInt(CmbBRate->Text, BaudRate))
            Comm1->BaudRate = BaudRate;
    }
}
//---------------------------------------------------------------------------

void __fastcall Tfrmmain::CmbPBitChange(TObject *Sender)
{
    //TParity = ( None, Odd, Even, Mark, Space );
    Comm1->Parity = TParity(CmbPBit->ItemIndex);
}
//---------------------------------------------------------------------------

void __fastcall Tfrmmain::CmbDBitChange(TObject *Sender)
{
   //TByteSize = ( _5, _6, _7, _8 );
   Comm1->ByteSize =  TByteSize(CmbDBit->ItemIndex);
}
//---------------------------------------------------------------------------

void __fastcall Tfrmmain::CmbSBitChange(TObject *Sender)
{
    //TStopBits = ( _1, _1_5, _2 );
    Comm1->StopBits = TStopBits(CmbSBit->ItemIndex);
}
//---------------------------------------------------------------------------


//字符串转换成16进制字符串
AnsiString Tfrmmain::StrToHexStr(const AnsiString &sin)
{
    int i;
    AnsiString sr;
    char* p=sin.c_str();

    //sprintf(sr.c_str(), "%x ", p);
	
    for(i =0; i<sin.Length(); i++)
        sr =sr + IntToHex(p[i],2) +' ';
    return sr;
}
//---------------------------------------------------------------------------

//16进制字符串转换成字符串
AnsiString Tfrmmain::HexStrToStr(const AnsiString &sin)
{
    /*int i;
    AnsiString st, sr;
    unsigned int d;
    char* p=sin.c_str();
    stringstream ss;

    ss  <<hex <<sin.c_str();

    i =0;
    sr  ="";
    sin.LowerCase();
    while (i<sin.Length())
    {
        while ((i<sin.Length()) &&

⌨️ 快捷键说明

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