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

📄 mainunit.cpp

📁 前些日子帮某些人做的毕业设计
💻 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 + -