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

📄 wizard.cpp

📁 著名的SecureBlackBox控件完整源码
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Wizard.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmWizard *frmWizard;
//---------------------------------------------------------------------------
__fastcall TfrmWizard::TfrmWizard(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::FormCreate(TObject *Sender)
{
    FStep = 0;
    FCount = 3;
    FSteps[0] = pnlStep1;
    FSteps[1] = pnlStep2;
    FSteps[2] = pnlStep3;
    FSteps[3] = pnlStep4;
    FSteps[4] = pnlStep5;
    FSteps[5] = pnlStep6;
    pnlStep1->Show();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::FormShow(TObject *Sender)
{
    cmbKeyType->ItemIndex = 1;
    cmbKeySize->ItemIndex = 1;
    dtpExpirationDate->Date = TDateTime::CurrentDate() + 365;
    edtName->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::btnBackClick(TObject *Sender)
{
    if (FStep == FCount)
    {
        btnFinish->Hide();
        btnNext->Show();
    }
    FSteps[FStep]->Hide();
    FStep--;
    FSteps[FStep]->Show();
    if (FSteps[FStep]->OnEnter != NULL)
        FSteps[FStep]->OnEnter(NULL);
    btnBack->Enabled = FStep > 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::btnNextClick(TObject *Sender)
{
    if (FSteps[FStep]->OnExit != NULL)
        FSteps[FStep]->OnExit(NULL);
    FSteps[FStep]->Hide();
    FStep++;
    FSteps[FStep]->Show();
    if (FStep == FCount)
    {
        btnFinish->Show();
        btnNext->Hide();
    }
    btnBack->Enabled = FStep > 0;
    if (FSteps[FStep]->OnEnter != NULL)
        FSteps[FStep]->OnEnter(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::pnlStep1Enter(TObject *Sender)
{
    edtName->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::pnlStep2Enter(TObject *Sender)
{
    edtPassword->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::pnlStep2Exit(TObject *Sender)
{
    if (Sender == NULL)
    {
        if (edtPassword->Text != edtConfirmation->Text)
            throw Exception("Password and confirmation not equal");
    }
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::pnlStep3Enter(TObject *Sender)
{
    tmrProgress->Enabled = true;
    btnBack->Enabled = false;
    btnFinish->Enabled = false;
    btnCancel->Enabled = false;
//    TKeyGenerationThread.Create(Self);
    new TKeyGenerationThread(this);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::rbtDateClick(TObject *Sender)
{
    dtpExpirationDate->Enabled = rbtDate->Checked;
    if (Sender == rbtDate)
        dtpExpirationDate->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::edtNameChange(TObject *Sender)
{
    btnNext->Enabled = !edtName->Text.IsEmpty();
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::tmrProgressTimer(TObject *Sender)
{
    if (FCompleted)
    {
        pbrProgress->Position = 100;
        tmrProgress->Enabled = false;
        btnBack->Enabled = true;
        btnFinish->Enabled = true;
        btnCancel->Enabled = true;
    }
    else
        pbrProgress->Position = (pbrProgress->Position + 5) - ((pbrProgress->Position + 5)%105)*105;
}
//---------------------------------------------------------------------------

// TKeyGenerationThread

TKeyGenerationThread::TKeyGenerationThread(TfrmWizard *AWizard)
    : TThread(true)
{
    frmWizard = AWizard;
    FreeOnTerminate = true;
    Resume();
}
//---------------------------------------------------------------------------
void __fastcall TKeyGenerationThread::DoTerminate(void)
{
    frmWizard->FCompleted = true;
    TThread::DoTerminate();
}
//---------------------------------------------------------------------------
void __fastcall TKeyGenerationThread::Execute(void)
{
//    TElPGPSecretKey* SecKey;
//    AnsiString UserName;
//    int Bits, Expires;

    try
    {
      TElPGPSecretKey* SecKey = new TElPGPSecretKey;
      AnsiString UserName = frmWizard->edtName->Text;
      if (!frmWizard->edtEMail->Text.IsEmpty())
          UserName = UserName + "<" + frmWizard->edtEMail->Text + ">";

      int Bits = 1024 * __int64(IntPower(2, frmWizard->cmbKeySize->ItemIndex));

      int Expires;
      if (frmWizard->rbtNever->Checked)
          Expires = 0;
      else
          Expires = __int64(frmWizard->dtpExpirationDate->Date.operator double() - TDateTime::CurrentDate());

      if (frmWizard->cmbKeyType->ItemIndex == 0)
      {
          SecKey->Generate(frmWizard->edtPassword->Text, Bits,
            SB_PGP_ALGORITHM_PK_RSA, UserName, False, Expires);
      }
      else
      {
          SecKey->Generate(frmWizard->edtPassword->Text,
            1024, SB_PGP_ALGORITHM_PK_DSA,
            Bits, SB_PGP_ALGORITHM_PK_ELGAMAL_ENCRYPT, UserName, Expires);
      }

      SecKey->Passphrase = frmWizard->edtPassword->Text;
      frmWizard->FSecKey = SecKey;
    }
    catch(Exception &e)
    {
        FException = &e;
		Synchronize(&RaiseException);
    }
}
//---------------------------------------------------------------------------
void __fastcall TKeyGenerationThread::RaiseException(void)
{
    Application->ShowException(FException);
}
//---------------------------------------------------------------------------
void __fastcall TfrmWizard::FormClose(TObject *Sender,
      TCloseAction &Action)
{
    if ((FStep == 3) && (!FCompleted))
        Action = caNone;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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