?? main.cpp
字號:
//---------------------------------------------------------------------------
#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 + -