📄 wizard.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 + -