📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Clipbrd.hpp>
#include <Printers.hpp>
#pragma hdrstop
#include "Unit1.h"
#include "unit3.h"
#include "comm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TF1 *F1;
Graphics::TBitmap *pic;
bool cfgflag=false;
bool StopDisplay=false;
bool portopen=false;
long RXcount=0,TXcount=0;
int oldcmd;
unsigned char RxChar;
unsigned char *TxBuf;
Node PORT[PortMax],BAUD[BaudMax],BYTEs[ByteMax];
Tools Tool[ToolMax];
Command CMD[CmdMax];
Node Identify[3];
TFont *font;
COMM *Comm;
BYTE Parity,StopBit;
//---------------------------------------------------------------------------
__fastcall TF1::TF1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TF1::FormResize(TObject *Sender)
{
E2->Width=F1->Width-154;
}
//---------------------------------------------------------------------------
void __fastcall TF1::FormCreate(TObject *Sender)
{
int j,i;
Comm=new COMM(Handle);
if(Comm==NULL) {ShowMessage(" 分配内存错误! ");return;}
IL1->GetBitmap(3,topimg->Picture->Bitmap);
M1->Visible=false;
try
{
M1->Lines->LoadFromFile("Project1.ini");
for(i=0;i<M1->Lines->Count;i++)
{
M1->Lines->Strings[i]=M1->Lines->Strings[i].Trim();
M1->Lines->Strings[i]=M1->Lines->Strings[i].UpperCase();
if(M1->Lines->Strings[i].Length()<3) {M1->Lines->Delete(i--);continue;}
if(!((M1->Lines->Strings[i].Pos("["))||(M1->Lines->Strings[i].Pos("=")))) {M1->Lines->Delete(i--);continue;}
if(M1->Lines->Strings[i].Pos("=")==1) {M1->Lines->Delete(i--);continue;}
if(M1->Lines->Strings[i].Pos("=")==M1->Lines->Strings[i].Length()) {M1->Lines->Delete(i--);continue;}
if(M1->Lines->Strings[i].Pos("[")>1) {M1->Lines->Delete(i--);continue;}
if((M1->Lines->Strings[i].Pos("]")!=M1->Lines->Strings[i].Length())&&(M1->Lines->Strings[i].Pos("[")==1)) {M1->Lines->Delete(i--);continue;}
}
LoadPort();
LoadIdentify();
LoadWindow();
LoadTool();
LoadCMD();
M1->WordWrap=true;
}
catch(...)
{
char temp[MAX_PATH];AnsiString Path;
GetModuleFileName(NULL,temp,MAX_PATH);
Path=AnsiString(temp);
Path=Path.Delete(Path.Length()-2,3);
ShowMessage(Path+"INI文件打开错误!");
}
M1->Lines->Clear();
M1->Visible=true;
oldcmd=CB4->ItemIndex;
CB4Change(Sender);
portopen=PortIni();
font=new TFont();
if(font==NULL) {ShowMessage(" 分配内存错误! ");return;}
font=RE1->Font;
Comm->SetTimeOut(INFINITE,5000);
pic= new Graphics::TBitmap;
}
//---------------------------------------------------------------------------
void __fastcall TF1::E1KeyPress(TObject *Sender, char &Key)
{
static bool HexFlag=false;
if(Key=='\r') {B2Click(B2);return;}
if((Key>='0')&&(Key<='9')) return;
if((Key==8)) return;
if((Key>='A')&&(Key<='F')&&(HexFlag)) return;
if((Key>='a')&&(Key<='f')&&(HexFlag)) return;
if(Key==' ')
{
if(E1->Text.Length()==0) {HexFlag=false;return;}
if((*(E1->Text.AnsiLastChar())!='-')&&(*(E1->Text.AnsiLastChar())!='x')){HexFlag=false;return;}
}
if(Key=='-')
{
if(E1->Text.Length()==0) return;
if(*(E1->Text.AnsiLastChar())==' ') return;
}
if(((Key=='X')||(Key=='x'))&&(E1->Text.Length()!=0))
{ Key='x';
if(*(E1->Text.AnsiLastChar())=='0') if(E1->Text.Length()==1) {HexFlag=true;return;}
if(*(E1->Text.AnsiLastChar())=='0') if(E1->Text.SubString(E1->Text.Length()-1,1)==' '){HexFlag=true; return;}
}
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TF1::E1MouseMove(TObject *Sender, TShiftState Shift, int X,
int Y)
{
E1->Hint=E1->Text;
}
//---------------------------------------------------------------------------
void __fastcall TF1::E2KeyPress(TObject *Sender, char &Key)
{
if(RG1->ItemIndex==1) return;
if((Key>='0')&&(Key<='9')) return;
if((Key==8)||(Key==' ')) return;
if((Key>='A')&&(Key<='F')) return;
if((Key>='a')&&(Key<='f')) {Key=Key-0x20;return;}
if(Key==13) BB3Click(Sender);
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TF1::E3KeyPress(TObject *Sender, char &Key)
{
if((Key>='0')&&(Key<='9')) return;
if((Key==8)||(Key==' ')) return;
Key=0;
}
//---------------------------------------------------------------------------
bool TF1::PortIni()
{
if(Comm->Open(PORT[F1->CB1->ItemIndex+1].Value.c_str(),
BAUD[F1->CB2->ItemIndex+1].Value.ToInt(),
BYTEs[F1->CB3->ItemIndex+1].Value.ToInt(),
Parity,StopBit)==(DWORD)-1)
{
AnsiString temp=" 打开 "+PORT[F1->CB1->ItemIndex+1].Value+" 端口错误! ";
ShowMessage(temp);
return false;
}
if(PORT[F1->CB1->ItemIndex+1].Value.SubString(1,3)=="COM")
{
F1->CB2->Enabled=true;
F1->CB3->Enabled=true;
}
else
{
F1->CB2->Enabled=false;
F1->CB3->Enabled=false;
}
if(TxBuf!=NULL) delete [] TxBuf;
TxBuf=NULL;
if(Comm->Read((char*)&RxChar,1,FALSE)==(DWORD)-1) Comm->ShowLastError();
return true;
}
//---------------------------------------------------------------------------
void __fastcall TF1::CB1Change(TObject *Sender)
{
portopen=PortIni();
}
//---------------------------------------------------------------------------
void __fastcall TF1::FormClose(TObject *Sender, TCloseAction &Action)
{
Comm->Close();
delete Comm;
if(!cfgflag)
{
M1->Visible=false;
M1->Clear();
SaveWindow();
SavePort();
SaveTool();
SaveCMD();
SaveIdentify();
M1->Lines->Add("[END]");
M1->Lines->SaveToFile("Project1.ini");
}
delete pic;
}
//---------------------------------------------------------------------------
void __fastcall TF1::N2Click(TObject *Sender)
{
N2->Checked=true;
N3->Checked=false;
}
//---------------------------------------------------------------------------
void __fastcall TF1::N3Click(TObject *Sender)
{
N3->Checked=true;
N2->Checked=false;
}
//---------------------------------------------------------------------------
void TF1::CharToHex(char ch,char *buf)
{
char temp1,temp2;
temp2=(ch&0x0f)+0x30;
temp1=((ch>>4)&0x0f)+0x30;
if(temp1>0x39) temp1+=7;
if(temp2>0x39) temp2+=7;
buf[0]=temp1;
buf[1]=temp2;
buf[2]=' ';
}
//---------------------------------------------------------------------------
void __fastcall TF1::BB3Click(TObject *Sender)
{
int count;
if(TxBuf!=NULL) return;
if(!portopen) {ShowMessage(" 端口未打开 ! "); return;}
L9->Caption="";
if(RG1->ItemIndex)
{
count=E2->Text.Length();
TxBuf=new char[count+1];
if(TxBuf==NULL) {ShowMessage(" 分配内存错误! ");return;}
StrPCopy(TxBuf,E2->Text);
}
else
{
AnsiString temp="",temp1="";
temp1=E2->Text.TrimLeft()+" ";
temp1=temp1.UpperCase();
while(temp1.Length()!=0)
{
temp+=temp1.SubString(1,(temp1.Pos(" ")-1)&0xfffffffe);
temp1=temp1.Delete(1,temp1.Pos(" ")-1);
temp1=temp1.TrimLeft();
}
for(int i=0;i<temp.Length();i++)
{
if((temp.SubString(i+1,1)<"0")||(temp.SubString(i+1,1)>"F")||((temp.SubString(i+1,1)>"9")&&((temp.SubString(i+1,1)<"A"))))
{
if(Sender==T2) {L9->Caption="敬告:有非十六进制字符!!";ChB1->Checked=false;return;}
ShowMessage(" 有非十六进制字符! ");
return;
}
}
count=temp.Length();
TxBuf=new char[count+1];
if(TxBuf==NULL) {ShowMessage(" 分配内存错误! ");return;}
StrPCopy(TxBuf,temp);
count=count/2;
unsigned short sum = 0;
for(int i=0;i<count;i++)
{
TxBuf[i]=HexToChar(&TxBuf[i*2]);
sum += TxBuf[i] ;
}
TxBuf[count]=0;
if((count)&&(CBSUM->Checked))
{
TxBuf[count++] = sum;
TxBuf[count++] = sum >> 8;
}
}
if(Comm->Write(TxBuf,count,FALSE)==(DWORD)-1)
{
ShowMessage(" 发送错误 ! ");
if(Sender==T2) {ChB1->Checked=false; ChB1Click(Sender);}
delete [] TxBuf;
TxBuf=NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TF1::N1Click(TObject *Sender)
{
M1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TF1::N7Click(TObject *Sender)
{
M1->SelectAll();
}
//---------------------------------------------------------------------------
void __fastcall TF1::M1KeyPress(TObject *Sender, char &Key)
{
if(Key==8) return;
Key=0;
}
//---------------------------------------------------------------------------
void __fastcall TF1::N4Click(TObject *Sender)
{
if(!StopDisplay)
{
StopDisplay=true;
N4->Caption="开始显示(&D)";
}
else
{
StopDisplay=false;
N4->Caption="停止显示(&D)";
}
}
//---------------------------------------------------------------------------
void __fastcall TF1::PM1Popup(TObject *Sender)
{
if(M1->SelLength) N6->Enabled=true; else N6->Enabled=false;
if(M1->Text.Length()){N1->Enabled=true;N7->Enabled=true;}else{N1->Enabled=false;N7->Enabled=false;}
}
//---------------------------------------------------------------------------
void __fastcall TF1::N6Click(TObject *Sender)
{
M1->CopyToClipboard();
}
//---------------------------------------------------------------------------
char TF1::HexToChar(char *buf)
{
char temp1,temp2;
if((buf[0]>='0')&&(buf[0]<='9')) temp1=buf[0]-0x30;else temp1=buf[0]-0x37;
if((buf[1]>='0')&&(buf[1]<='9')) temp2=buf[1]-0x30;else temp2=buf[1]-0x37;
return (temp1<<4)|(temp2);
}
//---------------------------------------------------------------------------
void __fastcall TF1::E3Change(TObject *Sender)
{ AnsiString temp; int k;
temp=E3->Text;
ParaFilter(&temp,&k,&k);
temp=temp.Trim();
T2->Interval=temp.ToInt();
}
//---------------------------------------------------------------------------
void __fastcall TF1::ChB1Click(TObject *Sender)
{
if(ChB1->Checked) T2->Enabled=true; else T2->Enabled=false;
}
//---------------------------------------------------------------------------
void TF1::LoadPort()
{
int i=0,j=1;
PORT[0].Description="0";PORT[0].Value="0";
while((M1->Lines->Strings[i++]!="[PORT]")&&(i<M1->Lines->Count));
while((i<M1->Lines->Count-1)&&(M1->Lines->Strings[i].SubString(1,1)!="[")&&(j<PortMax))
{
PORT[j].Description=M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
PORT[j].Value=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
if(PORT[j].Description=="DEFAULT") PORT[0].Description=PORT[j].Value; else j++;
PORT[0].Value=IntToStr(j);
}
i=0;j=1;
BAUD[0].Description="0";BAUD[0].Value="0";
while((M1->Lines->Strings[i++]!="[BAUD]")&&(i<M1->Lines->Count));
while((i<(M1->Lines->Count-1))&&(M1->Lines->Strings[i].SubString(1,1)!="[")&&(j<BaudMax))
{
BAUD[j].Description=M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
BAUD[j].Value=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
if(BAUD[j].Description=="DEFAULT") BAUD[0].Description=BAUD[j].Value; else j++;
BAUD[0].Value=IntToStr(j);
}
i=0;j=1;
BYTEs[0].Description="0";BYTEs[0].Value="0";
while((M1->Lines->Strings[i++]!="[BYTE]")&&(i<M1->Lines->Count));
while((i<M1->Lines->Count-1)&&(M1->Lines->Strings[i].SubString(1,1)!="[")&&(j<ByteMax))
{
BYTEs[j].Description=M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
BYTEs[j].Value=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
if(BYTEs[j].Description=="DEFAULT") BYTEs[0].Description=BYTEs[j].Value; else j++;
BYTEs[0].Value=IntToStr(j);
}
i=0; Parity = 0;
while((M1->Lines->Strings[i++]!="[PARITY]")&&(i<M1->Lines->Count));
while((i<M1->Lines->Count-1)&&(M1->Lines->Strings[i].SubString(1,1)!="["))
{
AnsiString tmp;
tmp = M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
if(tmp == "PARITY")
{
tmp=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
Parity = StrToInt(tmp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -