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

📄 c14_4f.cpp

📁 C++Builder编程实例详解,用具体的例子阐明C++的一些基本操作,所有程序均在BC++上编译过.可靠,建议下载
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//----------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include <shellapi.hpp>

#include "C14_4f.h"
#include "usrinfo.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
String __fastcall TMainForm::NodePath(TTreeNode *Node)
{ // 该函数用于返回当前节点的路径
    if (Node == Root)
    return ".";
    else
    return NodePath(Node->Parent) + "/" + Node->Text;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ConnectBtnClick(TObject *Sender)
{ // 单击“连接”按钮(或选择“连接”菜单项)执行该程序
    if (FTP->State == prcConnected)	Disconnect();

    ConnectForm = new TConnectForm(this); // 创建用于输入对话框
    if (ConnectForm->ShowModal() == mrOk) // 有模式显示对话框
    { // 用户确定连接
        FTP->UserId = ConnectForm->UserNameEdit->Text; // 设置用户名
        FTP->Password = ConnectForm->PasswordEdit->Text; // 设置口令
        FTP->RemoteHost = ConnectForm->RemoteHostEdit->Text; // 设置远程主机地址
        FTP->RemotePort = ConnectForm->RemotePortEdit->Text.ToInt(); // 设置端口号
                                    // ToInt() 成员函数用于将字符串转换为整数
        FTP->Connect(FTP->RemoteHost, FTP->RemotePort); // 申请连接
        Root = DirTree->Items->AddChild(NULL, FTP->RemoteHost); // 增加当前连接节点
        Root->ImageIndex = FTPServer; // 设置节点位置
        Root->SelectedIndex = FTPServer;
        DirTree->Selected = Root; // 设置目录位置
    }
    delete ConnectForm; // 删除对话框对象实例。
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FileExitItemClick(TObject *Sender)
{ // 结束程序,用户选择“文件”菜单的“退出”项执行该程序
     FTP->Quit(); // 结束 FTP 控件
     Application->ProcessMessages(); // 处理消息
     while (FTP->Busy)
          Application->ProcessMessages();
     Close(); // 关闭主窗体
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ViewSmallItemClick(TObject *Sender)
{ // 显示小图标
     FileList->ViewStyle = vsSmallIcon;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ViewRefreshItemClick(TObject *Sender)
{ // 刷新窗口
    DirTreeChange(NULL, DirTree->Selected);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ViewListItemClick(TObject *Sender)
{ // 显示文件列表
    FileList->ViewStyle = vsList;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ViewLargeItemClick(TObject *Sender)
{ // 显示大图标,选择“查看”菜单的“大图标”项执行该程序
    FileList->ViewStyle = vsIcon;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ViewDetailsItemClick(TObject *Sender)
{ // 显示文件细节
    FileList->ViewStyle = vsReport;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ToolsDisconnectItemClick(TObject *Sender)
{ // 结束连接。用户选择“工具”菜单的“断开”项执行该程序
    Disconnect();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::RefreshBtnClick(TObject *Sender)
{ // 刷新
    FileList->Items->Clear();
    FTP->List(NodePath(DirTree->Selected));
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::PasteFromItemClick(TObject *Sender)
{ // 用户选择弹出菜单的“粘贴”项执行该程序
   if (OpenDialog1->Execute()) // 显示打开文件对话框
       // 发送文件
       FTP->PutFile(OpenDialog1->FileName, NodePath(DirTree->Selected));
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{ // 窗体关闭时(执行Close方法后),执行该程序
    FTP->Cancel(); // 取消 FTP 操作
    FTP->Quit(); // 结束 FTP
    while(FTP->Busy)
        Application->ProcessMessages();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{ // 程序开始运行时(创建主窗体),执行该程序
    TSHFileInfo SHFileInfo;

    // 初始化程序设置
    DirTree->Images = SmallImages;
    SmallImages->ResourceLoad(rtBitmap, "IMAGES", clOlive);
    FileList->SmallImages = new TImageList(16, 16);
    FileList->SmallImages->ShareImages = true;
    FileList->SmallImages->Handle = SHGetFileInfo("*.*", 0, &SHFileInfo,
          sizeof(SHFileInfo), SHGFI_SMALLICON|SHGFI_ICON|SHGFI_SYSICONINDEX);
    FileList->LargeImages = new TImageList(32, 32);
    FileList->LargeImages->ShareImages = true;
    FileList->LargeImages->Handle = SHGetFileInfo("*.*", 0, &SHFileInfo,
          sizeof(SHFileInfo), SHGFI_LARGEICON|SHGFI_ICON|SHGFI_SYSICONINDEX);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FTPBusy(TObject *Sender, WordBool isBusy)
{ // 当 FTP 开始忙或开始空闲时,触发该事件
    if(isBusy)
    { // FTP 忙
        Screen->Cursor = crHourGlass; // 设置光标
        FileList->Items->BeginUpdate(); // 更新列表
        Previous = RefreshBtn->Enabled;
        RefreshBtn->Enabled = false;
    }
    else
    { // FTP 空闲
        Screen->Cursor = crDefault; // 设置光标
        FileList->Items->EndUpdate(); // 停止更新
        RefreshBtn->Enabled = Previous;
    }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FTPListItem(TObject *Sender, const Variant &Item)
{ // FTP 完成文件列表传输
    TTreeNode *Node;
    String filename((String)Item.OlePropertyGet("Filename"));
    String Date((String)Item.OlePropertyGet("Date"));
    int Attributes(Item.OlePropertyGet("Attributes"));
    int Size(Item.OlePropertyGet("Size"));
    CreateItem(filename, Attributes, Size, Date);
    StatusBar->Panels->Items[1]->Text = " " + FTP->ReplyString;
    if (Attributes == 1)
    {
        if (DirTree->Selected != NULL)
        {
             if (DirTree->Selected !=NULL)
                 Node = DirTree->Selected->getFirstChild();
             else
               Node = NULL;

             while(Node)
                if (CompareText(Node->Text, filename) == 0)
                   return;
                else
                   Node = DirTree->Selected->GetNextChild(Node);
               if (!Node)
               {
                  Node = DirTree->Items->AddChild(DirTree->Selected, filename);
                  Node->ImageIndex = Folder;
                  Node->SelectedIndex = OpenFolder;
               }
        }
        else
             DirTree->Items->AddChild(Root, filename);
    }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FTPProtocolStateChanged(TObject *Sender,
	short ProtocolState)
{
    switch(ProtocolState)
    {
        case ftpAuthentication:
            FTP->Authenticate(FTP->UserId, FTP->Password);
            break;
         case ftpTransaction:
            FTP->List("/");
            break;
    }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FTPStateChanged(TObject *Sender, short State)
{ // FTP 状态改变时,触发该事件
    switch(State)
    {
        case prcConnecting : // 开始连接
            StatusBar->Panels->Items[0]->Text = "正在连接...";
            break;
        case prcResolvingHost : // 正在解析主机名(将主机名转换为 IP 地址)
            StatusBar->Panels->Items[0]->Text = "正在解析IP地址...";
            break;
        case prcHostResolved : // 完成主机名解析
            StatusBar->Panels->Items[0]->Text =
            "找到主机 !";
            break;
        case prcConnected:
           { // 实现连接
             StatusBar->Panels->Items[0]->Text = "连接到: " + FTP->RemoteHost;
             ConnectBtn->Hint = "断开";

⌨️ 快捷键说明

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