mainform.cpp

来自「著名的SecureBlackBox控件完整源码」· C++ 代码 · 共 175 行

CPP
175
字号
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;
bool ConnActive;
TClientThread* Thread;

//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
        : TForm(Owner)
{
  SetLicenseKey((AnsiString)
  "ADDCD14AD06709806817E0B3D7BFD0A2222D536FE156466C5D5FE65DB5DEAE76" + 
  "FFDEBC07E915A5751C12C01C783958872A38E4A5EDA140E7247E0F2E56442A3C" + 
  "F3E9347AD8FDE52083A0DFC86BC00ECB0FD0CF1B51159A2BCB84F6EA6349EF47" + 
  "5C15A59AFCC55F7C3AAD26C279628B5D91B1DC94BD2385354A70CCA3B76101D9" + 
  "F41C84A639FC3CCE4BA8F0CC4A66DCD150114A3F58C1AD46B7B94643741BC20A" + 
  "8DCA83AB921480951B423CAA19EF1863A47CA2C3422E7E5634BED98939A5AE43" + 
  "DE1E4BAD79E66D8A5C973B3455656C8C9B6FF024FADD6CDA02D0F506D98493C8" + 
  "BD1ED7B237DB75FA31F2C82654490CDDDEE24E19939137B9E1DB05508733B22F");
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormCreate(TObject *Sender)
{
    ConnActive = false;
}
//---------------------------------------------------------------------------
void TFormMain::Log(const AnsiString S, bool AError)
{
    TListItem* Item = ListView->Items->Add();
    Item->SubItems->Add(DateTimeToStr(TDateTime::CurrentDateTime()));
    Item->SubItems->Add(S);
    if (AError)
        Item->ImageIndex = 0;
    else
        Item->ImageIndex = 1;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ButtonStartClick(TObject *Sender)
{
    if (!ConnActive)
    {
        ButtonStart->Caption = "Stop";
        ConnActive = true;
        Thread = new TClientThread(EditHost->Text, StrToIntDef(EditPort->Text, 22),
          EditUsername->Text, EditPassword->Text, StrToInt(EditLocalPort->Text),
          EditRemoteHost->Text, StrToInt(EditRemotePort->Text), false);
        Thread->OnLog = ThreadLog;
        Thread->OnTerminate = ThreadTerminate;
        Thread->OnConnectionChange = ThreadConnectionChange;
        Thread->OnConnectionAdd = ThreadConnectionAdd;
        Thread->OnConnectionRemove = ThreadConnectionRemove;
        Thread->FreeOnTerminate = true;
        Thread->Resume();
    }
    else
    {
        if (Thread)
            Thread->Terminate();
        ButtonStart->Caption = "Start";
        ConnActive = false;
    }
}
//---------------------------------------------------------------------------
void TFormMain::RefreshListViewItem(TListItem* Item)
{
    AnsiString S;

    TConnection* Conn = (TConnection*)(Item->Data);
    Item->Caption = "";
    Item->SubItems->Clear();
    Item->SubItems->Add(Conn->RemoteHost + ":" +
      IntToStr(Conn->RemotePort));
    Item->SubItems->Add(IntToStr(Conn->Sent));
    Item->SubItems->Add(IntToStr(Conn->Received));
    if ((Conn->InState == icsActive) &&
      (Conn->OutState == ocsActive))
    {
        Item->ImageIndex = 0;
        S = "Active";
    }
    else if ((Conn->InState == icsClosing || Conn->InState == icsClosed) ||
      (Conn->OutState == ocsClosing || Conn->OutState == ocsClosed))
    {
        Item->ImageIndex = 2;
        S = "Closing";
    }
    else if (Conn->OutState == ocsEstablishing)
    {
        Item->ImageIndex = 1;
        S = "Setting up";
    }
    else
    {
        Item->ImageIndex = -1;
        S = "Unknown";
    }
    Item->SubItems->Add(S);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ThreadLog(TObject* Sender, const AnsiString S, bool Error)
{
    Log(S, Error);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ThreadTerminate(TObject* Sender)
{
    Thread = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ThreadConnectionChange(TObject* Sender, TConnection* Conn)
{
    TListItem* Item = ListViewConnections->FindData(0, Conn, true, false);
    RefreshListViewItem(Item);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ThreadConnectionAdd(TObject* Sender, TConnection* Conn)
{
    TListItem* Item = ListViewConnections->Items->Add();
    Item->Data = Conn;
    RefreshListViewItem(Item);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ThreadConnectionRemove(TObject* Sender, TConnection* Conn)
{
    TListItem* Item = ListViewConnections->FindData(0, Conn, true, false);
    ListViewConnections->Items->Delete(ListViewConnections->Items->IndexOf(Item));
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormDestroy(TObject *Sender)
{
    if (Thread != NULL)
        Thread->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::btnExecuteClick(TObject *Sender)
{
    TQueryThread* Thread = new TQueryThread(EditDBName->Text, EditDBUsername->Text,
      EditDBPassword->Text, EditQuery->Text);
    Thread->FreeOnTerminate = true;
    Thread->OnTerminate = QueryThreadTerminate;
    Thread->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::QueryThreadTerminate(TObject* Sender)
{
    TSQLDataSet* DataSet = ((TQueryThread*)(Sender))->DataSet;
    Log((AnsiString)"Rows affected: " + IntToStr(((TQueryThread*)(Sender))->RowCount));
    ListViewResults->Items->Clear();
    ListViewResults->Columns->Clear();
    for (int i = 0; i<DataSet->Fields->Count; i++)
    {
        TListColumn* Column = ListViewResults->Columns->Add();
        Column->Caption = DataSet->Fields->Fields[i]->DisplayName;
    }
    DataSet->First();
    while (!DataSet->Eof)
    {
        TListItem* Item = ListViewResults->Items->Add();
        if (DataSet->Fields->Count > 0)
            Item->Caption = DataSet->Fields->Fields[0]->AsString;
        for (int i = 1; i<DataSet->Fields->Count; i++)
            Item->SubItems->Add(DataSet->Fields->Fields[i]->AsString);
        DataSet->Next();
    }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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