📄 about.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <registry.hpp>
#pragma hdrstop
#include "About.h"
#include "PostMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TAboutForm *AboutForm;
//---------------------------------------------------------------------------
__fastcall TAboutForm::TAboutForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::Button1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::Label4Click(TObject *Sender)
{
ShellExecute(NULL, "open", "mailto:wghsoftware@hotmail.com", NULL, "", SW_SHOW);
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::FormCreate(TObject *Sender)
{
AnsiString Sno, Year;
int ret;
MainForm->RegistryStat=0;
OldLabelWP = Label4->WindowProc;
Label4->WindowProc = NewLabelWP;
const String RegKey = "\\SoftWare\\WGHSoftware\\AuditQuery";
TRegistry *MyRegistry = new TRegistry();
MyRegistry->RootKey = HKEY_LOCAL_MACHINE;
try {
if(MyRegistry->OpenKey(RegKey, false)) {
RegCode=MyRegistry->ReadString("SN");
Unit=MyRegistry->ReadString("UnitName");
SysName=MyRegistry->ReadString("SystemName");
SysCaption=MyRegistry->ReadString("SystemCaption");
MyRegistry->CloseKey();
}
}
catch(ERegistryException &E) {
ShowMessage(E.Message);
delete MyRegistry;
return;
}
RegCodeEdit->Text=RegCode;
UnitEdit->Text=Unit;
SysNameEdit->Text=SysName;
if(SysName.IsEmpty())SysNameEdit->ReadOnly=false;
if(SysName.IsEmpty() || Unit.IsEmpty() || SysName.IsEmpty()) return;
if(RegCode.Length()>=19){
Year=RegCode.SubString(1,4);
for(int i=1;i<5;i++) Year[i] -=('A' - '0');
Sno=MakeSN(UnitEdit->Text, SysNameEdit->Text, Year);
ret=Examine(Sno,RegCode);
}
else ret=0;
if(ret==1){
Label1->Caption="已注册";
Label1->Font->Color=clBlue;
BitBtn1->Enabled=false;
}
else if(ret==0)
{
Label1->Caption="未注册,请在这里注册";
Label1->Color=TColor(0x00DCD76D);
BitBtn1->Enabled=true;
RegCodeEdit->Text="";
}
else
{
Label1->Caption="已过期注册码";
Label1->Font->Color=clYellow;
BitBtn1->Enabled=true;
}
delete MyRegistry;
MainForm->RegistryStat=ret;
}
//---------------------------------------------------------------------------
/*
其实就是把她的windowproc变成自己的proc
就可以普做消息了
原理还是比较简单的
*/
//---------------------------------------------------------------------------
void __fastcall TAboutForm::NewLabelWP(TMessage &Msg)
{
switch (Msg.Msg)
{
case CM_MOUSEENTER:
{
Label4->Font->Color=clFuchsia;
Label4->Font->Size=10;
Label4->Font->Style=Label4->Font->Style << fsBold << fsItalic;
// mouse cursor has entered control
break;
}
case CM_MOUSELEAVE:
{
Label4->Font->Color=clBlue;
Label4->Font->Size=10;
Label4->Font->Style=Label4->Font->Style >> fsBold >> fsItalic;
// mouse cursor has left control
break;
}
case WM_DESTROY:
{
Label4->WindowProc = OldLabelWP;
break;
}
}
OldLabelWP(Msg);
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::Label1Click(TObject *Sender)
{
Notebook1->PageIndex=1;
AboutForm->Caption="注册";
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::BitBtn1Click(TObject *Sender)
{
AnsiString Year, Sno, ORARoot;
int ret=0;
//ShowMessage( RegCodeEdit->Text);
if(RegCodeEdit->Text.Length()<18) return;
Year=RegCodeEdit->Text.SubString(1,4);
for(int i=1;i<5;i++) Year[i] -=('A' - '0');
Sno=MakeSN(UnitEdit->Text, SysNameEdit->Text, Year);
ret=Examine(Sno,RegCodeEdit->Text);
if(ret==0){
Label1->Caption="请在这里注册";
Label1->Color=TColor(0x00DCD76D);
BitBtn1->Enabled=true;
ShowMessage("注册码错!");
return;
}
else if(ret==-1)
{
Label1->Caption=" 注册码已过期";
//Label1->Color=clYellow;
BitBtn1->Enabled=true;
ShowMessage("注册码已过期!");
return;
}
const String RegKey = "\\SoftWare\\WGHSoftware\\AuditQuery";
TRegistry *MyRegistry = new TRegistry();
MyRegistry->RootKey = HKEY_LOCAL_MACHINE;
try {
if(MyRegistry->OpenKey(RegKey, true)) {
MyRegistry->WriteString("UnitName",UnitEdit->Text);
MyRegistry->WriteString("SN",RegCodeEdit->Text);
MyRegistry->WriteString("SystemName",SysNameEdit->Text);
MyRegistry->CloseKey();
}
}
catch(ERegistryException &E) {
ShowMessage(E.Message);
delete MyRegistry;
return;
}
delete MyRegistry;
ShowMessage("注册成功!");
Label1->Caption="已注册";
BitBtn1->Enabled=false;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TAboutForm ::MakeSN(String sUnit, String sSysName, String sYear)
{
AnsiString sStr, SN=" ", Code="============", Unit, SysName, Year;
int tlen, slen, syslen, i,j,s,t;
char ch;
Year=sYear;
sStr="wsj-cwj-wgh-";
slen=sStr.Length();
Unit=sUnit.Trim();
tlen=Unit.Length();
for(;tlen<=slen;tlen++) Unit=Unit + " ";
for(i=1,s=0;i<=tlen;i++){
s +=Unit[i]*3;
}
SysName=sSysName.Trim();
syslen=SysName.Length();
for(i=1,t=0;i<=syslen;i++){
t +=SysNameEdit->Text[i];
}
if(atoi(Year.c_str())<1000){
ShowMessage("注册码非法!");
return SN;
}
try{
Year.ToInt();
}
catch(...){
ShowMessage("注册码非法!");
return SN;
}
for(;tlen>0;tlen--){
j=tlen % slen + 1;
ch=(sStr[j]*107 - Unit[tlen]*13 + tlen - slen) + Year.ToInt() - t;
Code[j]=abs( (Code[j] + ch - s )%26 ) + 'A';
if( Code[j]>'Z' || Code[j]<'A')
ShowMessage(j);
}
for(i=1;i<5;i++) Year[i]=Year[i] + 'A' - '0';
SN=Year + "-" + Code.SubString(1,4)+"-"+Code.SubString(5,4)+"-"+Code.SubString(9,4);
return SN;
}
int __fastcall TAboutForm::Examine(AnsiString Sno, AnsiString RCode)
{
int slen=Sno.Length();
int rlen=RCode.Length();
AnsiString Year, Today, s1, s2;
TDateTime *DateTime = new TDateTime();
Today = DateTime->CurrentDate().FormatString( "yyyy");
Year=RCode.SubString(1,4);
s1=Sno.SubString(6, slen);
s2=RCode.SubString(6, rlen);
for(int i=1;i<5;i++) Year[i] -=('A' - '0');
if(Today>Year) return -1;
if(s1!=s2) return 0;
delete DateTime;
return 1;
}
//---------------------------------------------------------------------------
void __fastcall TAboutForm::BitBtn2Click(TObject *Sender)
{
Notebook1->PageIndex=0;
AboutForm->Caption="关于本系统";
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -