?? umain.cpp
字號:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uMain.h"
#include "uClass.h"
#include "uAbout.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
TQQWry *g_wry;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
g_wry = NULL;
FStopFlag = true;
imgLogo->Picture->Assign(Application->Icon);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormShow(TObject *Sender)
{
String strAppPath = ExtractFilePath(Application->ExeName);
if(strAppPath.LastDelimiter("\\") != strAppPath.Length())
strAppPath += "\\";
FWryDatFileName = strAppPath + "QQWry.Dat";
if(!FileExists(FWryDatFileName))
btnNext->Enabled = false;
else
{
g_wry = new TQQWry(FWryDatFileName);
edtRecCount->Text = g_wry->GetIPRecordCount();
edtUpdateDate->Text = g_wry->GetUpdateDate();
btnNext->Enabled = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
if(g_wry)
delete g_wry;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnOpenClick(TObject *Sender)
{
dlgOpen->InitialDir = ExtractFilePath(Application->ExeName);
if(dlgOpen->Execute())
{
if(g_wry)
{
delete g_wry;
g_wry = NULL;
}
try
{
FWryDatFileName = dlgOpen->FileName;
g_wry = new TQQWry(FWryDatFileName);
edtRecCount->Text = g_wry->GetIPRecordCount();
edtUpdateDate->Text = g_wry->GetUpdateDate();
btnNext->Enabled = true;
}
catch(...)
{
MessageBox(Handle, "打開QQWry.Dat文件出錯!\r\n"
"可能是文件格式不正確,請使用正確的數據庫文件.",
Application->Title.c_str(),
MB_OK | MB_ICONWARNING);
btnNext->Enabled = false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnCloseClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnNextClick(TObject *Sender)
{
if(!FileExists(FWryDatFileName))
return;
switch(pgcMain->ActivePageIndex)
{
case 0:
{
String strMdbPath = ExtractFilePath(FWryDatFileName);
if(strMdbPath.LastDelimiter("\\") != strMdbPath.Length())
strMdbPath += "\\";
edtMdbFileName->Text = strMdbPath + "ip.mdb";
pgcMain->ActivePageIndex = 1;
btnNext->Caption = "轉換(&P)";
break;
}
case 1:
{
pgcMain->ActivePageIndex = 2;
if(btnNext->Caption == "轉換(&P)")
{
btnNext->Caption = "停止(&S)";
FStopFlag = false;
FMdbFileName = edtMdbFileName->Text;
TResourceStream *rs;
bool bTwoFields = chkTwoFields->Checked;
rs = new TResourceStream((int)HInstance,
bTwoFields? "IPMDB2": "IPMDB1", RT_RCDATA);
try
{
rs->SaveToFile(FMdbFileName);
}
catch(...)
{
MessageBox(Handle, ("寫入.mdb數據庫時失敗,請查看\r\n"
+ FMdbFileName
+ "\r\n是否正在使用中,或者手動刪除這個文件再試試。").c_str(),
Application->Title.c_str(), MB_OK | MB_ICONERROR);
return;
}
con->ConnectionString = String("Provider=Microsoft.Jet.OLEDB.4.0;")
+ "Data Source=" + FMdbFileName + ";Persist Security Info=False";
tbl->TableName = "address";
tbl->Active = true;
String strStartIP, strEndIP, strCountry, strCity;
DWORD dwStartTick = GetTickCount();
DWORD dwRecCount = g_wry->GetIPRecordCount();
if(bTwoFields) // 兩個字段的庫
{
for(DWORD i=1; i<dwRecCount; i++)
{
if(FStopFlag)
break;
lblProcess->Caption = "處理進度: " + String(i)
+ String("/") + String(dwRecCount);
Application->ProcessMessages();
String strMsg = g_wry->GetIPMsg(i);
strStartIP = strMsg.SubString(1, strMsg.Pos("\r\n") - 1);
strMsg = strMsg.SubString(strMsg.Pos("\r\n") + 2, strMsg.Length());
strEndIP = strMsg.SubString(1, strMsg.Pos("\r\n") - 1);
strMsg = strMsg.SubString(strMsg.Pos("\r\n") + 2, strMsg.Length());
if(edtFilter->Text != "" && !strMsg.Pos(edtFilter->Text))
continue;
strCountry = strMsg.SubString(1, strMsg.Pos("\r\n") - 1);
if(strMsg.Pos("\r\n"))
strMsg = strMsg.SubString(strMsg.Pos("\r\n") + 2, strMsg.Length());
strCity = StringReplace(
strMsg, "CZ88.NET", "", TReplaceFlags() << rfReplaceAll);
tbl->Insert();
tbl->FieldByName("ip1")->AsFloat = g_wry->GetIPValue(strStartIP);
tbl->FieldByName("ip2")->AsFloat = g_wry->GetIPValue(strEndIP);
tbl->FieldByName("country")->AsString = strCountry;
tbl->FieldByName("city")->AsString = strCity;
tbl->Post();
lblStartIP->Caption = strStartIP;
lblEndIP->Caption = strEndIP;
lblCountry->Caption = strCountry;
pgbConvert->Position = i * 100 / dwRecCount;
Application->ProcessMessages();
}
}
else
{
for(DWORD i=1; i<dwRecCount; i++)
{
if(FStopFlag)
break;
lblProcess->Caption = "處理進度: " + String(i)
+ String("/") + String(dwRecCount);
Application->ProcessMessages();
String strMsg = g_wry->GetIPMsg(i);
strStartIP = strMsg.SubString(1, strMsg.Pos("\r\n") - 1);
strMsg = strMsg.SubString(strMsg.Pos("\r\n") + 2, strMsg.Length());
strEndIP = strMsg.SubString(1, strMsg.Pos("\r\n") - 1);
strMsg = strMsg.SubString(strMsg.Pos("\r\n") + 2, strMsg.Length());
if(edtFilter->Text != "" && !strMsg.Pos(edtFilter->Text))
continue;
strCountry = StringReplace(
strMsg, "\r\n", "", TReplaceFlags() << rfReplaceAll);
strCountry = StringReplace(
strCountry, "CZ88.NET", "", TReplaceFlags() << rfReplaceAll);
tbl->Insert();
tbl->FieldByName("ip1")->AsFloat = g_wry->GetIPValue(strStartIP);
tbl->FieldByName("ip2")->AsFloat = g_wry->GetIPValue(strEndIP);
tbl->FieldByName("country")->AsString = strCountry;
tbl->Post();
lblStartIP->Caption = strStartIP;
lblEndIP->Caption = strEndIP;
lblCountry->Caption = strCountry;
pgbConvert->Position = i * 100 / dwRecCount;
Application->ProcessMessages();
}
}
DWORD dwTickCount = GetTickCount() - dwStartTick;
tbl->Active = false;
con->Connected = false;
WIN32_FIND_DATA FindData;
FindClose(FindFirstFile(FMdbFileName.c_str(), &FindData));
lblResult->Caption = FStopFlag?
"用戶中止操作!": "恭喜! 數據庫轉換成功!";
lblFileSize->Caption = String("文件大小: ")
+ String(FindData.nFileSizeLow / 1024) + " KB";
lblTickCount->Caption = String("操作用時: ")
+ String(dwTickCount / 1000) + " 秒";
lblFileName->Caption = String("文件保存到: ") + FMdbFileName;
btnNext->Caption = "壓縮(&P)";
pgcMain->ActivePageIndex = 3;
FStopFlag = true;
}
break;
}
case 2:
{
btnNext->Caption = "轉換(&P)";
FStopFlag = true;
break;
}
case 3:
{
WIN32_FIND_DATA FindData;
FindClose(FindFirstFile(FMdbFileName.c_str(), &FindData));
String strFileOrigSize = String(FindData.nFileSizeLow / 1024);
String strResult = CompactMDB(FMdbFileName, "", "")? "成功!": "失敗!";
FindClose(FindFirstFile(FMdbFileName.c_str(), &FindData));
lblFileSize->Caption = String("文件大小: ")
+ String(FindData.nFileSizeLow / 1024) + " KB";
MessageBox(Handle, (String("數據庫壓縮") + strResult
+ "\r\n文件原始大小: " + strFileOrigSize + " KB\r\n"
+ "壓縮后大小: "
+ String(FindData.nFileSizeLow / 1024) + " KB").c_str(),
Application->Title.c_str(), MB_OK | MB_ICONINFORMATION);
btnNext->Visible = false;
break;
}
default:
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnAboutClick(TObject *Sender)
{
frmAbout = new TfrmAbout(this);
frmAbout->ShowModal();
delete frmAbout;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnSelectFileClick(TObject *Sender)
{
if(dlgSave->Execute())
edtMdbFileName->Text = dlgSave->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if(!FStopFlag)
{
if(MessageBox(Handle, "當前正在進行轉換操作, 確定要退出程序嗎?",
Application->Title.c_str(),
MB_YESNO | MB_ICONQUESTION) != ID_YES)
CanClose = false;
else
{
FStopFlag = true;
Application->ProcessMessages();
}
}
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -