📄 mainunit.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainUnit.h"
#include "FSelectDirectoryFile.h"
#include "MoveMobileNumber.h"
#include "SelectMobileType.h"
#include "OutMobileToFile.h"
#include "About.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner),m_isLoadData(0)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
DragAcceptFiles(this->Handle, true);
unsigned short year;
unsigned short month;
unsigned short day;
Now().DecodeDate( &year, &month, &day );
if ( !(year == 2008 && month >= 6 && month <= 12 ) )
{
ShowMessage( "您使用的版本时间过期,不能再继续使用。" );
Application->Terminate();
return;
}
m_hRepostEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
m_pThreadProc = new CThreadObject( this, (LPTHREAD_START_ROUTINE)ThreadLoadDataProc, "" );
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
SetEvent( m_hRepostEvent );
delete m_pThreadProc;
CloseHandle( m_hRepostEvent );
CloseDB();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::MyDropFileFunction(TWMDropFiles &Msg)
{
int NumOfFiles = DragQueryFile((HDROP)Msg.Drop, 0xFFFFFFFF, NULL, 0 );
Screen->Cursor = crHourGlass ;
TStringList* sList = new TStringList ;
for(int i = 0; i < NumOfFiles; ++i )
{
//从Msg消息中得到文件路径
String NameFile;
NameFile.SetLength(MAX_PATH);
int Length = DragQueryFile((HDROP)Msg.Drop, i, NameFile.c_str(),NameFile.Length() ) ;
NameFile.SetLength(Length);
//从路径中取得文件护展名;
String NameExt = ExtractFileExt( NameFile.LowerCase() ) ;
if ( NameExt == ".txt" )
{
sList->LoadFromFile( NameFile );
for( int i = 0; i < sList->Count; ++i )
{
lstOldMobile->Items->Add(sList->Strings[i]) ;
}
}
}
Screen->Cursor = crDefault ;
delete sList ;
ShowOldCount() ;
DragFinish((HDROP)Msg.Drop);
}
VOID WINAPI TfrmMain::ThreadLoadDataProc( LPVOID lParam )
{
CoInitialize( NULL );
TfrmMain * pThis = (TfrmMain*)lParam;
if ( !pThis->OpenDB() )
{
return;
}
TADODataSet * m_data = pThis->ADODataSet1;
AreaPack m_pack;
while ( !m_data->Eof )
{
memset( &m_pack, 0x0, sizeof(m_pack) );
m_pack.MFID = m_data->FieldByName("MFIX")->AsString;
m_pack.AreaParentName = m_data->FieldByName("AreaParentname")->AsString; // 省
m_pack.AreaName = m_data->FieldByName("AreaName")->AsString; // 市
m_pack.CardType = m_data->FieldByName("CardType")->AsString; // 运营商类型
pThis->m_Areamap[m_pack.MFID] = m_pack;
m_data->Next();
if ( ::WaitForSingleObject( pThis->m_hRepostEvent, 0 ) == WAIT_OBJECT_0 )
{
break;
}
}
pThis->m_isLoadData = 3;
pThis->CloseDB();
CoUninitialize();
}
bool __fastcall TfrmMain::OpenDB()
{
m_isLoadData = 0;
try
{
ADOConnection1->Connected = false;
ADOConnection1->Connected = true;
}catch( Exception & e )
{
AnsiString sDir = ExtractFileDir( Application->ExeName ) + "\\log\\" + Now().DateString() + ".log";
WriteFileList( sDir, "连接数据库出错:" + e.Message );
m_isLoadData = 1;
return false;
}
try
{
ADODataSet1->Open();
}catch( Exception & e )
{
AnsiString sDir = ExtractFileDir( Application->ExeName ) + "\\log\\" + Now().DateString() + ".log";
WriteFileList( sDir, "打开数据库出错:" + e.Message );
m_isLoadData = 1;
return false;
}
m_isLoadData = 2;
return true;
}
void __fastcall TfrmMain::CloseDB()
{
try
{
ADODataSet1->Close();
ADOConnection1->Connected = false;
}catch( Exception & e )
{
AnsiString sDir = ExtractFileDir( Application->ExeName ) + "\\log\\" + Now().DateString() + ".log";
WriteFileList( sDir, "关闭数据库出错:" + e.Message );
}
}
int __fastcall TfrmMain::CheckMobile( AnsiString sMobile )
{
int nResult = -1;
if ( sMobile.Length() == 11 )
{
int nNum = atoi( sMobile.SubString( 1, 3 ).c_str() );
if ( (nNum >= 130 && nNum <= 133) || (nNum >= 150 && nNum <= 153) )
{
nResult = 1;
}else if ( (nNum >= 134 && nNum <= 139) || (nNum >= 154 && nNum <= 159) )
{
nResult = 2;
}
for ( int i = 3; i < 12 && nResult != -1; ++i ) // 检测号码正确性
{
if ( sMobile[i] < '0' || sMobile[i] > '9' )
{
nResult = -1;
break;
}
}
}
return nResult;
}
void __fastcall TfrmMain::ShowOldCount()
{
AnsiString str ;
str.sprintf("原始号码列表中共有 %d 个号码", lstOldMobile->Count ) ;
Edit1->Text = str ;
}
void __fastcall TfrmMain::ShowNewCount()
{
AnsiString str ;
str.sprintf("目标号码列表中共有 %d 个号码", lstNewMobile->Count ) ;
Edit2->Text = str ;
}
void __fastcall TfrmMain::MoveMobileNumber( TListBox * lstOld, TListBox * lstNew )
{
char pszBuf[12];
memset( pszBuf, 0x0, sizeof(pszBuf) );
TfrmMoveMobileNumber* frm = new TfrmMoveMobileNumber(this, pszBuf) ;
if( frm->ShowModal() == mrOk )
{
AnsiString sMobile ;
bool flag ;
Screen->Cursor = crHourGlass ;
for( int i = 0; i < lstOld->Count; ++i )
{
flag = false ;
sMobile = lstOld->Items->Strings[i] ;
for( int j = 1; j < 12; ++j )
{
if ( pszBuf[j] >= '0' && pszBuf[j] <= '9' )
{
char cp = *(sMobile.SubString(j+1,1).c_str()) ;
if( pszBuf[j] == cp )
{
flag = true ;
}else
{
flag = false ;
break ;
}
}
}
if( flag )
{
lstOld->Items->Delete(i--) ;
lstNew->Items->Add(sMobile) ;
}
}
ShowOldCount() ;
ShowNewCount() ;
Screen->Cursor = crDefault ;
}
delete frm ;
}
void __fastcall TfrmMain::MoveMobileType( TListBox * lstOld, TListBox * lstNew )
{
int m_nMobileType;
TfrmMoveMobileType * frm = new TfrmMoveMobileType( this, m_nMobileType );
if ( frm->ShowModal() == mrOk )
{
int nNum;
AnsiString sMobile;
Screen->Cursor = crHourGlass ;
for ( int i = 0; i < lstOld->Items->Count; i++)
{
sMobile = lstOld->Items->Strings[i];
nNum = CheckMobile( sMobile );
// 移动 || 联通
if ( (m_nMobileType == 0 && nNum == 2) || (m_nMobileType == 1 && nNum == 1) )
{
lstOld->Items->Delete(i--);
lstNew->Items->Add(sMobile);
}
}
Screen->Cursor = crDefault ;
}
}
void __fastcall TfrmMain::MoveAllMobile( TListBox * lstOld, TListBox * lstNew )
{
Screen->Cursor = crHourGlass ;
lstNew->Items->AddStrings( lstOld->Items );
//lstNew->Items->Text = lstOld->Items->Text ;
lstOld->Clear() ;
Screen->Cursor = crDefault ;
ShowOldCount() ;
ShowNewCount() ;
}
void __fastcall TfrmMain::bitFileCleanUpClick(TObject *Sender)
{ //文件整理,对多个文件夹下面相同文件名的内容整理到目标文件夹下
TfrmSelectDirectory * frm = new TfrmSelectDirectory( this );
frm->ShowModal();
delete frm;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::bitLoadFileClick(TObject *Sender)
{
TStringList* sList = new TStringList ;
if( OpenDialog1->Execute() )
{
Screen->Cursor = crHourGlass ;
for( int i = 0; i < OpenDialog1->Files->Count; ++i )
{
sList->LoadFromFile(OpenDialog1->Files->Strings[i]) ;
for( int i = 0; i < sList->Count; ++i )
{
lstOldMobile->Items->Add(sList->Strings[i]) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -