📄 mainunit.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#pragma hdrstop
#include "MainUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
Version=1.0;
cs=CS_NONE;
Number=0;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::DisplayHint(AnsiString astr)
{
StatusPanel->Caption=astr;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
NMFTP->Connect();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
NMFTP->Disconnect();
}
//---------------------------------------------------------------------------
unsigned __int32 TMainForm::GetCRC(char *SourceData,unsigned __int32 DataSize)
{
__asm {
mov esi ,SourceData
mov ecx ,DataSize
xor eax ,eax
__CountCRC_Start:
cmp ecx ,0
jz __CountCRC_End
movzx edx ,byte ptr [esi]
add eax ,edx
inc esi
dec ecx
jmp __CountCRC_Start
__CountCRC_End:
}
return(_EAX);
}
//---------------------------------------------------------------------------
unsigned __int32 TMainForm::GetCRC(char *fn)
{
int fp;
unsigned __int32 fsize,crc;
char *data;
fp=open(fn,O_RDONLY|O_BINARY);
fsize=filelength(fp);
data=new char[fsize];
read(fp,data,fsize);
close(fp);
crc=GetCRC(data,fsize);
delete data;
return(crc);
}
//---------------------------------------------------------------------------
void TMainForm::OpenConfig()
{
int fp;
unsigned __int32 i;
unsigned __int8 *fs;
fp=open("book.cfg",O_RDONLY|O_BINARY);
if(fp==-1)
{
ShowMessage("打开本地文章列表失败!需要从服务器更新文章列表!");
DownloadList();
return;
}
read(fp,&Number,4);
CRC=new unsigned __int32[Number];
FileName=new char*[Number];
fs=new unsigned __int8[Number];
read(fp,CRC,4*Number);
read(fp,fs,Number);
ListBox->Items->Clear();
for(i=0;i<Number;i++)
{
FileName[i]=new char[fs[i]+1];
read(fp,FileName[i],fs[i]);
FileName[i][fs[i]]=0;
ListBox->Items->Add(FileName[i]);
}
delete fs;
close(fp);
}
//---------------------------------------------------------------------------
void TMainForm::ClearList()
{
unsigned __int32 i;
for(i=0;i<Number;i++)
delete FileName[i];
delete FileName;
delete CRC;
Number=0;
}
//---------------------------------------------------------------------------
void TMainForm::DownloadList()
{
cs=CS_UpdateList;
NMFTP->Download("book.cfg","newbook.cfg");
DisplayHint("开始下载文章列表!");
}
//---------------------------------------------------------------------------
void TMainForm::UpdateList()
{
DisplayHint("文章列表下载完成!");
remove("book.cfg");
rename("newbook.cfg","book.cfg");
ClearList();
OpenConfig();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMFTPConnect(TObject *Sender)
{
DisplayHint("已正确连接到服务器!");
OpenConfig();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMFTPConnectionFailed(TObject *Sender)
{
DisplayHint("网络连接失败!");
ShowMessage("网络连接失败,将无法使用在线更新功能!");
UpdateMenu->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMFTPSuccess(TCmdType Trans_Type)
{
switch(cs)
{
case CS_UpdateList: UpdateList();break;
case CS_DownloadFile: DisplayHint("文件下载完毕!请再次点击文档!");break;
}
cs=CS_NONE;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NMFTPFailure(bool &Handled, TCmdType Trans_Type)
{
switch(cs)
{
case CS_UpdateList: DisplayHint("下载文章列表失败!");break;
case CS_DownloadFile: DisplayHint("文件下载失败!");break;
}
cs=CS_NONE;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ListBoxClick(TObject *Sender)
{
char fn[256];
int fp;
strcpy(fn,ListBox->Items->Strings[ListBox->ItemIndex].c_str());
strcat(fn,".TXT");
fp=open(fn,O_RDONLY);
if(fp==-1)
{
if(UpdateMenu->Enabled==false)
{
DisplayHint("文件打开失败!");
}
if(cs==CS_NONE)
{
DisplayHint("文件打开失败!将自动从服务器更新!");
cs=CS_DownloadFile;
NMFTP->Download(fn,fn);
}else
{
DisplayHint("网络正在做其它处理,请稍后再点击文件!");
}
return;
}
Memo->Clear();
Memo->Lines->LoadFromFile(fn);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::UpdateListMenuClick(TObject *Sender)
{
DownloadList();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -