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

📄 main.cpp

📁 通过串口发送接受文件
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <inifiles.hpp>
#include <stdio.h>
#pragma hdrstop
#include <string.h>
#include <shellapi.h>
#include "Main.h"
#include "Setup.h"
#include "Download.h"
#include "Upload.h"
#include "Dialer.h"
#include "AnswerCall.h"
#include "About.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
COM_CONFIG UploadComConfig,DownloadComConfig;
TComport *Com;                                  
extern bool CommandUpload;
extern bool CommandDownload;
char DownloadPath[128];
char UploadFileNames[30][128];
char UploadShortFileNames[30][128];
int  UploadFileCount;
extern char MachineName[128];

//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
        : TForm(Owner)
{
  UploadComConfig.Comport = 1;
  UploadComConfig.Baudrate = 38400;
  UploadComConfig.UseIrDA = True;
  UploadComConfig.UseModem = False;
  UploadComConfig.ModemConnectMode = 1;
  UploadComConfig.ModemAnswerMode = 0;
  DownloadComConfig.Comport = 1;
  DownloadComConfig.Baudrate = 38400;
  DownloadComConfig.UseIrDA = True;
  DownloadComConfig.UseModem = False;
  DownloadComConfig.ModemConnectMode = 1;
  DownloadComConfig.ModemAnswerMode = 0;
  Com = new TComport;
}
//---------------------------------------------------------------------------
void TfrmMain::AddFiles(void)
{
  int i;
  if( ListBox1->Items->Count>=14 )
    {
    Application->MessageBox("一次最多只能上载14个文件!\n\n","",MB_OK);
    return;
    };
  if( OpenDialog1->Execute()==False )return;
  for( i=0;i<OpenDialog1->Files->Count;i++ )
    {
    if( ListBox1->Items->Count<14 )
      {
      ListBox1->Items->Add( OpenDialog1->Files->Strings[i] );
      };
    };
}

void DisplayFiles(void)
{
}

void __fastcall TfrmMain::DirectoryListBox1Change(TObject *Sender)
{
  DisplayFiles();        
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::DirectoryListBox1DblClick(TObject *Sender)
{
  DisplayFiles();
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::DirectoryListBox1Click(TObject *Sender)
{
  DisplayFiles();
}
//---------------------------------------------------------------------------


void TfrmMain::StartDownload(void)
{
redo:
  Com->Port = DownloadComConfig.Comport;
  Com->BaudRate = DownloadComConfig.Baudrate;
  Com->UseIrDA = DownloadComConfig.UseIrDA;
  Com->IrDAType = DownloadComConfig.IrDAType;
  if( Com->Open()==false )
    {
    Application->MessageBox("打开串口错误!","错误",MB_ICONERROR|MB_OK);
    goto end;
    //return;
    };
  if( CheckBox3->Checked )
    {
    frmMain->WindowState = wsMinimized;
    frmMain->Update();
    };
  if( DownloadComConfig.UseModem==True )
    {
    if( DownloadComConfig.ModemConnectMode==0 )
      {
      frmDialer->Com = Com;
      frmDialer->ShowModal();
      if( frmDialer->ErrorNo!=0 )
        {
        Sleep(200);
        Com->Close();
        goto end;
        //return;
        };
      };
    if( DownloadComConfig.ModemConnectMode==1 )
      {
      frmAnswer->Com = Com;
      frmAnswer->CheckBox1->Checked = (DownloadComConfig.ModemAnswerMode==0);
      frmAnswer->ShowModal();
      if( frmAnswer->ErrorNo!=0 )
        {
        Sleep(200);
        Com->Close();
        goto end;
        //return;
        };
      };
    };
  strcpy(DownloadPath,Label2->Caption.c_str());
  frmDownload->ShowModal();
  Sleep(200);
  Com->Close();
  DirectoryListBox1->Update();
  FileListBox1->Update();
end:
  frmMain->WindowState = wsNormal;
  frmMain->Update();
  if( CheckBox3->Checked )
    {
    goto redo;
    };
}


void TfrmMain::StartUpload(void)
{
  int i;
redo:
  strcpy( MachineName,frmSetup->Edit1->Text.c_str() );
  Com->Port = UploadComConfig.Comport;
  Com->BaudRate = UploadComConfig.Baudrate;
  Com->UseIrDA = UploadComConfig.UseIrDA;
  Com->IrDAType = UploadComConfig.IrDAType;
  if( Com->Open()==False )
    {
    Application->MessageBox("打开串口错误!","错误",MB_ICONERROR|MB_OK);
    goto end;
    //return;
    };
  if( CheckBoxAlwaysSend->Checked )
    {
    frmMain->WindowState = wsMinimized;
    frmMain->Update();
    };
  if( UploadComConfig.UseModem==True )
    {
    if( UploadComConfig.ModemConnectMode==0 )
      {
      frmDialer->Com = Com;
      frmDialer->ShowModal();
      if( frmDialer->ErrorNo!=0 )
        {
        Sleep(200);
        Com->Close();
        goto end;
        //return;
        };
      };
    if( UploadComConfig.ModemConnectMode==1 )
      {
      frmAnswer->Com = Com;
      frmAnswer->CheckBox1->Checked = (UploadComConfig.ModemAnswerMode==0);
      frmAnswer->ShowModal();
      if( frmAnswer->ErrorNo!=0 )
        {
        Sleep(200);
        Com->Close();
        goto end;
        };
      };
    };
  for( i=0;i<ListBox1->Items->Count;i++ )
    {
    strcpy( UploadFileNames[i],ListBox1->Items->Strings[i].c_str() );
    };
  UploadFileCount = i;
  frmUpload->ShowModal();
  Sleep(200);
  Com->Close();
end:
  frmMain->WindowState = wsNormal;
  frmMain->Update();
  if( CheckBoxAlwaysSend->Checked )
    {
    goto redo;
    };
}

void __fastcall TfrmMain::Image1Click(TObject *Sender)
{
  frmAbout->ShowModal();        
}
//---------------------------------------------------------------------------

void SaveSettings(void)
{
  TIniFile *Ini;
  String FilePath;
  char FileName[256];
  String UploadFileName;
  char buf[32];
  int  i;
  FilePath=ExtractFilePath(Application->ExeName);
  strcpy( FileName,FilePath.c_str() );
  if( FileName[strlen(FileName)-1]!='\\' )strcat( FileName,"\\" );
  strcat( FileName,"SFT.ini" );
  Ini=new TIniFile(FileName);
  try
    {
    Ini->WriteInteger("Upload Setting","Comport",UploadComConfig.Comport);
    Ini->WriteInteger("Upload Setting","Baudrate",UploadComConfig.Baudrate);
    Ini->WriteBool("Upload Setting","UseIrDA",UploadComConfig.UseIrDA);
    Ini->WriteBool("Upload Setting","IrDAType",UploadComConfig.IrDAType);
    Ini->WriteBool("Upload Setting","UseModem",UploadComConfig.UseModem);
    Ini->WriteInteger("Upload Setting","ModemConnectMode",UploadComConfig.ModemConnectMode);
    Ini->WriteInteger("Upload Setting","ModemAnswerMode",UploadComConfig.ModemAnswerMode);
    Ini->WriteString("Upload Setting","MachineName",frmSetup->Edit1->Text);

    Ini->WriteInteger("Download Setting","Comport",DownloadComConfig.Comport);
    Ini->WriteInteger("Download Setting","Baudrate",DownloadComConfig.Baudrate);
    Ini->WriteBool("Download Setting","UseIrDA",DownloadComConfig.UseIrDA);
    Ini->WriteBool("Download Setting","IrDAType",DownloadComConfig.IrDAType);
    Ini->WriteBool("Download Setting","UseModem",DownloadComConfig.UseModem);
    Ini->WriteInteger("Download Setting","ModemConnectMode",DownloadComConfig.ModemConnectMode);
    Ini->WriteInteger("Download Setting","ModemAnswerMode",DownloadComConfig.ModemAnswerMode);
    Ini->WriteString("Download Setting","DownloadTo",frmMain->Label2->Caption);
    Ini->WriteString("PhoneNumber","Tel",frmDialer->EditPhoneNumber->Text);
    Ini->WriteBool("Download Setting","AddMachineIDAndTimeToFileName",frmMain->CheckBox1->Checked );
    for( i=0;i<14;i++ )
      {
      sprintf(buf,"FILE%d",i+1);
      UploadFileName="";
      if( i<frmMain->ListBox1->Items->Count )UploadFileName=frmMain->ListBox1->Items->Strings[i];
      Ini->WriteString("Upload Files",buf,UploadFileName);
      };
    }
  catch(...)
    {
    };
  delete Ini;
}

void LoadSettings(void)
{
  TIniFile *Ini;
  String FilePath;
  char FileName[256];
  String UploadFileName;
  char buf[256];
  int  i;
  FilePath=ExtractFilePath(Application->ExeName);
  strcpy( FileName,FilePath.c_str() );
  if( FileName[strlen(FileName)-1]!='\\' )strcat( FileName,"\\" );
  strcat( FileName,"SFT.ini" );
  Ini=new TIniFile(FileName);
  try
    {
    UploadComConfig.Comport=Ini->ReadInteger("Upload Setting","Comport",1);
    UploadComConfig.UseIrDA=Ini->ReadBool("Upload Setting","UseIrDA",False);
    UploadComConfig.IrDAType=Ini->ReadInteger("Upload Setting","IrDAType",0);
    UploadComConfig.Baudrate=Ini->ReadInteger("Upload Setting","Baudrate",19200);
    UploadComConfig.UseModem=Ini->ReadBool("Upload Setting","UseModem",False);
    UploadComConfig.ModemConnectMode=Ini->ReadInteger("Upload Setting","ModemConnectMode",0);
    UploadComConfig.ModemAnswerMode=Ini->ReadInteger("Upload Setting","ModemAnswerMode",0);
    frmSetup->Edit1->Text=Ini->ReadString("Upload Setting","MachineName","");

    DownloadComConfig.Comport=Ini->ReadInteger("Download Setting","Comport",1);
    DownloadComConfig.Baudrate=Ini->ReadInteger("Download Setting","Baudrate",19200);
    DownloadComConfig.UseIrDA=Ini->ReadBool("Download Setting","UseIrDA",False);
    DownloadComConfig.IrDAType=Ini->ReadBool("Download Setting","IrDAType",0);
    DownloadComConfig.UseModem=Ini->ReadBool("Download Setting","UseModem",False);
    DownloadComConfig.ModemConnectMode=Ini->ReadInteger("Download Setting","ModemConnectMode",0);
    DownloadComConfig.ModemAnswerMode=Ini->ReadInteger("Download Setting","ModemAnswerMode",0);
    frmMain->CheckBox1->Checked = Ini->ReadBool("Download Setting","AddMachineIDAndTimeToFileName",False );

    FilePath=Ini->ReadString("Download Setting","DownloadTo","c:\\");
    strcpy( buf,FilePath.c_str() );
    frmMain->DriveComboBox1->Drive=buf[0];
    frmMain->DirectoryListBox1->Directory = FilePath;
    frmDialer->EditPhoneNumber->Text=Ini->ReadString("PhoneNumber","Tel","");
    frmMain->ListBox1->Clear();
    for( i=0;i<14;i++ )
      {
      sprintf(buf,"FILE%d",i+1);
      UploadFileName=Ini->ReadString("Upload Files",buf,"");
      if( strlen(UploadFileName.c_str())>0 )frmMain->ListBox1->Items->Add(UploadFileName);
      };
    }
  catch(...)
    {
    };
  delete Ini;
}

void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
  SaveSettings();        
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormShow(TObject *Sender)
{
  if(CommandUpload==True)
    {
    ShowWindow(Application->Handle,SW_HIDE);
    StartUpload();
    frmMain->WindowState = wsMinimized;
    Close();
    };
  if(CommandDownload==True)
    {
    ShowWindow(Application->Handle,SW_HIDE);
    StartDownload();
    frmMain->WindowState = wsMinimized;
    Close();
    };
}
//---------------------------------------------------------------------------







void __fastcall TfrmMain::ListBox1DblClick(TObject *Sender)
{
  char FileName[256];
  if( ListBox1->ItemIndex<0 )return;
  strcpy( FileName,ListBox1->Items->Strings[ListBox1->ItemIndex].c_str() );
  ShellExecute(Application->Handle,"Open",FileName,"","",SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FileListBox1DblClick(TObject *Sender)
{
  char FileName[256];
  if( FileListBox1->ItemIndex<0 )return;
  strcpy( FileName,FileListBox1->Items->Strings[FileListBox1->ItemIndex].c_str() );
  ShellExecute(Application->Handle,"Open",FileName,"","",SW_SHOWNORMAL);        
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::ListBox1KeyPress(TObject *Sender, char &Key)
{
  if( Key==13 )ListBox1DblClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FileListBox1KeyPress(TObject *Sender, char &Key)
{
  if( Key==13 )FileListBox1DblClick(Sender);
}
//---------------------------------------------------------------------------





void __fastcall TfrmMain::N2Click(TObject *Sender)
{
  if( FileListBox1->ItemIndex >=0 )
    {
    if( Application->MessageBox("确定删除文件吗?","警告",MB_ICONQUESTION+MB_YESNO)==mrNo )return;
    DeleteFile( FileListBox1->FileName );
    FileListBox1->Update();
    };
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::N1Click(TObject *Sender)
{
  if( FileListBox1->ItemIndex >=0 )
    {
    String file;
    String Path,Name;
    Path = ExtractFilePath(FileListBox1->FileName);
    Name = ExtractFileName(FileListBox1->FileName);
    file=InputBox("文件改名","New File Name:",Name);
    if( Path.c_str()[strlen(Path.c_str())-1]!='\\' )Path = Path + "\\";
    file = Path + file;
    RenameFile(FileListBox1->FileName,file);
    FileListBox1->Update();
    };
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
  StartUpload();
}
//---------------------------------------------------------------------------


void __fastcall TfrmMain::Button2Click(TObject *Sender)
{
  AddFiles();
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::Button3Click(TObject *Sender)
{
  ListBox1->Clear();        
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::Button4Click(TObject *Sender)
{
  memcpy(&frmSetup->ComConfig,&UploadComConfig,sizeof(COM_CONFIG));
  frmSetup->Caption="发送设置";
  frmSetup->Label3->Visible=true;
  frmSetup->Edit1->Visible=true;
  frmSetup->ShowModal();
  memcpy(&UploadComConfig,&frmSetup->ComConfig,sizeof(COM_CONFIG));
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::Button5Click(TObject *Sender)
{
  StartDownload();
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::Button6Click(TObject *Sender)
{
  memcpy(&frmSetup->ComConfig,&DownloadComConfig,sizeof(COM_CONFIG));
  frmSetup->Caption="接收设置";
  frmSetup->Label3->Visible=false;
  frmSetup->Edit1->Visible=false;
  frmSetup->ShowModal();
  memcpy(&DownloadComConfig,&frmSetup->ComConfig,sizeof(COM_CONFIG));
}
//---------------------------------------------------------------------------


⌨️ 快捷键说明

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